2016-11-20 3 views
1

내년에 주요 브라우저에서 SHA-1이 금지 될 예정이므로 어떤 사이트에서 아직 사용 중인지 확인하고 싶습니다. 파이썬을 사용하여이 정보를 얻을 수있는 방법이 있습니까 (예 : Python's ssl library)? 내가 openssl s_client 사용할 수 있지만 파이썬 솔루션 (내 비동기 프레임 워크와 호환되는) 선호 할 것입니다.Python으로 SSL 해시 알고리즘을 감지합니다.

s_client가 예 :

$ openssl s_client -connect winkel.vpro.nl:443 < /dev/null 2>/dev/null | openssl x509 -text -in /dev/stdin | grep -i sha 
Signature Algorithm: sha1WithRSAEncryption 

나는 SSL의 문서를 통해 파고하지만 참조 너 한테 해시를 찾을 수 없습니다. 그리고 나는 SSL 컨텍스트에서이 정보를 얻는 방법을 모른다. 티아!

답변

3

서명 해시 알고리즘은 SSL 연결의 속성이 아니라 인증서의 속성입니다. 인증서가 있으면 당신은 OpenSSL.crypto에서 get_signature_algorithm를 사용하여 알고리즘을 얻을 수 있습니다 :

import ssl, socket, OpenSSL 

# connect to server and get certificate as binary (DER) 
sock = socket.socket() 
sock.connect(('www.google.com',443)) 
sslsock = ssl.wrap_socket(sock) 
cert_der = sslsock.getpeercert(True) 

# load binary certificate and get signature hash algorithm 
cert = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_ASN1, cert_der) 
print cert.get_signature_algorithm() 
# -> 'sha256WithRSAEncryption' 

또한 암호화 패키지에서 signature_hash_algorithm을 사용할 수 있습니다 Python3의 하나 :

from cryptography import x509 
from cryptography.hazmat.backends import default_backend 

... get cert_der the same way as before ... 
cert = x509.load_der_x509_certificate(cert_der, default_backend()) 
print(cert.signature_hash_algorithm.name) 
# -> 'sha256'