簡體   English   中英

SSLError(“不好的握手:錯誤([(''SSL例程','tls_process_ske_dhe','dh密鑰太小',在Python中

[英]SSLError("bad handshake: Error([('SSL routines', 'tls_process_ske_dhe', 'dh key too small' in Python

我已經看到了一些有關此問題的鏈接,出於安全原因,大多數人都希望更新服務器。 我正在尋找一個唯一的內部工具,並連接到無法修改的服務器。 我的代碼在下面,我希望我可以清楚地知道如何接受小鍵並處理請求。

謝謝大家

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密鑰太小的問題已在https://weakdh.org上進行了詳細討論,並進行了各種補救。

現在,根據您的情況,它取決於Python使用的OpenSSL。 拒絕太小的值會硬編碼。

看一下: 如何在OpenSSL客戶端中拒絕弱DH參數?

當前,僅當服務器選擇的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分支中添加了一些工作對於這個問題。 它似乎暗示2001129f096d10bbd815936d23af3e97daf7882d1.0.2提交2001129f096d10bbd815936d23af3e97daf7882d ,因此首先嘗試使用較新版本的OpenSSL(您未指定要使用的版本)。

但是,即使您設法使所有內容都可以與OpenSSL一起使用,您仍然需要Python使用它(以便可能自己編譯python),然后在Python內部使用特定的API進行處理...老實說,我認為您會松懈修復服務的時間要少得多(即使您說不能修改它),而不是試圖從根本上削弱客戶端,因為拒絕小密鑰是一件好事(出於第一個鏈接中所述的原因)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM