ERR_SSL_PROTOCOL_ERROR: что значит и как исправить
ERR_SSL_PROTOCOL_ERROR — Chrome начал устанавливать защищённое соединение, а сервер ответил не так, как требует протокол TLS. Например, на порту 443 работает обычный HTTP без шифрования.
Содержание 10
Что сделать прямо сейчас
Если вы просто открываете сайт:
- Обновите страницу.
- Если в адресе после имени сайта стоит двоеточие и число — например, example.com:8080, — попробуйте открыть адрес без него: возможно, порт указан по ошибке.
- Если ошибка только на одном сайте, сообщите владельцу: скорее всего, у него неправильно настроен HTTPS.
- Если ошибка появляется на многих сайтах, обновите Chrome и проверьте, не мешают ли соединению антивирус или брандмауэр.
Если сайт ваш, переходите к разделам «Как проверить» и «Как исправить» ниже: там все команды по шагам.
Что значит ошибка
Адрес с https:// значит, что браузер и сервер сначала договариваются о шифровании по протоколу TLS и только потом обмениваются страницами. В исходном коде Chrome ERR_SSL_PROTOCOL_ERROR — это ошибка -107, общая ошибка протокола SSL/TLS.
На тестовом сервере Chrome показал её, когда адрес открывали по https://, а на порту работал обычный HTTP без шифрования: сервер ответил на первое сообщение браузера не по TLS.
Как выглядит в Chrome
Заголовок — «Этот сайт не может обеспечить безопасное подключение», под ним — «Сайт example.com отправил недействительный ответ.» Внизу — код ERR_SSL_PROTOCOL_ERROR и кнопка «Перезагрузить». В некоторых системах Chrome предлагает ещё и запустить диагностику сети.
Причины
| Причина | Как проявляется |
|---|---|
| В настройках nginx у listen 443 нет параметра ssl | Сервер отвечает на порту 443 без шифрования |
| Адрес с https:// ведёт на порт, где работает обычный HTTP | Ошибка только на адресах с портом, например https://example.com:8080/ |
| Из старых настроек удалили директиву ssl on, а параметр ssl в listen не добавили | HTTPS перестал работать после правки настроек |
Как проверить
Команды из этого раздела вводятся в терминале сервера. Если вы ещё не подключались к нему, начните с инструкции Как подключиться к VPS по SSH. Скопируйте команду целиком, замените example.com на адрес своего сайта и нажмите Enter.
Шаг 1. Отправьте обычный запрос на порт 443
curl -I http://example.com:443/Если в ответ пришла строка с кодом ответа — например, 200 или 301, — на порту 443 работает обычный HTTP без шифрования. Правильно настроенный nginx на такой запрос отвечает кодом 400: в документации nginx этот случай описан как «обычный запрос был послан на порт HTTPS».
Шаг 2. Отправьте защищённый запрос
curl -I https://example.com/Если сервер отвечает не по TLS, curl завершится с ошибкой 35 — сбой при установке защищённого соединения. То же покажет openssl:
openssl s_client -connect example.com:443 -servername example.com </dev/nullЕсли сервер не прислал сертификат, в выводе будет строка no peer certificate available.
Шаг 3. Проверьте строки listen в настройках nginx
sudo nginx -T | grep listenВ строках с портом 443 должен быть параметр ssl: listen 443 ssl.
Как исправить
Добавьте параметр ssl к listen и укажите сертификат и ключ. Для сертификата Let's Encrypt, полученного через certbot, блок выглядит так:
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# остальные настройки сайта: root, location и так далее
}Если сервер принимает соединения и по IPv6, добавьте ssl и в строку listen [::]:443.
После правок сохраните файл — Ctrl+O, Enter, затем Ctrl+X — и проверьте настройки:
sudo nginx -tВ ответе должны быть слова syntax is ok и test is successful. Если вместо них сообщение об ошибке, в нём указаны файл и номер строки: исправьте строку и проверьте снова. Когда проверка прошла, примените настройки:
sudo systemctl reload nginxЕсли команда ничего не ответила, настройки применены.
Директива ssl on устарела в nginx 1.15.0 и удалена в версии 1.25.1: вместо неё нужен параметр ssl у listen. Если в старых настройках она осталась, после обновления nginx команда nginx -t сообщит об ошибке.
Если приложение на Node.js или Python само слушает порт и не умеет HTTPS, не открывайте его по https:// с портом. Поставьте перед ним nginx с сертификатом, а запросы передавайте приложению через proxy_pass — как это сделать, рассказано в инструкции Как разместить сайт на VPS. Как получить сертификат — в инструкции Бесплатный SSL-сертификат.
На обычном хостинге
Проверьте в панели хостинга, выпущен ли для домена SSL-сертификат и включён ли HTTPS. Если всё включено, а ошибка остаётся, напишите в поддержку адрес сайта и время ошибки.
Соседние ошибки
| Ошибка | Чем отличается |
|---|---|
| ERR_SSL_VERSION_OR_CIPHER_MISMATCH | Сервер отвечает по TLS, но браузер и сервер не договорились о версии или шифре |
| ERR_CONNECTION_CLOSED | Сервер закрыл соединение, ничего не ответив |
| ERR_CONNECTION_RESET | Соединение оборвали сбросом |
| «Подключение не защищено» | Сервер ответил по TLS, но сертификат не прошёл проверку |
Источники
- Исходный код Chromium: net_error_list.h — ошибка -107; localized_error.cc — заголовок и текст страницы ошибки.
- Документация nginx: настройка HTTPS-серверов; параметр ssl директивы listen; директива ssl — когда она устарела и удалена; обработка ошибок — обычный запрос на порт HTTPS.
Проверено в Chrome 155 на локальном тестовом сервере 7 октября 2026 года.
Сверено 7 октября 2026 года.
Что почитать дальше
- Бесплатный SSL-сертификат — как получить сертификат и включить HTTPS.
- Как разместить сайт на VPS — настройка nginx с нуля.
- «Подключение не защищено» — ошибки сертификата в Chrome.
- «Не удается получить доступ к сайту» — коды ошибок Chrome и что они значат.
Проверено и обновлено: 08.10.2026