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

Chr*_* W. 4 python openssl pyopenssl ssl-certificate x509certificate

当我在 PEM 编码的完整证书链上使用OpenSSL.crypto.load_certificate(b'< PEM encoded certificate bytes >')函数时,只有第一个证书作为对象加载OpenSSL.crypto.X509

其余的证书将被完全忽略。我认为这是因为解析器点击“END CERTIFICATE”并停止读取。OpenSSL(或其他地方)中是否有实用程序函数可以解析并加载整个证书链?

----- BEGIN CERTIFICATE -----我所说的“完整证书链”是指包含多个/标记的 PEM 格式的证书----- END CERTIFICATE -----

yos*_*ian 7

这个答案在下一个版本 (39) 之前不会完全适用cryptography,但您现在可以使用以下命令来执行此操作cryptography.x509.load_pem_x509_certificates

from cryptography import x509

certs = x509.load_pem_x509_certificates(b"...")
Run Code Online (Sandbox Code Playgroud)

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


Pak*_*ula 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
Run Code Online (Sandbox Code Playgroud)