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
相关产品推荐
相关产品推荐

