问题描述
我有一个HTTP触发的Python Azure函数。承载此功能的App Service设置为Require
客户端证书,并且仅使用HTTPS。
Azure通过X-ARR-ClientCert
标头自动将客户端的证书从每个HTTP请求传递到功能代码。
如何使用Python确定传入证书的类型(.der,.crt,.pem,.cer)?
示例:
- 使用Postman进行测试时,我通过
Settings/Certificates
上传了.crt格式的证书
- 邮递员将此文件编码为.der(二进制)文件,并将其传递给Function端点
- Azure(负载均衡器?)接收到请求,并通过
X-ARR-ClientCert
标头将证书转发到我的Python函数代码
如何确定证书文件的类型,以便可以以编程方式解析文件中的属性(Issuer
,Common Name
,not_valid_before/after
等)?
解决方法
恐怕您无法使用python自动确定证书,但是您可以手动执行并直接查看编码的证书。
首先,以txt格式打开证书文件,如果有----BEGIN CERTIFICATE----
之类的起始行,则为PEM
格式,否则为{{1 }}格式。
然后,这里是一些common OpenSSL certificate manipulations:
查看PEM编码的证书 使用带有证书扩展名的命令,用证书名称替换cert.xxx
DER
如果收到以下错误,则表示您正在尝试查看DER编码的证书,并且需要使用“查看下面的DER编码的证书”中的命令
无法加载证书 12626:错误:0906D06C:PEM例程:PEM_read_bio:无起始行:pem_lib.c:647:期望中:受信任的证书 查看DER编码的证书
openssl x509 -in cert.pem -text -noout
openssl x509 -in cert.cer -text -noout
openssl x509 -in cert.crt -text -noout