python - SSLError ("bad handshake: Error([(' SSL routines', 'tls_process_ske_dhe' , Python 中的 'dh key too small'

标签 python ssl urllib3

我已经看到了这个问题的几个链接,大多数人出于安全原因希望更新服务器。我希望制作一个仅供内部使用的工具并连接到无法修改的服务器。我的代码在下面,我希望我能弄清楚如何接受小 key 并处理请求。

先谢谢大家

import requests
from requests.auth import HTTPBasicAuth
import warnings
import urllib3

warnings.filterwarnings("ignore")
requests.packages.urllib3.disable_warnings()
requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS += 'HIGH:!DH:!aNULL'
#requests.packages.urllib3.contrib.pyopenssl.DEFAULT_SSL_CIPHER_LIST += 'HIGH:!DH:!aNULL'

url = "https://x.x.x.x/place/stuff"
userName = 'stuff'
passW = 'otherstuff'


dataR = requests.get(url,auth=HTTPBasicAuth(userName, passW),verify=False)
print(dataR.text)

最佳答案

DH key 太小的问题在 https://weakdh.org 中进行了详细讨论。 ` 进行各种补救措施。

现在,在您的情况下,它取决于 Python 在后台使用的 OpenSSL。它对事物进行硬编码以拒绝太小的值。

看看:How to reject weak DH parameters in an OpenSSL client?

Currently OpenSSL in client mode stops handshake only if the keylength of server selected DH parameters is less than 768 bit (hardcoded in source).

根据那里的答案,你可以使用 SSL_CTX_set_tmp_dh_callbackSSL_set_tmp_dh_callback 来控制你喜欢的东西......除了当时它似乎不起作用在客户端只有服务器端。

基于 http://openssl.6102.n7.nabble.com/How-to-enforce-DH-field-size-in-the-client-td60442.html似乎针对该问题在 1.1.0 分支中添加了一些工作。它似乎暗示了 1.0.2 中的提交 2001129f096d10bbd815936d23af3e97daf7882d 所以首先可以尝试更新版本的 OpenSSL(您没有指定您使用的是哪个版本)。

然而,即使你设法让所有的东西都与 OpenSSL 一起工作,你仍然需要你的 Python 来使用它(所以可能要自己编译 python),然后在 Python 中使用特定的 API 来处理它......老实说,我认为你将花费更少的时间修复服务(即使你说你不能修改它)而不是试图从根本上削弱客户端,因为拒绝小 key 是一件好事(原因在第一个链接中解释)。

关于python - SSLError ("bad handshake: Error([(' SSL routines', 'tls_process_ske_dhe' , Python 中的 'dh key too small',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53676622/

相关文章:

python-3.x - 使用 zeep SSL 时连接被拒绝

python - 尝试安装 mysql-python : "No module named urllib3"

python - Python 多处理模块中 apply() 和 apply_async() 的区别

python - 在healpy mollview中自定义颜色条

python - 在所有 Pandas DataFrame 列和过滤器中搜索字符串

python - 在数组元素内执行减法运算后获取多个数组

linux - 使用运行 Apache 的 Ubuntu 服务器的 godaddy SSL

Azure 应用服务无法验证 .pfx 文件 : Certificate failed validation because it could not be loaded

python - 在后续重试之间更改请求 header

java - SSL 握手错误 javax.net.ssl.SSLHandshakeException Received fatal alert bad_certificate