如何检查SSLv2或SSLv3的网站?

2024-10-08 19:32:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试一个网站列表,并试图获得每个网站支持的协议类型。但是,我只能从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

我怎样才能得到一个网站支持的所有协议列表


Tags: namehost协议ssl列表网站connectsocket
1条回答
网友
1楼 · 发布于 2024-10-08 19:32:36

要检查连接中协商的TLS协议版本,可以调用oscon.get_protocol_version_name()。要防止使用SSLv2/v3,可以在设置连接选项set_options()时使用标志OpenSSL.SSL.OP_NO_SSLv2OpenSSL.SSL.OP_NO_SSLv2。如果需要将连接限制为仅使用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")

相关问题 更多 >

    热门问题