我的代码示例:
import OpenSSL
import socket
ctx = OpenSSL.SSL.Context(OpenSSL.SSL.SSLv23_METHOD)
s = socket.socket(AF_INET, SOCK_STREAM)
connection = OpenSSL.SSL.Connection(ctx, s)
connection.connect((str(ip), port))
connection.setblocking(1)
connection.do_handshake()
chain = connection.get_peer_cert_chain()
如果主机有SNI扩展,我会收到错误:
[('SSL例程','SSL3_READ_BYTES','sslv3警报握手失败')]
我相信我可以使用OpenSSL.SSL.Connection.set_tlsext_host_name(name)
来解决这个问题,但是对于用户主机名是未知的,我想连接到每个可用的主机名。
所以我的问题是:有没有办法通过ip连接到主机并检索所有提供证书的可用主机名?或者有没有办法从SNI主机中检索所有证书?
答案 0 :(得分:0)
有没有办法通过ip连接到主机并检索所有提供证书的可用主机名?或者有没有办法从SNI主机中检索所有证书?
使用HTTPS无法做到这一点。如果您很幸运,您可以收集有关服务器上某处可能的主机名的信息,或者通过嗅探解析到服务器IP的DNS查找,或者使用其他方法来确定哪些名称属于此IP地址:How can I find all the domain names that resolve to one ip address? < / p>