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

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

В моем клиенте я хочу остановить рукопожатие, если длина ключа выбранных сервером параметров DH меньше 2048 бит. Предпочтительным способом было бы установить через API, например. настройка параметра, предоставляемая OpenSSL.

Есть ли способ установить минимальную длину ключа с помощью общедоступных API?


person user3027786    schedule 05.10.2015    source источник
comment
Проблемы с DH и SSL_CTX_set_tmp_dh_callback кажутся (1) запросом функции; и (2) ошибка документации.   -  person jww    schedule 06.10.2015
comment
Д-р Хенсон добавил пример кода в отчет об ошибке на странице Doc Bug: SSL_CTX_set_tmp_dh_callback (и друзья) и код клиента.   -  person jww    schedule 06.10.2015


Ответы (1)


Есть ли способ установить минимальную длину ключа с помощью общедоступных API?

Да (или, может быть, мне следует сказать: «Я так думаю»). Используйте обратный вызов Диффи-Хеллмана. Обратный вызов устанавливается с помощью SSL_CTX_set_tmp_dh_callback и SSL_set_tmp_dh_callback.

Обычно обратный вызов Диффи-Хеллмана используется на сервере для генерации его ключей. Но согласно справочной странице OpenSSL SSL_CTX_set_tmp_dh_callback(3), это "... использоваться, когда параметры DH требуются для tmp_dh_callback...".

Пример использования обратного вызова в контексте сервера (который должен быть аналогичен его использованию в клиенте) см. в разделе 'No Shared Ошибка шифрования с EDH-RSA-DES-CBC3-SHA. Он выполняет проверку длины ключа.

person jww    schedule 05.10.2015
comment
Я уже использую эти функции в режиме сервера, но openssl игнорирует их в режиме клиента. Именно сервер сначала выбирает параметры dh и согласовывает их с клиентом. - person user3027786; 05.10.2015
comment
@ user3027786 - Хорошо, спасибо. Генерация случайного значения, используемого в качестве открытого ключа на клиенте, явно выбирает параметр DH, поэтому где-то есть ошибка. (Я не знаю, должно ли это работать, и это ошибка реализации, или это не должно работать, и это ошибка документации). Вы хотите отправить отчет об ошибке в OpenSSL или хотите, чтобы это сделал я? - person jww; 05.10.2015
comment
@ user3027786 - ПОДТВЕРЖДЕНИЕ. См. также Как обеспечить размер поля DH в клиенте? в списке рассылки пользователей OpenSSL. Давайте сосредоточимся на том, в чем на самом деле заключается проблема, прежде чем отправлять что-либо. - person jww; 05.10.2015
comment
@user3027786 user3027786 - в документации зарегистрирована ошибка; см. Ошибка документа: SSL_CTX_set_tmp_dh_callback (и друзья) и клиентский код - person jww; 06.10.2015
comment
Спасибо, я следую Как принудительно установить размер поля DH в клиенте?. Есть комментарий @Viktor Dukhovni: это должно быть возможно через конфигурацию, но нет подробностей, как? - person user3027786; 08.10.2015