You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python从.pfx证书提取公钥:解决p12对象无get_publickey()方法问题

从PFX证书中同时提取私钥和公钥的方法

嘿,我明白你的困扰了!你说得没错,OpenSSL.crypto.PKCS12对象确实没有直接的get_publickey()方法,但我们可以通过先提取证书,再从证书中获取公钥的方式来解决这个问题。PFX(PKCS#12)文件其实包含了私钥和对应的证书链,公钥就存储在证书里。

下面是修改后的完整代码,既能导出私钥到PEM文件,也能提取并保存公钥:

import contextlib
import OpenSSL.crypto
import os
import requests
import ssl
import tempfile

pfx_password = 'thiscertpassword'
tpem_private = 'temp_private.pem'
tpem_public = 'temp_public.pem'
pfxfile = 'fts.pfx'

# 加载PFX文件
with open(pfxfile, 'rb') as f:
    pfx = f.read()
p12 = OpenSSL.crypto.load_pkcs12(pfx, pfx_password)

# 导出私钥到PEM文件
with open(tpem_private, 'wb') as f_pem:
    private_key = p12.get_privatekey()
    f_pem.write(OpenSSL.crypto.dump_privatekey(OpenSSL.crypto.FILETYPE_PEM, private_key))

# 提取证书并导出公钥到PEM文件
certificate = p12.get_certificate()
public_key = certificate.get_pubkey()
with open(tpem_public, 'wb') as f_pub:
    f_pub.write(OpenSSL.crypto.dump_publickey(OpenSSL.crypto.FILETYPE_PEM, public_key))

关键步骤解释:

  • p12.get_certificate():从PKCS12对象中取出包含公钥的证书对象
  • certificate.get_pubkey():从证书对象中提取公钥
  • OpenSSL.crypto.dump_publickey():将公钥以PEM格式导出,参数和导出私钥一致,指定FILETYPE_PEM即可

这样你就能同时得到私钥和公钥的PEM文件啦!

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

火山引擎 最新活动