2013-06-03 5 views
14

파이썬으로 pem 인코딩 된 (base64) 인증서를 어떻게 디코딩 할 수 있습니까?어떻게 파이썬을 사용하여 SSL 인증서를 디코딩 할 수 있습니까?

-----BEGIN CERTIFICATE----- 
MIIHKjCCBhKgAwIBAgIQDnd2il0H8OV5WcoqnVCCtTANBgkqhkiG9w0BAQUFADBp 
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 
d3cuZGlnaWNlcnQuY29tMSgwJgYDVQQDEx9EaWdpQ2VydCBIaWdoIEFzc3VyYW5j 
ZSBFViBDQS0xMB4XDTExMDUyNzAwMDAwMFoXDTEzMDcyOTEyMDAwMFowgcoxHTAb 
BgNVBA8MFFByaXZhdGUgT3JnYW5pemF0aW9uMRMwEQYLKwYBBAGCNzwCAQMTAlVT 
MRswGQYLKwYBBAGCNzwCAQITCkNhbGlmb3JuaWExETAPBgNVBAUTCEMzMjY4MTAy 
MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2Fu 
IEZyYW5jaXNjbzEVMBMGA1UEChMMR2l0SHViLCBJbmMuMRMwEQYDVQQDEwpnaXRo 
dWIuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7dOJw11wcgnz 
M08acnTZtlqVULtoYZ/3+x8Z4doEMa8VfBp/+XOvHeVDK1YJAEVpSujEW9/Cd1JR 
GVvRK9k5ZTagMhkcQXP7MrI9n5jsglsLN2Q5LLcQg3LN8OokS/rZlC7DhRU5qTr2 
iNr0J4mmlU+EojdOfCV4OsmDbQIXlXh9R6hVg+4TyBkaszzxX/47AuGF+xFmqwld 
n0xD8MckXilyKM7UdWhPJHIprjko/N+NT02Dc3QMbxGbp91i3v/i6xfm/wy/wC0x 
O9ZZovLdh0pIe20zERRNNJ8yOPbIGZ3xtj3FRu9RC4rGM+1IYcQdFxu9fLZn6TnP 
pVKACvTqzQIDAQABo4IDajCCA2YwHwYDVR0jBBgwFoAUTFjLJfBBT1L0KMiBQ5um 
qKDmkuUwHQYDVR0OBBYEFIfRjxlu5IdvU4x3kQdQ36O/VUcgMCUGA1UdEQQeMByC 
CmdpdGh1Yi5jb22CDnd3dy5naXRodWIuY29tMIGBBggrBgEFBQcBAQR1MHMwJAYI 
KwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBLBggrBgEFBQcwAoY/ 
aHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ0FDZXJ0cy9EaWdpQ2VydEhpZ2hBc3N1 
cmFuY2VFVkNBLTEuY3J0MAwGA1UdEwEB/wQCMAAwYQYDVR0fBFowWDAqoCigJoYk 
aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL2V2MjAwOWEuY3JsMCqgKKAmhiRodHRw 
Oi8vY3JsNC5kaWdpY2VydC5jb20vZXYyMDA5YS5jcmwwggHEBgNVHSAEggG7MIIB 
tzCCAbMGCWCGSAGG/WwCATCCAaQwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cuZGln 
aWNlcnQuY29tL3NzbC1jcHMtcmVwb3NpdG9yeS5odG0wggFkBggrBgEFBQcCAjCC 
AVYeggFSAEEAbgB5ACAAdQBzAGUAIABvAGYAIAB0AGgAaQBzACAAQwBlAHIAdABp 
AGYAaQBjAGEAdABlACAAYwBvAG4AcwB0AGkAdAB1AHQAZQBzACAAYQBjAGMAZQBw 
AHQAYQBuAGMAZQAgAG8AZgAgAHQAaABlACAARABpAGcAaQBDAGUAcgB0ACAAQwBQ 
AC8AQwBQAFMAIABhAG4AZAAgAHQAaABlACAAUgBlAGwAeQBpAG4AZwAgAFAAYQBy 
AHQAeQAgAEEAZwByAGUAZQBtAGUAbgB0ACAAdwBoAGkAYwBoACAAbABpAG0AaQB0 
ACAAbABpAGEAYgBpAGwAaQB0AHkAIABhAG4AZAAgAGEAcgBlACAAaQBuAGMAbwBy 
AHAAbwByAGEAdABlAGQAIABoAGUAcgBlAGkAbgAgAGIAeQAgAHIAZQBmAGUAcgBl 
AG4AYwBlAC4wHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBEGCWCGSAGG 
+EIBAQQEAwIGwDAOBgNVHQ8BAf8EBAMCBaAwDQYJKoZIhvcNAQEFBQADggEBABRS 
cR+GnW01Poa7ZhqLhZi5AEzLQrVG/AbnRDnI6FLYERQjs3KW6RSUni8AKPfVBEVA 
AMb0V0JC3gmJlxENFFxrvQv3GKNfZwLzCThjv8ESnTC6jqVUdFlTZ6EbUFsm2v0T 
flkXv0nvlH5FpP06STLwav+JjalhqaqblkbIHOAYHOb7gvQKq1KmyuhUItnbKj1a 
InuA6gcF1PnH8FNZX7t3ft6TcEFOI8t4eXnELurXZioY99HFfOISeIKNHeyCngGi 
5QK+eKG5WVjFTG9PpTG0SVtemB4uOPYZxDmiSvt5BbjyWeUmEnCtwOh1Ix8Y0Qvg 
n2Xkw9dJh1tybLEvrG8= 
-----END CERTIFICATE---- 

ssl-shopper에 따라이 같은해야한다 : 여기 github.com에서이 예를 들어

Common Name: github.com 
Subject Alternative Names: github.com, www.github.com 
Organization: GitHub, Inc. 
Locality: San Francisco 
State: California 
Country: US 
Valid From: May 26, 2011 
Valid To: July 29, 2013 

어떻게 파이썬을 사용하여이 일반 텍스트를받을 수 있나요?

+1

파이썬을 사용해야합니까? openssl cmdline 출력이이를 수행합니다. – Joe

+0

나는 파이썬 프로그램의 certifiate 파일에서 정보를 얻고 싶다. – puwei219

+0

asn1crypto, pyOpenSSL, M2Crypto, cryptography, pyasn1 python 패키지를 사용할 수 있습니다. [코드 예제 (러시아어로)] (http://ru.stackoverflow.com/a/464445/23044) – jfs

답변

17

파이썬의 표준 라이브러리는 최신 버전 일지라도 X.509 인증서를 디코딩 할 수있는 모든 것을 포함하지 않습니다. 그러나 추가 기능 cryptography 패키지가이 기능을 지원합니다. example from the documentation 인용 :

>>> from cryptography import x509 
>>> from cryptography.hazmat.backends import default_backend 
>>> cert = x509.load_pem_x509_certificate(pem_data, default_backend()) 
>>> cert.serial_number 
2 

옵션이 될 수있는 또 다른 추가 기능 패키지는 pyopenssl입니다. 이것은 OpenSSL C API를 둘러싼 얇은 포장지입니다. 즉, 가능합니다. 당신이 원하는 것을 할 수는 있지만, 문서에서 머리를 찢어 버릴 것으로 예상됩니다.

파이썬은 추가 기능 패키지를 설치할 수 있지만 openssl 명령 줄 유틸리티이있는 경우

,

import subprocess 
cert_txt = subprocess.check_output(["openssl", "x509", "-text", "-noout", 
            "-in", certificate]) 

대략 당신이 cert_txt에 웹 유틸리티에서 가져온 같은 물건을 생산한다.

덧붙여 말하면, 직선적 인 base64 디코드를하는 이유는 여기에 2 개의 인코딩 레이어가 있다는 것입니다. X.509 certificatesASN.1 데이터 구조이며 X.690 DER 형식으로 일련 화되고 DER은 이진 형식이므로 파일 전송을 쉽게하기 위해 base64로 보호됩니다. (이 분야의 많은 표준은 7 비트 ASCII 이외의 어떤 것도 안정적으로 제공 할 수없는 90 년대에 작성되었습니다.)

24

pyasn1pyasn1_modules 패키지를 사용하여 이러한 종류의 데이터를 구문 분석 할 수 있습니다. 예 :

from pyasn1_modules import pem, rfc2459 
from pyasn1.codec.der import decoder 

substrate = pem.readPemFromFile(open('cert.pem')) 
cert = decoder.decode(substrate, asn1Spec=rfc2459.Certificate())[0] 
print(cert.prettyPrint()) 

나머지는 pyasn1 용 문서를 읽으십시오.

관련 문제