如何加载一个以 PEM 编码的证书链中的所有证书?

4
当我使用 OpenSSL.crypto.load_certificate(b'< PEM encoded certificate bytes >') 函数来处理一个包含多个证书链的PEM格式的完整证书时,只有第一张证书会被加载成为一个 OpenSSL.crypto.X509 对象。
剩余的证书会被完全忽略。我猜这是因为解析器遇到了 "END CERTIFICATE" 标记后就停止读取了。在 OpenSSL (或其他地方)中是否存在一个实用程序函数,可以解析并加载整个证书链呢?
通过“完整证书链”我指的是一个包含多个----- BEGIN CERTIFICATE ----- / ----- END CERTIFICATE ----- 标记的PEM格式证书。
2个回答

7

在接下来的cryptography版本(39)发布之前,本回答可能不完全适用,但您现在可以使用cryptography.x509.load_pem_x509_certificates 来实现:

from cryptography import x509

certs = x509.load_pem_x509_certificates(b"...")

该API将返回输入中一个或多个证书的列表,如果找不到有效的证书PEMs,则会引发异常。


5
以下是一个简短的代码片段,它可以从一个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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接