我正在尝试在不使用OpenSSL的情况下在Python中生成CSR。如果有人能指出正确的方向,我将非常感激。
答案 0 :(得分:3)
我假设您不想使用命令行openssl本身,并且Python lib也可以。
这是我为创建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
答案 1 :(得分:1)
m2crypto可能是一个解决方案(请参阅CreateX509Request in the contrib example),尽管它依赖于OpenSSL。
您还可以使用python-nss,它使用Mozilla's NSS library。最近添加了nss.nss.CertificateRequest
。目前网站上提供的API文档不是最新的,但这里有一些针对较新版本的指示:
它也在CVS中:
:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot/mozilla/security/python/nss
答案 2 :(得分:1)
在过去的几天里,我开始使用PyCrypto和PyASN1实现CSR生成器。第一个代码位于https://github.com/jandd/python-pkiutils
答案 3 :(得分:-3)
与任何语言一样,Python只是实现算法。我对密码学几乎一无所知,但如果我必须在Python中实现这一点,我会寻找有关如何实现CSR的规范。
通过谷歌和维基百科,我找到了this RFC。您的任务是在Python中实现它。
就我个人而言,我可能首先尝试使用命令行工具(如果需要来自Python,可能通过调用system()
函数)。