我需要扫描IP列表并从该IP上的证书中检索公用名(对于允许端口443连接的每个IP).我已经能够使用套接字和ssl模块成功完成此操作.它适用于所有具有有效签名证书的IP,但不适用于自签名证书.
如果我使用此方法,则需要由我的CA-bundle验证的有效证书:
from socket import socket
import ssl
s = socket()
c = ssl.wrap_socket(s,cert_reqs=ssl.CERT_REQUIRED, ca_certs='ca-bundle.crt')
c.connect(('127.0.0.1', 443))
print c.getpeercert()
Run Code Online (Sandbox Code Playgroud)
如果我删除它cert_reqs=ssl.CERT_REQUIRED然后连接但根本没有获得证书.
如何验证IP上的证书的通用名称,无论它是否针对ca-bundle进行验证?