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

Python中从PFX提取证书与密钥后如何写入文件?

从PFX文件提取证书和私钥并写入文件

你已经通过pkcs12.load_key_and_certificates获取到了x509.Certificate类型的证书对象、私钥以及附加证书,要将它们转换为字符串并写入文件,可按以下步骤操作:

处理证书(写入x.crt)

x509.Certificate对象可以通过public_bytes()方法导出为PEM格式的字节流,再转成字符串写入文件:

from cryptography.hazmat.primitives import serialization

# 将证书转为PEM格式的字符串
cert_pem = certificate.public_bytes(
    encoding=serialization.Encoding.PEM
).decode("utf-8")

# 写入x.crt文件
with open("x.crt", "w") as f:
    f.write(cert_pem)

如果需要把附加证书也写入同一文件,可以遍历additional_certificates列表,逐个转换后追加:

# 写入主证书
with open("x.crt", "w") as f:
    f.write(cert_pem)
    # 追加附加证书
    for cert in additional_certificates:
        cert_add_pem = cert.public_bytes(encoding=serialization.Encoding.PEM).decode("utf-8")
        f.write(cert_add_pem)

处理私钥(写入x.key)

私钥对象(通常是RSAPrivateKey或其他私钥类型)可以通过private_bytes()方法导出为PEM格式:

# 将私钥转为PEM格式的字符串
key_pem = private_key.private_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PrivateFormat.PKCS8,
    encryption_algorithm=serialization.NoEncryption()
).decode("utf-8")

# 写入x.key文件
with open("x.key", "w") as f:
    f.write(key_pem)

完整示例代码

把读取PFX和导出的逻辑整合起来:

from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.serialization import pkcs12

# 读取PFX文件
with open("your_file.pfx", "rb") as pxfile:
    private_key, certificate, additional_certificates = pkcs12.load_key_and_certificates(
        pxfile.read(),
        password=None,  # 如果PFX有密码,替换为b"your_password"
        backend=default_backend()
    )

# 导出证书到x.crt
cert_pem = certificate.public_bytes(encoding=serialization.Encoding.PEM).decode("utf-8")
with open("x.crt", "w") as f:
    f.write(cert_pem)
    for cert in additional_certificates:
        f.write(cert.public_bytes(encoding=serialization.Encoding.PEM).decode("utf-8"))

# 导出私钥到x.key
key_pem = private_key.private_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PrivateFormat.PKCS8,
    encryption_algorithm=serialization.NoEncryption()
).decode("utf-8")
with open("x.key", "w") as f:
    f.write(key_pem)

内容的提问来源于stack exchange,提问作者nick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:13:25