Как проверить сайт на SSLv2 или SSLv3? - PullRequest
1 голос
/ 02 августа 2020

Я пробую список веб-сайтов и пытаюсь получить типы протоколов, которые поддерживает каждый веб-сайт. Однако я могу получать данные только из TLSv1 и далее.

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
osobj = SSL.Context(SSL.SSLv3_METHOD)
sock.connect((host, int(port)))
oscon = SSL.Connection(osobj, sock)
oscon.set_tlsext_host_name(host.encode())
oscon.set_connect_state()
oscon.do_handshake()

protocol = oscon.get_protocol_version_name() # If website supports SSLv2, it should return 'SSLv2'

Я понимаю, что openssl устарел SSLv2 и SSLv3. список протоколов, поддерживаемых сайтом?

1 Ответ

0 голосов
/ 02 августа 2020

Чтобы проверить версию протокола TLS, согласованную в вашем соединении, вы можете позвонить по номеру oscon.get_protocol_version_name(). Чтобы предотвратить использование SSLv2 / v3, вы можете использовать флаги OpenSSL.SSL.OP_NO_SSLv2 и OpenSSL.SSL.OP_NO_SSLv2 при настройке параметров подключения set_options(). Если вам нужно ограничить ваше соединение, чтобы использовать только SSLv2 / v3 - установите параметры OpenSSL.SSL.OP_NO_TLSv1, OpenSSL.SSL.OP_NO_TLSv1_1, OpenSSL.SSL.OP_NO_TLSv1_2, OpenSSL.SSL.OP_NO_TLSv1_3. Оплачивая эти параметры, вы можете полностью контролировать TLS-версию своего соединения.

Вот как я бы использовал его в вашем фрагменте кода:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
osobj = SSL.Context(SSL.SSLv23_METHOD)
osobj.set_options(OpenSSL.SSL.OP_NO_TLSv1 | OpenSSL.SSL.OP_NO_TLSv1_1 | OpenSSL.SSL.OP_NO_TLSv1_2 | OpenSSL.SSL.OP_NO_TLSv1_3)
sock.connect(("google.com", int(443)))
oscon = SSL.Connection(osobj, sock)
oscon.set_connect_state()

try:
    oscon.do_handshake()
    print("SSL v2/v3 supported")
except OpenSSL.SSL.Error as err:
    if err.args[0][0][2] == "no protocols available":
        print("SSL v2/v3 is not supported")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...