openssl 1.0.2, как заставить сервер выбирать только набор шифров - PullRequest
0 голосов
/ 23 октября 2018

У меня есть клиентский сервер, который использует opensl 1.0.2j, и я хочу заставить сервер использовать только следующие шифры.

ECDHE-RSA-AES256-GCM-SHA384
ECDHE-RSA-AES256-SHA384
ECDHE-ECDSA-AES256-GCM-SHA384
ECDHE-ECDSA-AES256-SHA384
ECDH-RSA-AES128-GCM-SHA256
ECDH-RSA-AES128-SHA256
ECDH-ECDSA-AES128-GCM-SHA256
ECDH-ECDSA-AES128-SHA256
DHE-DSS-AES256-GCM-SHA384
DHE-DSS-AES256-SHA256
DHE-RSA-AES256-GCM-SHA384
DHE-RSA-AES256-SHA256
DHE-DSS-AES128-GCM-SHA256
DHE-RSA-AES128-GCM-SHA256
DHE-RSA-AES128-SHA256
DHE-DSS-AES128-SHA256

Мой код на стороне сервера будет выглядеть ниже.

method = SSLv23_server_method();
ctx = SSL_CTX_new(method);
SSL_CTX_set_cipher_list(ctx, "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDH-RSA-AES128-GCM-SHA256:ECDH-RSA-AES128-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-ECDSA-AES128-SHA256:DHE-DSS-AES256-GCM-SHA384:DHE-DSS-AES256-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256");
SSL_CTX_set_ecdh_auto(ctx, 1);
SSL_CTX_use_certificate_file(ctx, certFilePath, SSL_FILETYPE_PEM);
SSL_CTX_use_PrivateKey_file(ctx, privKeyPath, SSL_FILETYPE_PEM)
SSL_accept()

Последний шаг ssl_accept завершается неудачно с

here'error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher'

У меня есть проверка ошибок для каждого вызова ssl в приведенном выше коде и для ясности не помещать весь код.Если я использую «TLSv1.2:! ADH:! NULL» для SSL_CTX_set_cipher_list (), он работает нормально.

Редактировать: сгенерированный ключ - RSA: 4096.Нужно ли по-разному генерировать ключи для ECDH / ECDHE / DHE?

Не могли бы вы помочь мне выяснить, почему он не работает и как я могу его решить?

Дайте мне знать, если вам нужно большеинформация.

Спасибо, Нага

1 Ответ

0 голосов
/ 23 октября 2018

На основании этого кода вы не устанавливаете никаких параметров DH, поэтому любой из этих DHE-* сертификатов не будет работать.Кроме того, статические параметры для ECDH (не ECDHE) не установлены, поэтому шифры ECDH-* также не будут использоваться.Это оставляет только:

ECDHE-RSA-AES256-GCM-SHA384
ECDHE-RSA-AES256-SHA384
ECDHE-ECDSA-AES256-GCM-SHA384
ECDHE-ECDSA-AES256-SHA384

Но из этих 4 шифров можно использовать только два, так как у вас есть сертификат RSA (первые два шифра) или сертификат ECC (последние два шифра).Скорее всего, это сертификат RSA, который оставляет:

ECDHE-RSA-AES256-GCM-SHA384
ECDHE-RSA-AES256-SHA384

Поскольку вы получаете no shared cipher, вполне вероятно, что ваш неизвестный клиент не поддерживает ни один из этих двух шифров.

Если я использую «TLSv1.2:! ADH:! NULL» для SSL_CTX_set_cipher_list (), он работает нормально.

С OpenSSL 1.0.2 в общей конфигурации, я вижу, что этот набор также включает в себя следующие шифры(пропуская все DH, ECDH -... как и прежде):

AES256-GCM-SHA384
AES256-SHA256
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-RSA-AES128-SHA256
AES128-GCM-SHA256
AES128-SHA256

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

...