如何使用Python请求库向EJBCA OSCP响应程序发出简单的证书吊销状态请求
示例:
# Determine if certificate has been revoked
ocsp_url = req_cert.extensions[2].value[0].access_location.value
ocsp_headers = {"whatGoes: here?"}
ocsp_body = {"What goes here?"}
ocsp_response = requests.get(ocsp_url, ocsp_headers, ocsp_body)
if (ocsp_response == 'revoked'):
return func.HttpResponse(
"Certificate is not valid (Revoked)."
)
基本上包括以下步骤:
requests.get
获取OCSP响应certificate_status
要检索主机名和端口的证书,可以使用以下精确答案:https://stackoverflow.com/a/49132495。Python中的OCSP处理记录在这里:https://cryptography.io/en/latest/x509/ocsp.html
代码
如果将上述各点转换为一个自包含的示例,则其如下所示:
测试1:良好证书
具有良好证书的如下测试调用
结果如下:
测试2:吊销的证书
当然,您还必须对吊销的证书进行反测试。这里reversed.badsl.com是首选:
这将作为输出提供:
AIA检索发卡机构证书
证书关系的典型场景如下所示:
服务器在TLS握手过程中提供服务器证书,通常还提供一个或多个中间证书。“通常”一词是有意使用的:一些服务器配置为不提供中间证书。浏览器然后使用AIA获取来构建认证链
证书颁发机构信息访问扩展中最多可以有两个条目:用于下载颁发者证书的条目和到OCSP服务器的链接
这些条目也可能丢失,但检查100个最流行服务器的证书的简短测试脚本显示,这些条目通常包含在公共证书颁发机构颁发的证书中
CA Issuers条目也可能丢失,但尽管有关OCSP服务器的信息可用,但可以使用自签名证书对其进行测试,例如使用OpenSSL:
在这种情况下,您必须在TLS握手中从链中确定颁发者证书,该证书直接位于链中的服务器证书之后,另请参见上图
出于完整性考虑:有时会出现另一种情况,尤其是与自签名证书结合使用时:如果未使用中间证书,则必须将相应的根证书(例如,在本地信任存储中可用)用作颁发者证书
相关问题 更多 >
编程相关推荐