我正在使用 python 加载 pfx 证书。
pfx = crypto.load_pkcs12(pfx, self.nfe_a1_password)
cert = pfx.get_certificate()
end = datetime.strptime(cert.get_notAfter(), '%Y%m%d%H%M%SZ')
subj = cert.get_subject()
http://www.pyopenssl.org/en/stable/api/crypto.html#OpenSSL.crypto.PKCS12.get_ca_certificates
我得到了一个有趣的证书,方法 get_certificate() 返回 None,如果我调用 get_ca_certificate 它会返回证书。
如果pfx不返回证书是什么意思?证书颁发者给我发错了?
6年前的问题但是... 通常 pkcs#12 证书分为两部分:
公钥由根CA(认证机构)签名,也可以是自签名。如果根本没有签名,则客户端可能无法连接到服务器(错误:浏览器或代码上下文中的证书不受信任)。关于您的问题,公共证书可能是一个包含所有中间 CA 的证书链。目的是让客户端跟踪服务器证书并返回根 CA 公钥。
公共(PEM 格式)证书是所有公钥和所有中间 CA 的串联,如下所示:
# Public key of the SSL certificate (the server certificate)
-----BEGIN CERTIFICATE-----
ggEPADCCAQoCggEBAMGPTyynn77hqcYnjWsMwOZDzdhVFY93s2OJntMbuKTHn39B
...
lffygD5IymCSuuDim4qB/9bh7oi37heJ4ObpBIzroPUOthbG4gv/5blW3Dc=
-----END CERTIFICATE-----
# Trust chain intermediate certificate
-----BEGIN CERTIFICATE-----
SHh/VzZpGhkdWtHUfcKc1H/hgBKueuqI6lfYygoKOhJJomIZeg0k9zfrtHOSewUj
...
K1pp74P1S8SqtCr4fKGxhZSM9AyHDPSsQPhZSZg=
-----END CERTIFICATE-----
# Trust chain root certificate
-----BEGIN CERTIFICATE-----
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
...
HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
-----END CERTIFICATE-----
因此,如果没有中间 CA,最后两个证书(
Trust chain intermediate certificate
和 Trust chain root certificate
)可能存在也可能不存在,因此调用
pfx.get_ca_certificates()
将是
None
如果不是 None 那么您可能希望将它们全部附加到您自己的证书链/文件中。