Сервер TLS делает что-то, чего я не понимаю.
- TCP-рукопожатие выполняется нормально.
- SSL Client Hello выполняется нормально.
- SSL Server Hello выглядит нормально. Предоставляет сертификат, пишет Server Hello Done.
- Анализ показывает проблемы клиента «Обмен ключами клиента, изменение спецификации шифра, зашифрованное сообщение о рукопожатии»
- Анализ показывает, что сервер выдает «Изменить спецификацию шифра», а затем «Зашифрованное сообщение о рукопожатии».
Клиент теперь 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 способом, с зашифрованным оповещением — но, тем не менее, это следует учитывать всем, кто заходит на эту страницу.