2016-08-29 1 views
0

SSLSocket에 의해 수신 된 인증서에 사용 된 서명 알고리즘의 이름을 얻는 적절한 방법을 찾을 수 없습니다. 나는 당신이 SSLSocket.getpeercert(True)와 동료의 인증서의 바이트를 당길 수 있다는 것을 알고 있지만 그걸로 무엇을 해야할지 모르겠다. PyOpenSSL은 바이트 컨텐트로부터 X509를로드하기위한 쉬운 인터페이스가없는 것 같습니다.SSLSocket로부터 서명 알고리즘의 이름을 취득하는 장소는?

SHA1의 인증서는 2017 년 1 월 1 일 이후 만료일이 허용되지 않으며 Python의 SSLSocket.do_handshake() 구현에 의해 검사되지 않으므로이 정보를 알고 싶습니다.

+1

대신 암호화 라이브러리를 사용할 수 있습니다. 이것은 [signature_hash_algorithm] (https://cryptography.io/en/latest/x509/reference/#cryptography.x509.Certificate.signature_hash_algorithm)을 제공합니다. –

답변

0

정확한 방향으로 나를 가리켜 준 후 cryptography 모듈을 사용하여 SSLSocket.getpeercert() 기능이 출력하는 DER X509 형식을로드 할 수 있습니다. 이 Certificate 인스턴스에서 만료 시간과 같은 인증서에 대한 많은 다른 필드에 액세스 할 수도 있습니다. 내가 지금하고있는 방법은 다음과 같습니다.

import cryptography.x509 
import cryptography.hazmat.backends.openssl 
import ssl 
sock = ssl.SSLSocket() 

# Wrap a socket, connect, handshake, etc etc... 

cert = cryptography.x509.load_der_x509_certificate(
    sock.getpeercert(True), 
    cryptography.hazmat.backends.openssl.backend 
) 
print(cert.signature_hash_algorithm.name) # This prints "sha1". 
관련 문제