Опитвам се да генерирам 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 в примера за принос), въпреки че разчита на OpenSSL.
Можете също да използвате python-nss, който използва NSS библиотеката на Mozilla. 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 и Wikipedia намерих този RFC. Вашата задача ще бъде да приложите това в Python.
Лично аз вероятно първо бих опитал да използвам инструмента на командния ред (може би чрез извикване на функцията system()
, ако трябва да е от Python).