Недавнее обновление Java вызывает сбой рукопожатия TLS с сертификатом сервера эллиптической кривой? - PullRequest
0 голосов
/ 25 октября 2019

19 октября я обновился до OpenJDK Java 1.8.0_232, и моим процессам Java не удалось подключиться к службе, предоставляемой stunnel, используя сертификат сервера EC. У меня есть сертификат клиента EC, который я бы предоставил серверу, если первоначальное рукопожатие будет успешным, но оно не зашло так далеко.

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

Я собираюсь начать читать объявление , чтобы посмотреть, есть ли там что-нибудь, что могло бы предложить "исправить"что-то, но я считаю, что все настроено правильно как на клиенте, так и на сервере. В настоящее время я думаю, что это ошибка в JVM.

Используя ssltest , я смог подтвердить, что могу предоставить рукопожатие с сервером, используя несколько наборов шифров при предоставлении правильного клиентасертификат, пока я использую Java 1.8.0_181 или Java 11.0.3 (это две версии, которые я случайно обнаружил на своем ноутбуке для тестирования). При использовании Java 1.8.0_232 не удается использовать те же файлы, командную строку и т. Д.

Кто-нибудь видел что-нибудь подобное?

ОБНОВЛЕНИЕ

Я скачал x86-64 OpenJDK версии 8u222 и 8u232 с здесь , и я могу подтвердить, что версия 8u222 будет подключаться, а 8u232 не будет подключаться.

UPDATE Понижение допредыдущая версия OpenJDK уже решила мою проблему. Я использую Debian Stretch, и мне удалось выполнить понижение с помощью этой команды:

$ sudo apt-get install openjdk-8-jdk-headless=8u222-b10-1~deb9u1 openjdk-8-jre-headless=8u222-b10-1~deb9u1

Обратите внимание, что у меня установлены только «безголовые» пакеты, поэтому я понизил только «безголовые» пакеты.

ОБНОВЛЕНИЕ Здесь я могу подтвердить, что сертификат клиента - красная сельдь. Я ослабил требования на моем сервере, чтобы он не требовал сертификата клиента, и первоначальное рукопожатие TLS по-прежнему не удается. Я пытаюсь сузить это до самого простого тестового случая, который я могу получить.

ОБНОВЛЕНИЕ Все еще пытаюсь диагностировать проблему здесь. У меня есть тестовый сервер, на котором я могу запустить его в различных конфигурациях и посмотреть, что произойдет. Я определил, что, хотя Java 8u222 поддерживает кривую secp256k1, Java 8u232 - нет, и я получаю ошибку рукопожатия.

1 Ответ

1 голос
/ 27 октября 2019

Кривая secp256k1 была отключена с помощью jdk 8u232 (см. https://java.com/en/download/faq/release_changes.xml).. Его можно повторно включить с помощью системного свойства java jdk.tls.namedGroups.

. несколько других устаревших кривых NIST EC , которые также отключены. Перечисленные здесь кривые sect283k1, sect283r1, sect409k1, sect409r1, sect571k1, sect571r1 и secp256k1. Системное свойство jdk.tls.namedGroups принимает список этих имен через запятую.

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