从PFX提取PEM密钥遇RFC 5280负序列号警告的问题咨询
问题
我通过Adobe Reader创建证书并保存至硬盘,希望提取PEM密钥以在其他程序中为PDF文件生成数字签名,使用以下Python代码:
import PyPDF2 from cryptography import x509 from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.hashes import SHA256 from cryptography.hazmat.primitives.asymmetric import padding from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives.serialization.pkcs12 import load_key_and_certificates def pfxToPem(): # Load the pfx file certificato_pfx = 'Nome.pfx' password = 'aaaaa' with open(certificato_pfx, 'rb') as pfx_file: pfx_data = pfx_file.read() # Extracts key and certificate private_key, certificate, additional_certificates = load_key_and_certificates(pfx_data, password.encode('utf-8')) # Serialize key private_key_pem = private_key.private_bytes( encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.PKCS8, encryption_algorithm=serialization.NoEncryption() ) # Save to file with open('chiave.pem', 'wb') as key_file: key_file.write(private_key_pem)
执行后收到警告:CryptographyDeprecationWarning: Parsed a negative serial number, which is disallowed by RFC 5280.
请问:代码是否存在错误?为何Adobe这类知名软件生成的证书会触发该警告?是否需要手动修改序列号?
回答
代码本身没有错误:你的代码核心是从PFX文件提取私钥并转成PEM格式,逻辑完全正常。警告来自cryptography库对证书合规性的检查,和私钥提取流程无关,生成的
chiave.pem文件可以正常使用。Adobe生成证书触发警告的原因:RFC 5280标准明确要求证书序列号必须是正整数,但Adobe Reader生成自签名证书时,可能采用了带符号的整数编码方式,导致序列号被解析为负数。这属于Adobe对标准的宽松实现,虽然不符合规范,但在自家生态里能正常运行。
不需要手动修改序列号:这个警告只是合规性提示,不会影响私钥的功能——你要提取的是私钥,证书序列号的问题不干扰私钥的使用。如果后续用证书时碰到兼容性问题,再考虑重新生成符合RFC 5280标准的证书就行,目前没必要修改。
内容的提问来源于stack exchange,提问作者Giovanni
相关产品推荐
相关产品推荐

