【发布时间】:2021-11-09 00:18:07
【问题描述】:
我有一个 PEM 格式的私钥和一个证书,我想验证这两个项目是否相关联。解决方案类似于this 对PyOpenSSL 的回答,但使用cryptography 模块。
我有以下内容:
from cryptography.x509 import load_pem_x509_certificate
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
crt = '/path/to/crt'
key = '/path/to/privatekey'
cert = load_pem_x509_certificate(open(crt, 'rb').read(), default_backend())
prikey = serialization.load_pem_private_key(open(key, 'rb').read(), password=None, default_backend())
crt 和 key 文件是从单个 .p12 创建的,因此已知关联是有效的,但我正在寻找一种编程方式来验证这种关联是否未知。结果应该引发异常或返回 True/False,表明私钥与证书无关。
编辑:所以我能够弄清楚如何将键提取为字符串,我可以通过以下操作进行比较:
cpub = cert.public_key().public_bytes(serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo)
pkpub = prikey.public_key().public_bytes(serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo)
print(cpub == pkpub) # True
但是我想知道是否有办法使用他们的接口而不是字节串比较来验证这一点;显然,它们通过共享相同的公钥来匹配,因为 RSA 私钥包含公钥;这似乎难以验证。
【问题讨论】:
标签: python cryptography pem pkcs#12 python-cryptography