在Python中读取X509证书

0 投票
1 回答
13059 浏览
提问于 2025-04-18 10:12

我有一段C#代码,它能完成我需要的工作:

//Try create an X509 cert object
X509Certificate x509Cert = new X509Certificate("C:/Users/mryan/Documents/Code/SampleApps/bundle.p12", "passphrase");

//Serialize Cert and POST to server
string devString = Newtonsoft.Json.JsonConvert.SerializeObject(x509Cert);

result = wc.UploadString(apiRoot + "/Accounts/" + accId + "/certs", "POST", devString)

在这里,devString的值会是:

"{\"RawData\":\"MIICiTCCAfKgAwI...OhpEV23wsm06G2s5OJk=\"}"

据我了解,RawData是x509Cert中的一个属性,它的值是一个字节数组。

有没有什么明显的Python模块可以实现同样的效果?我在看这个答案,但我不确定它是否能满足我的需求。

我想要的Python伪代码是:

#Create X509 Cert object
x509cert = module.readX509Certificate("C:/Users/mryan/Documents/Code/SampleApps/bundle.p12", "passphrase")
cert_data = {"RawData": x509Cert}
result = requests.post(apiRoot + "/Accounts/" + accId + "/certs", data=cert_data)

如果你有任何处理这个问题的想法,那就太好了!

1 个回答

3

如果我理解你的问题,你需要加载一个PKCS#12格式的证书,然后把这个证书里的公钥上传到服务器。这个操作可以通过pyopenssl的加密模块来完成。

import json
import requests
from OpenSSL import crypto

P12_CERT_FILE = 'C:/Users/mryan/Documents/Code/SampleApps/bundle.p12'
p12_cert = crypto.load_pkcs12(open(P12_CERT_FILE).read(), 'passphrase')
pem_cert = crypto.dump_certificate(crypto.FILETYPE_PEM, p12_cert.get_certificate())

# remove PEM header, footer, and new lines to produce raw cert data
raw_data = ''.join(pem_cert.split('\n')[1:-2])
cert_data = json.dumps({'RawData': raw_data})
result = requests.post(apiRoot + "/Accounts/" + accId + "/certs", data=cert_data)

撰写回答