You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 04:55:22