Python 套接字客户端 SSL 连接

Posted

技术标签:

【中文标题】Python 套接字客户端 SSL 连接【英文标题】:Python Socket Client SSL Connection 【发布时间】:2021-12-22 19:15:32 【问题描述】:

我已经实现了以下连接到远程服务器:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(10)
context = SSLContext(ssl.PROTOCOL_TLSv1_2)
context.verify_mode = ssl.CERT_NONE
sslSocket = context.wrap_socket(s, server_hostname=hostname)
sslSocket.connect((hostname, port))

我收到一个错误:

[SSL: WRONG_SSL_VERSION] wrong ssl version (_ssl.c:2820)

当我通过命令行通过 openssl 连接时,这是我从服务器得到的响应:

New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES128-GCM-SHA256

我在调用 SSL 版本时遗漏了什么?

【问题讨论】:

【参考方案1】:

您必须在线更改协议版本: 'ssl.PROTOCOL_TLSv1_2' 到另一个如:ssl.PROTOCOL_SSLV3 我不确定语法。在文档中搜索它。 这: PROTOCOL_SSLv23

【讨论】:

我收到一个错误:模块 'ssl' 没有属性 'PROTOCOL_SSLv3'。所以现在我已经安装了 pyOpenSSL 并使用它而不是具有此协议的 ssl。在执行 sslSocket.send(post_data.encode('utf-8')) 之后,我现在收到超时错误。这不会返回:buf = sslSocket.recv(4096) 使用 socket.recv 的一个技巧是检查接收方接收了多少字节,并查找一些字符,例如 \0 或 \r\n 以检查您的消息是否完整。它超时的原因是等待一些永远不会被发送到recv端的数据。祝你好运

以上是关于Python 套接字客户端 SSL 连接的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中打开 SSL 套接字连接

SSL 套接字连接

如何使用 TLS/SSL 确保套接字连接的安全

如果套接字握手中的客户端证书中有两个有效证书,则在 SSL 连接中使用哪个证书

从 reactjs 客户端连接到安全 Web 套接字 python 服务器

ssl 套接字不支持错误