2011-09-02 4 views
2

Python과 PyOpenSSL을 사용하면 커스텀 확장의 값을 검색 할 수 있습니까? 사용자 정의 확장은 ARBITRARY EXTENSIONS 아래에 설명 된 임의 확장 형식을 사용하여 http://www.openssl.org/docs/apps/x509v3_config.html에 인코딩 된 확장자를 의미합니다.PyOpenSSL을 사용하여 X.509 인증서 사용자 정의 확장의 값을 추출하십시오.

또한 PyOpenSSL을 사용하여 이러한 확장을 포함하는 인증서를 만들 수 있습니까?

이 중 하나에 대한 대답이 "아니오"이면 다른 Python 라이브러리에서도이 작업을 수행하는 방법에 대한 정보가 필요할 것입니다. OpenSSL 명령 줄 응용 프로그램에 대한 시스템 호출을 수행하고 싶지 않습니다.

답변

6

pyOpenSSL을 사용하여로드 한 X.509 인증서의 모든 확장을 가져올 수 있습니다.

>>> from OpenSSL import crypto as c 
>>> cert = c.load_certificate(c.FILETYPE_PEM, file('server.pem').read()) 
>>> cert.get_extension_count() 
4L 
>>> ext = cert.get_extension(0) 
>>> ext.get_short_name() 
'basicConstraints' 
>>> ext.get_data() 
'0\x00' 
>>> 

데이터는 (ASN.1 인코딩 아마도 몇몇 특정 확장자에 따라)의 원시 포맷으로 나온다 : 예.

확장 프로그램을 추가 할 수도 있습니다.

>>> newext = c.X509Extension('nsComment', 0, 'tacos are delicious') 
>>> cert.add_extensions([newext]) 
>>> cert.get_extension_count() 
5L 
>>> cert.get_extension(4) 
<X509Extension object at 0x7f74db7c2290> 
>>> cert.get_extension(4).get_data() 
'\x16\x13tacos are delicious' 
>>> 

그러나 약간의 비대칭성에 유의하십시오. 확장 데이터는 문자열이어야하며 ASN.1을 사용하여 자동으로 인코딩됩니다. 이것은 임의의 비 문자열 확장 데이터를 추가 할 가능성을 배제하는 것으로 보입니다.

+0

확장의 원시 데이터를 디코딩하는 적절한 방법은 무엇입니까? –

+0

다소 최근의'asn1crypto' 라이브러리가 유용 할 수 있습니다. –

+0

답장을 보내 주셔서 감사합니다. –

관련 문제