Генериране на CSR в Python

Опитвам се да генерирам CSR в Python, без да използвам OpenSSL. Ако някой може да посочи правилната посока, ще съм много благодарен.


person Sean Nilan    schedule 09.07.2010    source източник
comment
Не можете ли да използвате никакъв инструментариум или само OpenSSL? PKCS#10 (формат за заявка за сертификат) е доста прост, ако имате достъп до ASN.1 енкодер.   -  person Shawn D.    schedule 16.07.2010


Отговори (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
person Laurent Luce    schedule 01.11.2015

m2crypto може да бъде решение (вижте CreateX509Request в примера за принос), въпреки че разчита на OpenSSL.

Можете също да използвате python-nss, който използва NSS библиотеката на Mozilla. nss.nss.CertificateRequest беше добавен съвсем наскоро. Документацията за API, налична в момента на уебсайта, не е актуална, но ето някои насоки за по-нови версии:

Има го и в CVS:

:pserver:[email protected]:/cvsroot/mozilla/security/python/nss 
person Bruno    schedule 10.08.2010

Започнах да прилагам генератор на CSR, използвайки PyCrypto и PyASN1 през последните няколко дни. Първият код е достъпен на адрес https://github.com/jandd/python-pkiutils

person jandd    schedule 19.01.2014

Като всеки език, Python просто имплементира алгоритми. Не знам почти нищо за криптографията, но ако трябваше да внедря това в Python, бих потърсил спецификация как да внедря CSR.

Чрез Google и Wikipedia намерих този RFC. Вашата задача ще бъде да приложите това в Python.

Лично аз вероятно първо бих опитал да използвам инструмента на командния ред (може би чрез извикване на функцията system(), ако трябва да е от Python).

person Sean Woods    schedule 09.07.2010