2016-11-20 4 views
1

来年は主要なブラウザからSHA-1が禁止されるようになったので、まだそれを使用しているサイトを検出したいと考えています。 Pythonを使用してこの情報を取得する方法はありますか(Python's ssl libraryなど)?私はopenssl s_clientを使用することができますが、私はPythonicソリューション(私の非同期フレームワークと互換性があります)を好むでしょう。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コンテキストからこの情報を得る方法を知らない。 TIA!

答えて

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' 

のpython3のいずれかでも、暗号化パッケージからsignature_hash_algorithmを使用することができます。

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' 
関連する問題