python-3.x - 如何使用仅支持 TLS 1.0 的主机处理 Python 请求

标签 python-3.x ssl openssl

使用 OPENSSL_VERSION:OpenSSL 1.1.0j 并尝试连接到似乎仅支持 TLS 1.0 密码的主机并在 _sslobj.do_handshake() 中出现错误。

import OpenSSL
import requests
from urllib.request import urlopen
import ssl
...

url = 'https://slpin.universalservice.org/'
urlopen(url).read()

最佳答案

this SSLLabs report可以看出您尝试访问的服务器严重损坏。它的等级为 F(最差),这主要是由于其可怕的不安全密码:

enter image description here

唯一不可怕的不安全但唯一弱的密码使用 3DES。由于这个弱点,这个密码可能不包含在你平台上的 openssl 构建中(例如 Debian 和基于 Debian 的系统,如 Ubuntu 不包含这个密码)。

这意味着从 Python 脚本访问服务器的唯一方法是使用链接到旧版本 OpenSSL 或链接到现代版本但明确包含此密码的 Python 版本。即使那样,您也可能需要专门启用 3DES,因为 urllib 暂时禁用了它。因此,当使用具有 3DES 支持的 OpenSSL 构建 Python 时,包括以下内容应该有效:

import ssl
from urllib.request import urlopen

url = 'https://slpin.universalservice.org/'
ctx = ssl.create_default_context()
ctx.set_ciphers('3DES')
urlopen(url, context = ctx).read()

在我的例子中,这给出了一个 403 Forbidden,它与我使用浏览器访问此 URL 时得到的结果相匹配。

关于python-3.x - 如何使用仅支持 TLS 1.0 的主机处理 Python 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55751896/

相关文章:

php - 在 WAMP/Apache 的 openssl.exe 中找不到序号 372

ssl - 如何在 openssl 1.0.2g 中列出 TLS 1.2 密码套件

python - 在 fbprophet 模型中使用多个自变量

ruby-on-rails - Ruby On Rails Heroku Postgres 数据库 SSL 连接

apache - 如何使用 Apache 2.4 和 mod_ssl 启用 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 密码

ssl - 库伯内斯 |公开 HTTPS 服务

javascript - 使用 expressjs 3 强制 SSL

python-3.x - 如何在 GEKKO 中使用自己的求解方法?

python - 在输出末尾获取额外的空行

python - 在 Jinja2 模板中访问类方法