如何从 python 中的 x509 证书中提取公钥?
Posted
技术标签:
【中文标题】如何从 python 中的 x509 证书中提取公钥?【英文标题】:How to extract public key from a x509 certificate in python? 【发布时间】:2017-06-13 00:01:23 【问题描述】:下面显示了我遵循的代码示例,但是我得到了错误响应 - “无法加载证书”。
from cryptography.x509 import load_pem_x509_certificate
from cryptography.hazmat.backends import default_backend
cert_str = '-----BEGIN CERTIFICATE----- MIIDBTCCAe2gAwIBAgIQEsuEXXy6BbJCK3bMU6GZ/TANBgkqhkiG9w0BAQsFADAt... -----END CERTIFICATE-----';
cert_obj = load_pem_x509_certificate(str.encode(cert_str), default_backend())
public_key = cert_obj.public_key();
错误响应
Traceback (most recent call last):
File "C:\xampp1\htdocs\TestWorkPlace\TestPython\src\test1.py", line 10, in <module>
cert_obj = load_pem_x509_certificate(str.encode(cert_str), default_backend())
File "C:\Program Files (x86)\Python\lib\site-packages\cryptography\x509\base.py", line 43, in load_pem_x509_certificate
return backend.load_pem_x509_certificate(data)
File "C:\Program Files (x86)\Python\lib\site-packages\cryptography\hazmat\backends\multibackend.py", line 341, in load_pem_x509_certificate
return b.load_pem_x509_certificate(data)
File "C:\Program Files (x86)\Python\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 1175, in load_pem_x509_certificate
raise ValueError("Unable to load certificate")
ValueError: Unable to load certificate
请帮我解决这个问题。
【问题讨论】:
【参考方案1】:X509 证书中不包含私钥,只有公钥。要提取公钥,您已经获得了正确的代码,但您的证书将不会加载,因为它不是正确的 PEM 格式。
PEM 格式的证书具有 -----BEGIN CERTIFICATE-----
和 -----END CERTIFICATE-----
分隔符和介于两者之间的 base64 编码数据,但它还需要每行最多 64 个字符(最初在 RFC 1421 中定义,但也存在于 @987654322 中@)。
有些软件比规范更宽容,但pyca/cryptography
(OpenSSL 或 LibreSSL)的底层库要求以这种方式格式化。
【讨论】:
以上是关于如何从 python 中的 x509 证书中提取公钥?的主要内容,如果未能解决你的问题,请参考以下文章
java 从 PKCS12(比如pfx格式)证书中提取私钥证书(PrivateKey)和受信任的公钥证书(X509Certificate)的序列号(SerialNumber)