Python 3.x PythonSSL/TLS-在Python3.8上没有共享密码,但在Python3.6上工作

Python 3.x PythonSSL/TLS-在Python3.8上没有共享密码,但在Python3.6上工作,python-3.x,sockets,ssl,openssl,Python 3.x,Sockets,Ssl,Openssl,我的服务器可以在Python 3.6或Python 3.8上运行。问题似乎出在客户身上 如果在Python3.6上运行客户机,则TLSv1.2可以正常工作。但是,如果我在Python3.8上运行相同的客户端代码,服务器上就没有共享密码,客户端上就没有SSLV3警报握手失败 我怀疑这与服务器或客户端证书有关 更新:我创建了一些新的服务器和客户端证书来进行试验:ed25519、rsa和secp256k1。从我所看到的情况来看,只有当服务器证书是secp256k1并且客户端和服务器都运行Python3

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

如果在Python3.6上运行客户机,则TLSv1.2可以正常工作。但是,如果我在Python3.8上运行相同的客户端代码,服务器上就没有共享密码,客户端上就没有SSLV3警报握手失败

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

更新:我创建了一些新的服务器和客户端证书来进行试验:
ed25519
rsa
secp256k1
。从我所看到的情况来看,只有当服务器证书是
secp256k1
并且客户端和服务器都运行Python3.8(因此使用TLSv1.3)时,上面的问题才会出现。客户端可以使用任何类型的证书

。。。没有共享密码…
我怀疑这与服务器或客户端证书有关

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


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

这可能意味着服务器没有私钥,这反过来意味着它找不到密码套件,因为所有安全的都需要私钥。这也可能意味着服务器没有私钥。@user207421:基于这个问题,我假设相同的代码和设置用于不同版本的Python。如果私钥丢失,两个版本的Python都会失败。但是您是对的,当服务器端的证书没有正确设置,因此只有匿名密码可用时,也会出现这种错误。@Myath:您能创建一个工作连接(Python 3.6)和非工作连接(Python 3.8)的数据包捕获吗并提供它,以便您可以查看ClientHello和ServerHello的所有详细信息?你有关于客户的更多信息吗?Python3.6和Python3.8之间的另一个主要区别是后者支持TLS1.3。