【问题标题】:Can I sign an X509 certificate entirely in Python?我可以完全用 Python 签署 X509 证书吗?
【发布时间】:2016-10-28 04:10:37
【问题描述】:

我正在使用 Google App Engine (GAE) python 2.7 运行时。

我需要签署(并且可能还生成)一个 X509 证书 (.csr)

我找到了几个guides,它们依赖于PyOpenSSL

据我了解,PyOpenSSL 是 OpenSSL 的封装,在 App Engine 中不可用。
Pycrypto 可用,但没有明确的 X509 预构建签名方法。

如何仅使用 python 签署 X509 .csr?

【问题讨论】:

  • dlitz.net/software/pycrypto/api/current/… 可能是您正在寻找的? ...我不确定这是否与 x509 相同...但看起来实现规范是公开的,因此您可以实现它...但这会很痛苦
  • Python 支持 Go 语言环境,您可以创建一个使用 golang.org/pkg/crypto/x509 的模块 - 并通过 REST API 调用它。
  • 在灵活的运行时运行签名代码,并将其作为普通应用引擎前端使用的单独服务。
  • 查看 GAE 文档,实际上并没有说您不能使用 PyOpenSSL,只是他们不会为您安装它。您能否在项目代码的PYTHONPATH 中的某处包含相关的.so.dll 文件,然后从那里导入?
  • 如果没有,请查看oscrypto,它声称能够做到这一点。

标签: python python-2.7 google-app-engine ssl x509


【解决方案1】:

我可能已经找到了解决方案:

Cryptography.io 完全基于 python,甚至提供了关于如何自签名证书的教程。

很高兴听到其他答案。

【讨论】:

  • 随着我深入挖掘.. 看起来他们依赖 OpenSSL 作为后端。我将把这个答案留在这里作为面包屑,但目前看来这行不通。
  • 更多面包屑 - 看起来 M2crypto 可以做到,但我不确定它是否依赖于 OpenSSL gist.github.com/eskil/2338529
  • M2Crypto 是 OpenSSL 最完整的 Python 包装器,所以不——他也依赖于 openssl。我真的不认为,世界上有这么疯子,将openssl移植到纯python,看不到任何意义。在您的情况下,您可以在普通主机上创建证书签名服务并从 GAE 使用他
【解决方案2】:

这不是直接的答案,因为我从不使用 C 和 Cython,但也许可以使用一些 C 库来完成这项任务。

来自Cython site

所有这些使 Cython 成为包装外部 C 的理想语言 库,将 CPython 嵌入到现有应用程序中,并快速 加快 Python 代码执行速度的 C 模块。

似乎不是最简单也不是最好的解决方案,但谁知道:)

【讨论】:

  • 不幸的是,Appengine 要求所有代码都用 Python 编写,没有 C 代码。
【解决方案3】:

我可以完全用 Python 签署 X509 证书吗?

几乎可以肯定,但我认为没有任何现有的纯 Python 实现可用。我能找到的最接近的是oscrypto,但能否签署X509 证书取决于ctypes 模块是否可用。

作者还写了一个名为certbuilder的模块,号称是“用于生成和签署X.509证书的Python库”,但它依赖于oscrypto模块。

然而,真正的问题听起来更像是……

我可以在 Google App Engine Python 标准环境上签署 X509 证书吗?

在这种情况下,oscrypto 模块可能无济于事,因为根据文档,环境不允许使用 ctypes 模块。

您确实可以访问 PyCrypto 模块,虽然有使用它读取 X509 证书的 a Python example 和验证 X509 证书的 C++ example,但 Python 绑定似乎并不完整支持编码和解码ASN.1。您也许可以将PyCryptoasn1cryptooscrypto 的同一作者结合起来,以获得完整的ASN.1 支持。

如果这些解决方案都没有任何用处,那么GAE Python Flexible EnvironmentGAE Custom Runtime 应该可以让您安装PyOpenSSL 软件包,但您必须联系他们的技术支持团队才能找到答案。

【讨论】:

  • oscrypto 将使用 ctypes 或 cffi 调用操作系统的加密库进行加密、解密、签名和验证。它不提供纯 Python 加密原语。
  • @wbond 似乎不太可能提供用于签署 X509 的纯 Python 实现,但感谢您的确认。已更新答案。
猜你喜欢
  • 2011-05-07
  • 2020-05-23
  • 2014-06-17
  • 2014-10-18
  • 1970-01-01
  • 1970-01-01
  • 2016-09-16
  • 2012-04-06
  • 2016-08-24
相关资源
最近更新 更多