Что означает предупреждение javax.net.ssl «user_canceled»?

#ssl #java-8

#ssl #java-8

Вопрос:

Я подключаюсь к серверу через SSL. Это отлично работало с OpenJDK8 262 и 265.

С 275 я внезапно вижу это на выходе:

 javax.net.ssl|FINE|5F|pool-1-thread-1|2021-03-02 10:47:27.085 CET|Logger.java:765|Received alert message (
"Alert": {
  "level"      : "warning",
  "description": "user_canceled"
}
 

Я отследил это до этой константы (https://github.com/openjdk/jdk8/blob/6a383433a9f4661a96a90b2a4c7b5b9a85720031/jdk/src/share/classes/sun/security/ssl/Alerts.java#L76):

 static final byte           alert_user_canceled = 90;
 

Когда я ищу в репозитории эту константу, я получаю только одно попадание (в методе преобразования кода в строку):

     case alert_user_canceled:
        return "user_canceled";
 

Поиск по всем источникам OpenJDK дает одинаковые результаты: https://github.com/search ?q=org:openjdk alert_user_canceledamp;type=code

Я в тупике. Кто отправляет это предупреждение и почему?

Обновление: после еще нескольких тестов у меня создается впечатление, что удаленная сторона отправляет «отмена». Возможно ли это? Для меня это не имеет смысла, поскольку я подключаюсь к серверу (я отправляю ClientHello, я получаю ServerHello).

Комментарии:

1. Да, «Полученное предупреждение» означает, что его отправил удаленный. 90 не должен (согласно RFC) использоваться для ошибки протокола, поэтому то, что может или должно вызвать это, полностью зависит от удаленного, который вы не описали или не идентифицировали. Вы можете настроить systprop javax.net.debug=ssl:handshake как для рабочих, так и для нерабочих версий и искать различия, которые могут иметь значение для сервера, но это в основном догадки.

2. Есть ли у вас tcpdump для этого TCP-соединения?

3. @JanGaraj Нет, это клиентский сервер, где я ограничен тем, что могу установить.

4. @dave_thompson_085 Ах! Я полностью пропустил эту информацию. Я попытаюсь заставить системного администратора запустить сервер с этими параметрами.

Ответ №1:

Вы видите предупреждение (как определено в спецификации протокола TLS, раздел 7.2 «Протокол оповещения»), отправленное сервером, с которым вы пытаетесь установить связь.

В приведенной выше спецификации код предупреждения 90 ( user_canceled ) описывается следующим образом:

Это рукопожатие отменяется по какой-то причине, не связанной со сбоем протокола. Если пользователь отменяет операцию после завершения рукопожатия, более уместно просто закрыть соединение, отправив close_notify . За этим предупреждением должно последовать сообщение close_notify. Это сообщение обычно является предупреждением.

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

Вы можете попытаться отладить соединение, сравнив подробные журналы процедуры квитирования из рабочей версии со сломанной версией, и посмотреть, что отличается. Это может дать некоторое представление о том, как решить эту проблему.