[当我在PEM编码的完整证书链上使用OpenSSL.crypto.load_certificate(b'< PEM encoded certificate bytes >')
功能时,仅第一个证书作为OpenSSL.crypto.X509
对象被加载。
剩余的证书将被完全忽略。我认为这是因为解析器命中“ END CERTIFICATE”并停止读取。 OpenSSL(或其他地方)中是否有实用程序函数来解析和加载整个证书链?
通过“完整证书链”,我是指包含多个----- BEGIN CERTIFICATE -----
/ ----- END CERTIFICATE -----
标记的PEM格式的证书。
这是一个简短的代码段,可从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