SSLError(“不好的握手:错误([(''SSL例程','tls_process_ske_dhe','dh密钥太小',在Python中

时间:2018-12-07 20:47:29

标签: python ssl urllib3

我已经看到一些有关此问题的链接,出于安全原因,大多数人希望更新服务器。我正在寻找一个唯一的内部工具,并连接到无法修改的服务器。我的代码在下面,我希望我可以清楚地知道如何接受小键并处理请求。

谢谢大家

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)

1 个答案:

答案 0 :(得分:0)

DH密钥的长度在https://weakdh.org`上进行了各种补救,讨论的问题很长。

现在,在您的情况下,它取决于Python所使用的OpenSSL。拒绝太小的值会硬编码。

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

  

当前,只有在服务器选择的DH参数的密钥长度小于768位(在源中进行硬编码)时,客户端模式下的OpenSSL才会停止握手。

根据那里的答案,您可以使用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分支中为该问题添加了一些工作。似乎暗示在2001129f096d10bbd815936d23af3e97daf7882d中进行了一次1.0.2的提交,因此首先可以尝试使用更新版本的OpenSSL(您未指定使用的版本)。

但是,即使您设法使所有内容都可以与OpenSSL一起使用,您仍然需要Python使用它(以便可能自己编译python),然后在Python内部使用特定的API来进行处理...说实话,我认为您将花费更少的时间来修复服务(即使您说不能修改它)(而不是试图从根本上削弱客户端),因为拒绝小键是一件好事(出于第一个链接中所述的原因)。