Tra*_*ggs 8 python pkcs#12 python-3.x python-cryptography
如何/如何使用 python 和加密模块生成 PKCS#12 文件?
使用上述模块为私钥生成 .pem 文件的内容非常简单:
keyPEMBytes = privateKey.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.TraditionalOpenSSL,
encryption_algorithm=serialization.NoEncryption())
Run Code Online (Sandbox Code Playgroud)
也很容易为关联的证书生成 .cer/.pem 文件的内容:
certBytes = certificate.public_bytes(encoding=serialization.Encoding.PEM)
Run Code Online (Sandbox Code Playgroud)
但是我需要将它们(和它们的链)整合到一个 .p12(PKCS12 文件)中。所述模块记录了如何解析/使用 PKCS12 格式,但没有(我能找到的)关于如何生成它们的信息。
不过,我对 PKI 内容的理解是偶然的,所以也许我只是没有在文档中搜索正确的关键字?
我可以使用 Linux 在命令行中创建 .p12 文件
openssl pkcs12 -export -out myIdentity.p12 -inkey myPrivKey.pem -in myCert.crt -certfile myCertChain.crt
Run Code Online (Sandbox Code Playgroud)
所以我可以用 subprocess/cmd 来包装这样的调用,并用临时文件/管道来处理。不过,我希望将其全部保存在内存/python 中。
是否有我应该考虑的不同的 python TLS 库,可以做到这一点?
正如您所指出的,cryptography可以使用load_key_and_certificates解析 PKCS12(至少是 99.99% 的人使用的子集),但目前不支持序列化到 PKCS12。
我是该项目的核心开发人员之一,一般来说cryptography,功能集是由用户提交的问题驱动的,这些问题解释了他们的用例和对特定功能的需求。我建议在跟踪器上写一些东西以供讨论。听起来您的需求将被一个简单的 API 满足,大致如下:
from cryptography.hazmat.primitives.serialization.pkcs12 import generate_pkcs12
pem_pkcs12 = generate_pkcs12(
BestAvailableEncryption(b"somepassword"),
key,
[cert1, cert2]
)
Run Code Online (Sandbox Code Playgroud)
更新:此功能在 pyca/cryptography 3.0 中实现:
| 归档时间: |
|
| 查看次数: |
3681 次 |
| 最近记录: |