Почему сервер зависает после запуска сеанса TLS?

Почему сервер зависает после запуска сеанса TLS?

Сервер TLS делает что-то, чего я не понимаю.

  1. TCP-рукопожатие выполняется нормально.
  2. SSL Client Hello выполняется нормально.
  3. SSL Server Hello выглядит нормально. Предоставляет сертификат, пишет Server Hello Done.
  4. Анализ показывает проблемы клиента «Обмен ключами клиента, изменение спецификации шифра, зашифрованное сообщение о рукопожатии»
  5. Анализ показывает, что сервер выдает «Изменить спецификацию шифра», а затем «Зашифрованное сообщение о рукопожатии».

Клиент теперь ACK, начинает отправлять данные. Но сервер ACK затем отправляет "Encrypted Alert" и FIN's out.

Это произошло сразу после замены сертификатов. Сертификат, представленный в SSL-рукопожатии, является новым ключом.

Кто-нибудь знает?

решение1

Вероятно, это связано с проблемой SNI либо с клиентом, либо с каким-то устройством посередине, например, с балансировщиком нагрузки. Устройство балансировки нагрузки должно иметь возможность представить имя сервера внутреннему хосту как часть начального Client Hello. см.https://en.m.wikipedia.org/wiki/Указание_Имени_Сервера

решение2

Самым важным пакетом является «Зашифрованное оповещение», поскольку он содержит причину закрытия соединения.

Кажется, это ошибка проверки. Это означает, что сертификат не является доверенным или недействительным. Но настоящая причина — отправить черезПротокол оповещения TLS

решение3

Я столкнулся с похожей проблемой pure-ftpdв явном режиме TLS (сервер FTPS).

В моем случае, однако, былонет Encrypted Alertотправлено с сервера; он просто Fin'd сразу после обмена ключами ( Change Cipher Spec, Finishedсообщение с сервера → FIN с сервера). Далее,клиентотправил Encrypted alertкод 0 уровня 1 Close Notify(что и ожидалось — в отличие от FIN сервера).

Это произошло только с одним конкретным клиентом (прошивкой устройства) и не воспроизводилось с другими FTP-клиентами.

Я не докопался до сути проблемы, но подозреваю, что мы наткнулись наошибка сервера. pure-ftpdиспользует модель форка на соединение, подобную Apache; и я заметилсбой дочернего процессав gdb (завершение с кодом -1) — что, конечно же, приводит к тому, что ОС закрывает сокет FD и отправляет FIN.

Еще одна причина утверждать, что в моем случае это ошибка сервера — поведение перестало воспроизводиться, как только мы заменили ftps-сервер на другую реализацию, proftpd.


Я не думаю, что это соответствует случаю OP — там сервер завершает соединение соответствующим TLS способом, с зашифрованным оповещением — но, тем не менее, это следует учитывать всем, кто заходит на эту страницу.

Связанный контент