【问题标题】:How to check a website for SSLv2 or SSLv3?如何检查网站的 SSLv2 或 SSLv3?
【发布时间】:2020-08-02 09:16:08
【问题描述】:

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

我怎样才能获得网站支持的完整协议列表?

【问题讨论】:

  • 你可以使用nmap
  • 如何在 python 中做到这一点?
  • @kai 在没有 Python 的情况下运行 nmap。如果你真的必须使用 Python,那么你有标准模块 subprocess
  • 也许使用传送门SSL labs
  • 也许您应该在 Google 中搜索更多信息并检查某些工具中的源代码 - 即。 pysslscansslyze

标签: python ssl openssl pyopenssl


【解决方案1】:

要检查在您的连接中协商的 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")

【讨论】:

  • 我尝试了这些选项,但我得到“没有这样的协议”或“上下文必须是上下文实例”。 osobj = SSL.Context(SSL.SSLv2_METHOD).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)
  • 我在上面的答案中添加了代码片段。你确定你的 openssl 安装支持 SSLv2/v3 吗?你的 TLS 服务器也有同样的问题。
  • 我的 openssl 安装不支持 SSLv2/v3。如何启用对它的支持?或者哪个版本的openssl支持?我正在使用 pyopenssl v19.1.0,其中基础层 openssl 已弃用 SSLv2/v3。
  • TLS 服务器支持 SSLv2/v3,nmap 结果显示它支持(与 ssllabs 结果相同)
  • 尝试使用一些旧的 pyOpenSSL 版本。这是列表github.com/pyca/pyopenssl/blob/master/doc/ChangeLog_old.txt
猜你喜欢
  • 2014-12-11
  • 2012-10-14
  • 2014-07-25
  • 2015-09-26
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多