OpenSSL을 사용하지 않고 Python으로 CSR을 생성하려고합니다. 누군가가 올바른 방향을 가리킬 수 있다면, 나는 매우 감사 할 것입니다.Python에서 CSR 생성
1
A
답변
-2
다른 언어와 마찬가지로 Python도 알고리즘을 구현합니다. 암호화에 관해서는 알지 못하지만, 이것을 파이썬으로 구현해야한다면, CSR을 구현하는 방법에 대한 스펙을 찾을 것입니다.
Google 및 위키 백과를 통해 나는 this RFC을 발견했습니다. 당신의 임무는 이것을 파이썬으로 구현하는 것입니다.
개인적으로는 아마도 먼저 명령 줄 도구를 사용하려고합니다 (아마도 파이썬에서 필요하면 system()
함수 호출을 통해).
1
m2crypto은 OpenSSL을 사용하지만 해결책이 될 수 있습니다 (CreateX509Request in the contrib example 참조).
을 사용하는 python-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
1
지난 며칠 동안 PyCrypto와 PyASN1을 사용하여 CSR 생성기를 구현하기 시작했습니다. 첫 번째 코드는 https://github.com/jandd/python-pkiutils에 있습니다.
3
명령 줄을 사용하고 싶지는 않지만 openssl 자체를 사용하고 Python 라이브러리는 ok라고 가정합니다.
다음은 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
어떤 툴킷이나 OpenSSL을 사용할 수 없습니까? ASN.1 인코더에 액세스하면 PKCS # 10 (인증서 요청 형식)이 매우 간단합니다. –