首页 > 解决方案 > Python SSL/TLS - Python 3.8 上没有共享密码,但在 Python 3.6 上工作

问题描述

我的服务器可以在 Python 3.6 或 Python 3.8 上运行。问题似乎是客户端。

如果我在 Python 3.6 上运行客户端,则 TLSv1.2 可以正常工作。但是,如果我在 Python 3.8 上运行相同的客户端代码,我会在服务器上获得 NO_SHARED_CIPHER,在客户端上获得 SSLV3_ALERT_HANDSHAKE_FAILURE。

我怀疑它与服务器或客户端证书有关。

更新:我创建了一些新的服务器和客户端证书来试验:ed25519rsasecp256k1. 从我所见,上述问题仅在服务器证书是secp256k1并且客户端和服务器都运行 Python 3.8(因此使用 TLSv1.3)时出现。客户端可以使用任何类型的证书。

标签: python-3.xsocketssslopenssl

解决方案


... NO_SHARED_CIPHER ...
我怀疑它与服务器或客户端证书有关。

这是密码选择的问题,密码选择几乎与证书无关,至少如果证书类型仍然相同,即 ECC 与 RSA。而且我假设您在工作和非工作情况下仍然使用相同的证书或至少相同的证书类型。

您的客户端更有可能尝试使用一些基于 RC4 或 3DES 的密码,这些密码如今已被认为已过时,因此在使用较新版本的软件堆栈(即 Python+OpenSSL)时服务器不再支持。


推荐阅读