Мне нравится использовать этот веб-сайт для описания протокола TLS.
При первоначальном подключении клиента он отправляет пакет "Hello Hello".В пакете есть раздел для «поддерживаемых наборов шифров» (см. A.5 RFC ).Если сервер не поддерживает ни один из поддерживаемых наборов шифров, он будет отклонять соединение в этой точке.
Начиная с 7.4.1.2.Привет клиента RFC :
Список комплектов шифров, переданных от клиента серверу в сообщении
ClientHello, содержит комбинации криптографических алгоритмов
поддерживается клиентом в порядке предпочтения клиента
(сначала предпочтительный вариант).Каждый набор шифров определяет алгоритм обмена ключами
, алгоритм массового шифрования (включая длину секретного ключа), алгоритм MAC и PRF.Сервер выберет набор шифров или, если приемлемые варианты не представлены, вернет предупреждение о сбое
и закроет соединение.Если список содержит наборы шифров
, которые сервер не распознает, не поддерживает или не хочет использовать, сервер
ДОЛЖЕН игнорировать эти наборы шифров и обрабатывать оставшиеся наборы
как обычно.
Так что, скорее всего, вы ограничили параметры сервера тем, что клиенты не поддерживают.Если клиент поддерживает ECDHE-ECDSA-AES128-GCM-SHA256, это должно сработать.Я также предполагаю, что вы не отключили другие необходимые наборы шифров (например, алгоритм массового шифрования и т. Д.)
ОБНОВЛЕНИЕ: я не могу сказать, что понимаю, что происходит, но просматривая исходный код opensslкод, API SSL_CTX_set1_curves_list не предоставляется командной строке openssl ни в одном из вариантов, которые я могу найти.
openssl предоставляет параметр "- named_curve" :
-named_curve кривая Определяет используемую эллиптическую кривую.ПРИМЕЧАНИЕ. Это одна кривая, а не список.
Примечание: это разрешение влияет на серверы, а не на клиентов.
При этом используется API SSL_CTX_set_tmp_ecdh / SSL_set_tmp_ecdh .Это имеет больше смысла для меня в том, что вы говорите выше, чтобы ограничить варианты ECDH.Я обычно выставляю этот API своим опциям на стороне сервера.