【问题标题】:How to find out what this error means: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1129)如何找出此错误的含义:[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 警报握手失败 (_ssl.c:1129)
【发布时间】:2022-08-06 04:03:39
【问题描述】:

从尝试发出 HTTPS 请求的 python 应用程序中,我遇到了一个我很难理解的错误:

[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1129)

我认为这来自 OpenSSL。但是除了握手失败之外,它并没有告诉我问题是什么。 IE:它没有告诉我握手失败的原因或它的哪一步失败。

谷歌上的各种链接都可以尝试,但没有给出它们可能起作用的理由。我已经尝试过它们,但到目前为止没有任何效果。基于这些结果,我尝试过:

  • 升级中certifi
  • 在 mac python 安装目录中运行证书安装脚本
  • 升级python版本

有什么方法可以获取有关此错误的更多信息?

  • 这是完整的错误吗?
  • @ewong 那里有一个 python 堆栈跟踪,但我怀疑它在源自 openssl 的错误的上下文中是否有帮助(用 c 编写)
  • 握手失败可以是任何事情,但通常与证书验证无关。因此,用 certifi 或类似的东西做任何事情都无济于事。它可能没有共享密码或协议版本,可能需要客户端证书,可能是服务器根本不使用 SSL ...
  • @SteffenUllrich 是的,这就是为什么我希望有一种方法可以从 OpenSSL 中获取有关原因的更多信息
  • @PhilipCouling:通常不会。服务器正在发送 TLS“警报握手失败”,客户端没有从服务器获得有关原因的更多详细信息。也许可以在服务器日志中找到信息。

标签: python ssl openssl


【解决方案1】:

现在,只是一个解决方法-fourm 上的人们让我尝试

  1. 比较openssl ciphers(在我的好环境和坏环境中都一样)
  2. openssl s_client -connect news.somewhere.com:563(工作)

    然后根据上面的输出添加以下python代码:

    import ssl
    cntxt = ssl.create_default_context()
    cntxt.set_ciphers("AES256-GCM-SHA384")
    import nntplib
    nntp = nntplib.NNTP_SSL('news.somewhere.com', ssl_context=cntxt)
    

    这解决了我得到的 SSLV3_ALERT_HANDSHAKE_FAILURE。 (您将需要选择在 s_client 测试连接到您的服务器时工作的密码。)

    我的两个环境之间有十几个库和模块版本差异,但一般旧环境使用 python-3.9.7,新环境(损坏但现在正在运行的环境)使用 python-3.10.5

【讨论】:

    猜你喜欢
    • 2017-02-17
    • 2019-05-10
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 2016-05-09
    • 1970-01-01
    • 2016-10-10
    相关资源
    最近更新 更多