2016-08-17 2 views
0

Мой пример кода:PyOpenSSL получить сертификат сервера от SNI хоста с неизвестными именами хостов

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 routines', 'SSL3_READ_BYTES', 'sslv3 alert handshake failure')]

Я считаю, что я могу преодолеть это с помощью OpenSSL.SSL.Connection.set_tlsext_host_name(name), но для имени пользователя неизвестно, и я хотел бы подключиться к любому доступному имени хоста.

Итак, мой вопрос: есть ли способ подключиться к хосту с помощью ip и получить все доступные имена хостов, которые предоставляют сертификаты? Или есть способ просто получить все сертификаты с хоста SNI?

+0

Использовать ' s_client' для получения сертификата по IP-адресу и печати имен DNS в сертификате: 'openssl s_client -connect : -tls1 -servername | openssl x509 -text -noout'. Используйте IP-адрес в качестве имени сервера SNI. Затем подключитесь к DNS-имени. В размещенной среде с виртуальными серверами это, вероятно, не будет работать должным образом. Возможно, вам придется выполнить обратный поиск DNS для получения имен. Обратный поиск предполагает, что DNS настроен так, как ожидалось, что может и не быть. – jww

ответ

0

Is there a way to connect to host by ip and retrieve all available hostnames that provide certificates? Or is there a way to just retrieve all certificates from a SNI host?

Ничего из этого нельзя использовать с помощью HTTPS. Если вам повезет, вы можете собрать информацию о возможных именах хостов где-то на сервере или обнюхивать DNS-запросы, которые разрешают IP-адреса серверов или используя другие способы определения, какие имена принадлежат этому IP-адресу: How can I find all the domain names that resolve to one ip address?

+0

К сожалению, поиск DNS не удался для хостов, которые меня интересуют. –

Смежные вопросы