2016-08-29 10 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

正しい方向に私を指し示す非常に役に立つコメントの後に、関数が出力するDER X509フォーマットをロードするのに、cryptographyモジュールを使用することができます。この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". 
関連する問題