【问题标题】:How to load all the certificates in a PEM-encoded certificate chain?如何加载 PEM 编码证书链中的所有证书?
【发布时间】:2020-09-30 07:11:26
【问题描述】:
当我在 PEM 编码的完整证书链上使用 OpenSSL.crypto.load_certificate(b'< PEM encoded certificate bytes >') 函数时,只有第一个证书作为 OpenSSL.crypto.X509 对象加载。
剩余的证书将被完全忽略。我认为这是因为解析器点击“END CERTIFICATE”并停止阅读。 OpenSSL(或其他地方)是否有解析和加载整个证书链的实用函数?
“完整证书链”是指包含多个 ----- BEGIN CERTIFICATE ----- / ----- END CERTIFICATE ----- 标记的 PEM 格式证书。
【问题讨论】:
标签:
python
openssl
ssl-certificate
x509certificate
pyopenssl
【解决方案1】:
这是一个简短的 sn-p,它从 PEM 编码的字节缓冲区中读取所有证书:
start_line = b'-----BEGIN CERTIFICATE-----'
def read_all_certs(pem_bytes):
result = []
cert_slots = pem_bytes.split(start_line)
for single_pem_cert in cert_slots[1:]:
cert = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, start_line+single_pem_cert)
result.append(cert)
return result