我正在尝试在不使用 OpenSSL 的情况下在 Python 中生成 CSR。如果有人能指出正确的方向,我将不胜感激。
问问题
5850 次
4 回答
4
我假设您不想使用命令行 openssl 本身并且 Python 库是可以的。
这是我编写的用于创建 CSR 的辅助函数。它从生成的密钥对和 CSR 中返回私钥。该函数依赖于 pyOpenSSL.crypto。
def create_csr(self, common_name, country=None, state=None, city=None,
organization=None, organizational_unit=None,
email_address=None):
"""
Args:
common_name (str).
country (str).
state (str).
city (str).
organization (str).
organizational_unit (str).
email_address (str).
Returns:
(str, str). Tuple containing private key and certificate
signing request (PEM).
"""
key = OpenSSL.crypto.PKey()
key.generate_key(OpenSSL.crypto.TYPE_RSA, 2048)
req = OpenSSL.crypto.X509Req()
req.get_subject().CN = common_name
if country:
req.get_subject().C = country
if state:
req.get_subject().ST = state
if city:
req.get_subject().L = city
if organization:
req.get_subject().O = organization
if organizational_unit:
req.get_subject().OU = organizational_unit
if email_address:
req.get_subject().emailAddress = email_address
req.set_pubkey(key)
req.sign(key, 'sha256')
private_key = OpenSSL.crypto.dump_privatekey(
OpenSSL.crypto.FILETYPE_PEM, key)
csr = OpenSSL.crypto.dump_certificate_request(
OpenSSL.crypto.FILETYPE_PEM, req)
return private_key, csr
于 2015-11-01T17:46:19.883 回答
1
m2crypto可能是一个解决方案(请参阅contrib 示例中的 CreateX509Request),尽管它依赖于 OpenSSL。
您还可以使用python-nss,它使用Mozilla 的 NSS 库。nss.nss.CertificateRequest
是最近添加的。网站上目前可用的 API 文档不是最新的,但这里有一些关于较新版本的提示:
- http://koji.fedoraproject.org/koji/packageinfo?packageID=6444
- http://koji.fedoraproject.org/koji/buildinfo?buildID=185589
它也在 CVS 中:
:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot/mozilla/security/python/nss
于 2010-08-10T15:43:52.363 回答
0
在过去的几天里,我开始使用 PyCrypto 和 PyASN1 实现一个 CSR 生成器。第一个代码位于https://github.com/jandd/python-pkiutils
于 2014-01-19T18:05:18.603 回答
-5
像任何语言一样,Python 只是实现算法。我对密码学几乎一无所知,但如果我必须在 Python 中实现它,我会寻找关于如何实现 CSR 的规范。
通过谷歌和维基百科,我找到了这个 RFC。你的任务是在 Python 中实现它。
就个人而言,我可能首先尝试使用命令行工具(system()
如果需要来自 Python,可能通过调用该函数)。
于 2010-07-09T21:22:18.153 回答