python ssl ライブラリは、有効な署名がある場合にのみ証明書を解析するようです。
"""Returns a formatted version of the data in the
certificate provided by the other end of the SSL channel.
Return None if no certificate was provided, {} if a
certificate was provided, but not validated."""
この関数を使用してサーバー証明書を取得することはできますが、証明書ssl.get_server_certificate()
は PEM 形式で返されます。c.getpeercert(True)
(または、検証済みかどうかに関係なく、バイナリ DER 形式で証明書を返す を呼び出すこともできます。)
>>> print ssl.get_server_certificate(('server.test.com', 443))
-----BEGIN CERTIFICATE-----
MIID4zCCAsugAwIBA.....
ここから、M2Crypto または OpenSSL を使用して証明書を読み取り、値を取得します。
# M2Crypto
cert = ssl.get_server_certificate(('www.google.com', 443))
x509 = M2Crypto.X509.load_cert_string(cert)
x509.get_subject().as_text()
# 'C=US, ST=California, L=Mountain View, O=Google Inc, CN=www.google.com'
# OpenSSL
x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
x509.get_subject().get_components()
#[('C', 'US'),
# ('ST', 'California'),
# ('L', 'Mountain View'),
# ('O', 'Google Inc'),
# ('CN', 'www.google.com')]