Чтение сертификата X509 в Python

У меня есть следующий код на С#, который выполняет нужную мне работу:

//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)

Любые идеи о том, как справиться с этим, были бы замечательными!


person TomSelleck    schedule 18.06.2014    source источник


Ответы (1)


Насколько я понимаю ваш вопрос, вам нужно загрузить сертификат 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)
person mhawke    schedule 19.06.2014