Что могло вызвать ошибку "dh key too small"? - PullRequest
1 голос
/ 06 мая 2020

Я написал программу, использующую openssl, и докерил ее.

Но когда я попробовал это с базовым изображением python: 3.7, возникла следующая ошибка:

[SSL: DH_KEY_TOO_SMALL] ключ dh слишком мал (_ssl. c: 1108)

Мне удалось решить эту проблему, снизив уровень безопасности в файле /etc/ssl/openssl.cnf.

echo "CipherString=DEFAULT@SECLEVEL=1" >> /etc/ssl/openssl.cnf

Но что именно означает эта ошибка?

Это проблема на стороне сервера, которую я не могу решить в своем коде?

Я просто не чувствую себя комфортно, решая проблему, просто понижая уровень безопасности.

Что следует учитывать при изменении этого уровня безопасности?

Спасибо :)

Ответы [ 2 ]

3 голосов
/ 06 мая 2020

Лучшее объяснение, которое я нашел, находится на вики-странице Debian по адресу https://wiki.debian.org/ContinuousIntegration/TriagingTips/openssl-1.1.1, в которой говорится:

В Debian по умолчанию установлены более безопасные значения. Это делается в конфигурационном файле /etc/ssl/openssl.cnf. В конце файла:

[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=2

Это может привести к таким ошибкам, как:

dh key too small
ee key too small
ca md too weak

Это вызвано тем, что SECLEVEL 2 устанавливает уровень безопасности 112 бит. Это означает, что ключи RSA и DHE должны иметь длину не менее 2048 бит. SHA-1 больше не поддерживается для подписей в сертификатах, и вам нужен как минимум SHA-256. Обратите внимание, что центры сертификации прекратили выпуск сертификатов, которые не соответствовали этим требованиям, в январе 2015 года, а с января 2017 года все действующие сертификаты CA должны соответствовать этим требованиям. Однако есть сертификаты, сгенерированные частными центрами сертификации или входящие в набор тестов, которые не соответствуют этим требованиям.

SECLEVEL 1 был значением по умолчанию в предыдущих версиях и имеет 80-битный уровень безопасности, требующий 1024-битного RSA key.

Проблема "dh key too simple" полностью подробно описана в https://weakdh.org/ Здесь говорится:

Diff ie - Обмен ключами Хеллмана - это популярный алгоритм шифрования c, который позволяет протоколам Inte rnet согласовывать общий ключ и согласовывать безопасное соединение. Это фундаментально для многих протоколов, включая HTTPS, S SH, IPse c, SMTPS, и протоколов, основанных на TLS.

Мы обнаружили несколько слабых мест в том, как обмен ключами Diff ie -Hellman развернуто:

[..]

Что мне делать? Если вы запускаете сервер…

Если у вас есть веб-сервер или почтовый сервер, вы должны отключить поддержку экспортных наборов шифров и использовать 2048-битную группу Diff ie -Hellman.

Что делать?

Старайтесь не менять SECLEVEL. Лучше оставить его в масштабе всей системы как есть (SECLEVEL = 2), но вместо этого попытайтесь исправить конкретную c проблему с подключением, которая у вас есть.

Первый шаг - связаться с администратором службы, которую вы пытаетесь для подключения к TLS и предоставьте ему указанные выше сведения, чтобы он внес необходимые изменения, чтобы он больше не попадал в уязвимость "weak dh".

Если это окажется невозможным, или пока что до разрешения, просто установите для соединения "SSL" шифры на значение DEFAULT@SECLEVEL=1. К сожалению, это снижает безопасность, но по крайней мере влияет только на это соединение c, а не на всю систему. Вам не нужно жестко кодировать список шифров: значение выше заставит все работать точно так же, как раньше.

У меня была точно такая же проблема, и я решил ее таким образом, потому что он не мог убедить удаленную сторону изменить своего TLS-сервера или предоставить сертификаты хотя бы с использованием RSA 2048 бит.

1 голос
/ 06 мая 2020

Это проблема программы, если вы не запретили слабые и уязвимые шифры.

НЕ уменьшайте уровень безопасности.

Небольшой ключ DH может подвергнуть TLS-соединение таким уязвимостям, как как LogJam.

Вам необходимо указать в вашей программе набор надежных шифров. Для быстрого теста попробуйте "HIGH:! DH:! ANULL"

Вы также можете указать строгий набор наборов шифров, например:

"ECDHE-ECDSA-AES256-GCM-SHA384 : ECDHE-RSA-AES256-GCM-SHA384: ECDHE-ECDSA-CHACHA20-POLY1305: ECDHE-RSA-CHACHA20-POLY1305: ECDHE-ECDSA-AES128-GCM-SHA256: ECDHE128-RSA-GCS-A-GCS -AES256-SHA384: ECDHE-RSA-AES256-SHA384: ECDHE-ECDSA-AES128-SHA256: ECDHE-RSA-AES128-SHA256 "

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

Любезно предоставлено списком наборов шифров: https://www.acunetix.com/blog/articles/tls-ssl-cipher-hardening/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...