【发布时间】:2022-01-25 10:16:23
【问题描述】:
我正在编写一些需要通过 TLS 连接与远程主机通信的 Python 代码。我设置了这样的 SSL 上下文:
ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
cxt.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
然后,我通过端口p 连接到域d,如下所示:
s = ctx.wrap_socket(socket.create_connection(d, p))
在意外的 EOF 上遇到了协议违规。解决方法是像这样创建套接字:
s = ctx.wrap_socket(socket.create_connection(d, p), server_hostname=d)
我对 TLS 几乎一无所知,这很令人困惑。为什么成功连接需要服务器主机名?
如果重要的话,我在端口p = 1965 上测试了到域d = 'drewdevault.com' 的连接;我正在写一个 Gemini 客户端。这在所有远程主机上都无法重现。
【问题讨论】: