【问题标题】:Python SSL/TLS - no shared cipher on Python 3.8 but working on Python 3.6Python SSL/TLS - Python 3.8 上没有共享密码,但在 Python 3.6 上工作
【发布时间】:2020-04-07 13:10:44
【问题描述】:

我的服务器可以在 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.x sockets ssl openssl


【解决方案1】:

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

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

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

【讨论】:

  • 这也可能意味着服务器没有私钥。
  • @user207421:基于这个问题,我假设相同的代码和设置用于不同版本的 Python。如果私钥丢失,则两个版本的 Python 都会失败。但是你是对的,当服务器端的证书没有正确设置时也会出现这种错误,因此只有匿名密码可用。
  • @Myath:您能否创建一个工作连接(Python 3.6)和非工作连接(Python 3.8)的数据包捕获并提供它,以便人们可以看到 ClientHello 的所有详细信息和服务器你好?你有更多关于客户的信息吗? Python 3.6 和 Python 3.8 之间的另一个主要区别是后者支持 TLS 1.3。
猜你喜欢
  • 1970-01-01
  • 2021-11-21
  • 2021-01-18
  • 1970-01-01
  • 2019-09-13
  • 1970-01-01
  • 2018-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多