【问题标题】:How to encode an RSA key using PKCS12 in Python?如何在 Python 中使用 PKCS12 对 RSA 密钥进行编码?
【发布时间】:2010-12-11 11:30:05
【问题描述】:

我正在使用 Python(在 Google App Engine 下),并且我有一些 RSA 私钥需要以 PKCS#12 格式导出。有什么可以帮助我解决这个问题吗?我正在使用 PyCrypto/KeyCzar,我已经知道如何以 PKCS8 格式导入/导出 RSA 密钥,但我在 PKCS12 中确实需要它。

谁能指出我正确的方向?如果有帮助,我需要 PKCS12 格式的原因是我可以在 iPhone 上导入它们,这似乎只允许以该格式导入密钥。

【问题讨论】:

  • 您是否必须使用 python 以编程方式导出密钥,或者您可以在本地获取它们并按照 Justice 的建议使用 OpenSSL?

标签: python google-app-engine cryptography rsa pkcs#12


【解决方案1】:

如果您可以处理一些 ASN.1 生成,则可以相对轻松地将 PKCS#8 文件转换为 PKCS#12 文件。 PKCS#12 文件基本上是 PKCS#8 和证书的包装,因此要制作 PKCS#12 文件,您只需在 PKCS#8 文件和证书周围添加一些额外的数据。

通常,PKCS#12 文件将包含加密结构中的证书,但所有兼容的解析器都应该能够从未加密的结构中读取它。此外,PKCS#12 文件通常包含用于完整性检查的 MacData 结构,但这是可选的,没有它,兼容的解析器应该可以正常工作。

【讨论】:

  • 我认为这将是我的道路。 KeyCzar 包含一个 ASN1 解析器/创建器,我从中获取 PKCS#8 文件。我不知道 PKCS#12 只是 PKCS#8 文件的另一个包装器。 (不幸的是,这些东西很难解开,所有极其相似的首字母缩略词都包含特殊字符,有时甚至让谷歌感到困惑)。我很可能会将我的劳动成果作为补丁或至少某种类型的贡献模块贡献给 KeyCzar,这样其他人如果想做类似的事情就可以有一些地方去。
【解决方案2】:

该工作的标准工具通常是OpenSSL

请参阅openssl pkcs12 命令。

【讨论】:

  • GAE 不会运行 openSSL 二进制文件。
  • 你有一些 RSA 私钥。您需要导出它们。但是为什么需要使用 GAE 导出它们呢?为什么不直接使用 OpenSSL 导出它们,然后将导出的 pkcs12 文件发送到您的 GAE 应用程序?
  • 每个用户都有自己的 RSA 密钥对,在注册时创建。虽然我可以理论上生成大量密钥对并在用户注册时将它们分配给用户,但这似乎是一个非常糟糕的想法。
  • 如果情况变得更糟,您可以运行一个专门用于将 pkcs8 导出到 pkcs12 的 Amazon EC2 实例。
【解决方案3】:

此邮件列表张贴倾向于表明 PKCS12 未计划用于该软件包的未来功能,并且当前未实施。

http://lists.dlitz.net/pipermail/pycrypto/2009q2/000104.html

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-09-13
  • 1970-01-01
  • 2015-09-22
  • 2019-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多