Я пытаюсь создать CSR на Python без использования OpenSSL. Если кто-то может указать в правильном направлении, я был бы очень благодарен.
Генерация CSR в Python
Ответы (4)
Я предполагаю, что вы не хотите использовать командную строку 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
m2crypto может быть решением (см. CreateX509Request в примере contrib), хотя он использует 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:[email protected]:/cvsroot/mozilla/security/python/nss
Я начал реализовывать генератор CSR с использованием PyCrypto и PyASN1 в течение последних нескольких дней. Первый код доступен по адресу https://github.com/jandd/python-pkiutils.
Как и любой язык, Python просто реализует алгоритмы. Я почти ничего не знаю о криптографии, но если бы мне пришлось реализовать это на Python, я бы поискал спецификацию о том, как реализовать CSR.
Через Google и Википедию я нашел это RFC. Ваша задача — реализовать это на Python.
Лично я, вероятно, сначала попытался бы использовать инструмент командной строки (возможно, через вызов функции system()
, если это нужно было из Python).