非标准端口的Python HTTPServer SSL握手挂起

2024-10-01 02:36:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,我已经挣扎了几天了。在

我在SSL上有一个简单的ThreadedHTTPServer,它为一天中出现的少量请求提供服务。在

每随机10个左右的连接,服务器线程都会挂起(我有一个计划线程,它与服务器线程并行运行,但在服务器线程挂起时,它继续运行良好)。在

当它挂起的时候,当我试图与openssl客户机连接时,我不能比SSL握手的客户机Hello更进一步。在

openssl s_client -connect HOST:7813 -prexit

我尝试过的事情:

  1. 我想也许在连接上设置一个超时会有帮助,但是没有雪茄烟……是的,它会使已经建立的连接超时,但是如果握手被挂起,就没有效果了。在

比如:

^{pr2}$
  1. 通过重写address_string()函数来禁用BaseHTTPRequestHandler正在执行的DNS解析…如果DNS解析由于某种原因滞后,但它没有解决SSL握手挂起,可能会有一点帮助

  2. 我试图检查是否使用了TLS版本,但是不同的卷发和--tlv1.x没有导致挂起。它只是随机发生的,当某些浏览器客户端发出请求时。

  3. 将HTTPServer的端口更改为443而不是7813。我到处找遍了,但没有发现任何一张票暗示这可能是个问题。我想我唯一注意到的是它强烈地表明http服务器因为python不应该用于生产。。。

分辨率

以上这些都不管用。目前,最简单的方法是不让Python负责处理SSL连接并将其委托给Nginx。在


Tags: 服务器clienthostsslhello客户机dnsconnect