Коротко. ERR_SSL_PROTOCOL_ERROR означает, что браузер и сервер не смогли договориться о защищённом TLS-соединении — рукопожатие провалилось. Чаще всего виноваты устаревший протокол (TLS 1.0/1.1), неполная цепочка сертификата, истёкший сертификат или несоответствующий домену сертификат, либо неверное время на устройстве пользователя. Первый шаг — проверить рукопожатие напрямую командой openssl s_client -connect example.com:443.
Что значит ERR_SSL_PROTOCOL_ERROR
TLS-рукопожатие — это первый шаг любого SSL/TLS проверку-соединения: стороны согласуют версию протокола, шифры и обмениваются сертификатами. Если на этом этапе что-то идёт не так, браузер обрывает соединение этой ошибкой ещё до загрузки страницы.
Эта ошибка не про контент сайта — она про безопасный канал. Пока TLS-handshake не пройдёт, ни байта данных не передаётся.
Основные причины
- Устаревший протокол — сервер предлагает только TLS 1.0/1.1, браузер их отклоняет.
- Неполная цепочка сертификата — не отдан промежуточный сертификат.
- Истёкший сертификат или несоответствие домену (CN/SAN).
- Неверное системное время на устройстве пользователя.
- Несовместимые шифры между клиентом и сервером.
- Антивирус или прокси, перехватывающий HTTPS (SSL-инспекция).
Диагностика TLS-рукопожатия
Посмотрите, что именно отдаёт сервер при handshake:
# Полный вывод рукопожатия и цепочки сертификатов
openssl s_client -connect example.com:443 -servername example.com
# Проверить конкретную версию протокола
openssl s_client -connect example.com:443 -tls1_2
openssl s_client -connect example.com:443 -tls1_3
# Быстрая проверка через curl
curl -I -v https://example.com
Обратите внимание на строки Verify return code и Certificate chain — там видно истёкший сертификат или разрыв цепочки.
Исправление на стороне пользователя
- Проверьте дату и время на устройстве — неверное время ломает проверку сертификата.
- Очистите состояние SSL и кэш браузера, откройте сайт в инкогнито.
- Временно отключите SSL-инспекцию в антивирусе/файрволе.
- Отключите VPN и прокси, перехватывающие HTTPS.
- Обновите браузер и ОС — старые версии не поддерживают современный TLS.
Исправление на стороне сервера
Если ошибку видят все — правьте конфигурацию TLS. Включите современные протоколы и отдавайте полную цепочку:
# nginx: разрешить только TLS 1.2 и 1.3
ssl_protocols TLSv1.2 TLSv1.3;
ssl_certificate /etc/ssl/fullchain.pem; # сертификат + промежуточные
ssl_certificate_key /etc/ssl/privkey.pem;
Убедитесь, что используется fullchain.pem (с промежуточными сертификатами), сертификат не истёк и выдан на нужный домен.
Причины и решения
| Причина | Решение |
|---|---|
| Старый протокол TLS 1.0/1.1 | Включить TLS 1.2/1.3 на сервере |
| Неполная цепочка | Использовать fullchain.pem |
| Истёкший сертификат | Перевыпустить, настроить авто-продление |
| Неверное время клиента | Синхронизировать часы устройства |
| SSL-инспекция антивируса | Отключить перехват HTTPS |
Как предотвратить повторение
Чаще всего ERR_SSL_PROTOCOL_ERROR возникает внезапно — из-за истёкшего сертификата, который забыли продлить. SSL-мониторинг сайтов проверяет срок действия и предупреждает за 14 и 3 дня до истечения, а аптайм-проверка ловит сбой handshake сразу и шлёт алерт. Так вы узнаёте о проблеме раньше посетителей.
Проверьте SSL-сертификат: срок, цепочку, протокол и шифры. HTTP-чекер подтвердит доступность по HTTPS после починки. Если сертификат истёк — смотрите статью истёкший SSL-сертификат: как исправить. О непрерывном контроле — руководство по мониторингу.
Частые вопросы
Это проблема у меня или у сайта?
Откройте сайт в другом браузере и с другого устройства. Если ошибка только у вас — проверьте время, антивирус и VPN. Если у всех — проблема в TLS-конфигурации сервера.
Почему ошибка появилась внезапно на рабочем сайте?
Почти всегда истёк сертификат. Перевыпустите его и настройте авто-продление (например, через Let's Encrypt и cron).
Может ли антивирус вызывать эту ошибку?
Да. Многие антивирусы перехватывают HTTPS для проверки и иногда ломают handshake. Временно отключите SSL-сканирование, чтобы проверить.
Поможет ли смена браузера?
Если проблема в устаревшем протоколе на стороне клиента — обновление или смена браузера может помочь. Но если сервер отдаёт только TLS 1.0/1.1, чинить нужно сервер.