SSLError («плохое рукопожатие: ошибка ([(« подпрограммы SSL »,« tls_process_ske_dhe »,« ключ dh слишком мал ») в Python - PullRequest
0 голосов
/ 07 декабря 2018

Я видел несколько ссылок на эту проблему, и большинство людей хотят обновить сервер из соображений безопасности.Я ищу сделать только внутренний инструмент и подключиться к серверу, который не может быть изменен.Мой код приведен ниже, и я надеюсь, что смогу понять, как я могу принять маленький ключ и обработать запрос.

Спасибо всем заранее

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 голосов
/ 15 декабря 2018

Проблема со слишком маленькими ключами DH обсуждается подробно в https://weakdh.org` с различными исправлениями.

Теперь в вашем случае это зависит от OpenSSL, который Python использует под капотом.Это жестко закодировано, чтобы отклонить слишком маленькие значения.

Посмотрите на: Как отклонить слабые параметры DH в клиенте OpenSSL?

В настоящее время OpenSSL в клиентережим останавливает рукопожатие только в том случае, если длина ключа выбранных сервером параметров DH меньше 768 бит (жестко задан в источнике).

Основываясь на ответе, вы можете использовать SSL_CTX_set_tmp_dh_callback и SSL_set_tmp_dh_callback для управлениячто вам больше по вкусу ... за исключением того, что в то время он не работал на стороне клиента, а только на стороне сервера.ветка 1.1.0 для этой проблемы.Кажется, он намекает на коммит 2001129f096d10bbd815936d23af3e97daf7882d в 1.0.2, поэтому сначала, возможно, попробуйте более новую версию OpenSSL (вы не указали, какие версии вы используете).

Однако даже если вам удастся заставить все работатьс OpenSSL вам все еще нужен ваш Python для его использования (так что, вероятно, для самостоятельной компиляции python), а затем для работы над этим у вас есть специальный API внутри Python ... если честно, я думаю, что вы потеряете гораздо меньше времени на исправление службы (даже есливы говорите, что не можете его изменить) вместо того, чтобы пытаться изуродовать клиента, так как отказ от маленьких ключей - хорошая вещь (по причинам, объясненным в первой ссылке).

...