我想使用python进行一些SSL证书转换,特别是在以下之间: PEM <-> PFX PEM <-> P7B
我已经有用于PEM <-> DER的解决方案。 即:
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.x509 import (
load_der_x509_certificate,
load_pem_x509_certificate,
)
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
cert = form.cleaned_data.get('file')
der_file = pem_to_der(cert)
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
cert = form.cleaned_data.get('file')
pem_file = der_to_pem(cert)
def pem_to_der(cert):
try:
cert_to_der = load_pem_x509_certificate(cert.read(),
default_backend())
except ValueError:
return False
return cert_to_der.public_bytes(serialization.Encoding.DER)
def der_to_pem(cert):
try:
cert_to_der = load_der_x509_certificate(cert.read(),
default_backend())
except ValueError:
return False
return cert_to_der.public_bytes(serialization.Encoding.PEM)
我确实有使用subprocess.call的解决方案,如:
def pem_to_pfx(private_key_path, cert_path, name, passwd):
return subprocess.call("openssl pkcs12 -export -out " + "tmp/"
+ name + ".pfx" + " -password pass:" + passwd + " -inkey "
+ private_key_path + " -in " + cert_path, shell=True)
但是我宁愿避免这种情况。 有人知道使用python模块密码术进行这些转换的方法吗?
答案 0 :(得分:0)
cryptography
当前不支持序列化到PKCS12 / PFX或PKCS7(尽管可以parse PKCS12)。该项目通过带有具体用例的用户报告来确定开发优先级,因此请提出问题!
作为权宜之计,您可以生成PKCS12 using pyOpenSSL(使用cryptography
的绑定),但是我们更愿意构建一个可以直接使用而无需附加依赖项的良好API。