python - TLS 连接超时(以及其他一些困难)

标签 python ssl

我有一个用 Python 编写的 HTTP 客户端,它需要使用 TLS。我不仅需要 进行加密连接,还可以从 远程机器,例如证书颁发者。我需要做 连接到许多 HTTP 服务器,通常表现不佳,所以我绝对 需要超时。对于非 TLS 连接, mysocket.settimeout(5) 做我想做的事。

在众多 TLS Python 模块中:

python-gnutls不允许在套接字上使用 settimeout() 因为 它使用非阻塞套接字:

gnutls.errors.OperationWouldBlock: Function was interrupted.

python-openssl有类似的问题:

OpenSSL.SSL.WantReadError

SSL module标准库不适用于 Python 2.5.

其他库,如 TLSlite显然不允许访问 证书的元数据。

程序是线程化的,所以我不能使用信号。我需要详细的 控制 HTTP 对话框,所以我不能使用像 urllib2 这样的标准库。

背景:这是 调查项目DNSwitness .相关的 SO 线程:Timeout on a Python function callHow to limit execution time of a function call in Python .

最佳答案

虽然我从来没有将它用于这个目的,Twisted应该做你想做的。唯一的缺点是它是一个相当大的库,您还需要安装 PyOpenSSL (扭曲取决于它)。如果您以前从未使用过它,Twisted 的基于回调的架构可能需要一些时间来适应(您真的想在开始之前阅读教程)。

但除此之外,它是围绕管理大量连接的想法设计的,它当然允许您指定超时、重新连接等,并且您可以检索证书信息(参见 here)。

关于python - TLS 连接超时(以及其他一些困难),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/675130/

相关文章:

Python:为模块及其导入设置 __globals__

python - Pandas MultiIndex 对子索引的操作

python - 使用 XLRD 验证单元格值

android - 如何从 Android 应用程序使用 HTTPS rest 服务

java - 如何配置从 Spring Boot 到 MongoDB 实例的 TLS 客户端配置?

python - pip 未被识别为内部或外部命令

python - 如果某些数据点是 NaN,如何拟合二维函数?

ssl - puppet 企业 ssl 证书错误

Ruby Sinatra 在没有 PEM 和 OpenSSL::SSL::VERIFY_NONE 的情况下创建发布请求

ssl - 在 apache 服务器上检查 ssl 设置的工具