如何/如何使用python和加密模块生成PKCS#12文件?

如何/如何使用pythoncryptography模块生成PKCS#12文件

使用上述模块为私钥生成.pem文件内容非常容易:

keyPEMBytes = privateKey.private_bytes(
    encoding=serialization.Encoding.PEM,format=serialization.PrivateFormat.TraditionalOpenSSL,encryption_algorithm=serialization.NoEncryption())

也很容易为相关证书生成.cer / .pem文件内容

certBytes = certificate.public_bytes(encoding=serialization.Encoding.PEM)

但是我需要它们(和它们的链)聚集在单个.p12(PKCS12文件)上.所述模块记录了how to parse/consume PKCS12 formats,但是关于如何生成它们却一无所获(我能找到).

我对PKI东西的理解是偶然的,所以也许我只是没有在文档中搜索正确的关键字?

我可以使用以下命令在Linux上的命令行中创建.p12文件

openssl pkcs12 -export -out myIdentity.p12 -inkey myPrivKey.pem -in myCert.crt -certfile myCertChain.crt

所以我可以用subprocess / cmd包装这样的调用,并用tempfiles / pipes弄乱.我希望将其全部保留在内存/ python中.

我应该考虑使用其他的python TLS库吗?

最佳答案
如您所述,加密技术可以使用load_key_and_certificates解析PKCS12(至少99.99%的人使用的子集),但是当前不支持序列化到PKCS12.

我是该项目的核心开发人员之一,总的来说,密码学的功能集由用户提出问题来解释,这些问题解释了他们的用例和对特定功能的需求.我建议在跟踪器上写一些东西进行讨论.听起来您的需求将由一个大致如下的简单API满足:

from cryptography.hazmat.primitives.serialization.pkcs12 import generate_pkcs12

pem_pkcs12 = generate_pkcs12(
    BestAvailableEncryption(b"somepassword"),key,[cert1,cert2]
)

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...