Битлента
Ошибки и коды3 мин чтения·

Ошибка SSL handshake failed: сбой при согласовании защищённого соединения

Ошибка SSL handshake failed возникает при согласовании защищённого соединения. Причины, проверка в браузере и через openssl, исправления для пользователя и владельца.

Что такое рукопожатие

Прежде чем передавать данные, клиент и сервер проходят короткую процедуру: обмениваются поддерживаемыми версиями и шифрами, сервер предъявляет сертификат, стороны вычисляют общие ключи. Эту процедуру называют handshake, рукопожатие. Сообщение «SSL handshake failed» значит, что она прервалась и данные передавать нельзя.

Формулировка встречается не только в браузерах. Её выводят почтовые клиенты, приложения, серверные программы и веб-серверы в журналах. Поэтому текст один, а причины различаются в зависимости от того, кто именно сообщает об ошибке.

На практике сообщение чаще всего видят разработчики и администраторы: пользователи браузеров обычно получают более понятные варианты, а вот программы, скрипты и почтовые клиенты сообщают о сбое сухим текстом без пояснений.

Основные причины сбоя

На стороне клиента обычно виноваты неправильное время, устаревшая система или библиотека, отсутствие корневых сертификатов, мешающий антивирус либо настройки промежуточного сервера. Приложения могут дополнительно проверять отпечаток сертификата и отказываться, если он изменился.

На стороне сервера причиной служат несовместимые версии протокола и шифры, просроченный сертификат, неполная цепочка, неправильное имя в сертификате, отсутствие поддержки SNI. Между ними могут стоять балансировщики и промежуточный сервер, у каждого из которых свои настройки, и любой из них способен оборвать рукопожатие.

Немалую роль играют и промежуточные устройства безопасности, которые разбирают трафик. Если они используют устаревшую библиотеку, то обрывают рукопожатие с любым современным сервером, и виновным кажется каждый сайт по отдельности, хотя проблема одна и та же.

Первичная диагностика

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

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

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

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

Проверка командой openssl

Если у вас есть доступ к терминалу, выполните команду openssl s_client -connect имя-сайта:443 -servername имя-сайта. Она пытается пройти рукопожатие и печатает цепочку сертификатов, выбранную версию протокола и шифр. Если соединение рвётся сразу, и вывода нет, сервер отказывает уже на первом шаге.

Обратите внимание на строки о проверке цепочки: сообщение о невозможности проверить первого издателя указывает на неполную цепочку. Также посмотрите даты действия сертификата и список имён, для которых он выдан.

Исправление у пользователя

Обновите систему и браузер, установите правильное время, отключите проверку HTTPS в антивирусе на время проверки, очистите состояние SSL и кэш. В приложениях проверьте, не включён ли промежуточный сервер, и обновите само приложение. Для старых устройств, у которых обновлений нет, нередко единственный путь — воспользоваться другим устройством.

Не стоит отключать проверку сертификатов в настройках приложений: это снимает защиту от подмены сервера, а сама причина остаётся.

Если вы разработчик, проверьте, что библиотека, которой пользуется ваше приложение, поддерживает актуальные версии TLS и имеет свежий набор корневых сертификатов. Причиной сбоя после переноса приложения на новую систему нередко оказывается именно отсутствие нужных сертификатов в хранилище.

Исправление у владельца

Проверьте срок и цепочку сертификата, соответствие имени, набор поддерживаемых версий и шифров, корректность настроек SNI на общем IP. Если перед сервером стоит CDN или балансировщик, сверьте режим шифрования между ним и вашим сервером. После правок проверьте сайт онлайн-сканером и с нескольких устройств разного возраста, чтобы убедиться, что ошибка устранена для всех.

Не забывайте о мониторинге: настройте регулярную проверку доступности защищённого адреса и срока действия сертификата. Так вы увидите проблему до того, как о ней сообщат посетители, и сможете исправить настройки без спешки.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
tlssslhandshakeopenssl

Часто задаваемые вопросы

Читайте также