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')]


