Что такое ERR_SSL_UNRECOGNIZED_NAME_ALERT
Ошибка ERR_SSL_UNRECOGNIZED_NAME_ALERT появляется в браузере Google Chrome, когда сервер возвращает TLS-предупреждение с кодом 112 (unrecognized_name). Это означает, что имя домена, переданное клиентом через расширение SNI (Server Name Indication), не совпадает с именем, которое настроено на сервере для данного IP-адреса. В результате браузер блокирует соединение, и пользователь видит сообщение о том, что сайт недоступен.
В отличие от других SSL-ошибок, таких как NET::ERR_CERT_AUTHORITY_INVALID или ERR_CERT_DATE_INVALID, эта ошибка не связана с истекшим или недоверенным сертификатом. Она указывает на проблему конфигурации на стороне сервера: либо домен не добавлен в виртуальный хост, либо SNI настроен некорректно. Понимание этого различия помогает быстрее диагностировать проблему и не тратить время на переустановку сертификатов.
Как работает SNI и почему возникает ошибка
SNI — это расширение протокола TLS, которое позволяет одному IP-адресу обслуживать несколько HTTPS-сайтов с разными сертификатами. При установке соединения клиент (браузер) отправляет имя запрашиваемого домена в открытом виде до завершения рукопожатия. Сервер использует это имя, чтобы выбрать правильный виртуальный хост и соответствующий SSL-сертификат.
Ошибка ERR_SSL_UNRECOGNIZED_NAME_ALERT возникает, когда сервер не находит конфигурацию для переданного имени. Это может произойти, если:
- В nginx отсутствует директива server_name для запрашиваемого домена.
- В Apache не создан блок с соответствующим ServerName.
- DNS-запись A указывает на IP-адрес, где домен не настроен.
- CDN или reverse-proxy не знает о backend-домене.
- На shared-хостинге провайдер не добавил домен в список обслуживаемых.
Важно отметить, что по RFC 6066 предупреждение unrecognized_name является warning, но Chrome трактует его как фатальную ошибку и блокирует соединение. Другие браузеры могут игнорировать это предупреждение, что объясняет, почему ошибка чаще встречается именно в Chrome.
Основные причины ошибки на стороне сервера
Рассмотрим наиболее частые сценарии, приводящие к ERR_SSL_UNRECOGNIZED_NAME_ALERT.
Неверная конфигурация nginx. Если в конфигурационном файле nginx для HTTPS-сервера не указан server_name или указан не тот домен, сервер не сможет сопоставить запрос с нужным блоком. Например, если сайт доступен по адресу example.com, а в конфигурации прописан только www.example.com, запрос без www вызовет ошибку.
Отсутствие VirtualHost в Apache. Аналогичная ситуация в Apache: если для домена не создан блок с корректным ServerName, сервер вернёт предупреждение.
Проблемы с DNS. Если A-запись домена указывает на IP-адрес, где не настроен виртуальный хост, браузер подключится к серверу, но тот не распознает имя. Это часто случается после смены хостинга или при использовании нескольких серверов.
Ошибки в настройках CDN. При использовании Cloudflare или другого CDN необходимо убедиться, что в origin-настройках указан правильный Host-заголовок. Если CDN передаёт на backend имя, которое там не настроено, возникает ошибка.
Shared-хостинг. На виртуальном хостинге провайдер управляет конфигурацией сервера. Если домен не добавлен в панель управления или не привязан к SSL-сертификату, сервер не сможет обработать SNI-запрос.
Диагностика: как проверить, что сервер возвращает
Прежде чем вносить изменения, важно точно определить причину ошибки. Для этого можно использовать несколько инструментов.
Команда openssl s_client. В терминале выполните:
openssl s_client -connect example.com:443 -servername example.comЭта команда покажет, какой сертификат возвращает сервер для указанного домена. Если в выводе присутствует alert unrecognized_name, значит, сервер не распознал имя. Также обратите внимание на поле subject — оно должно содержать запрашиваемый домен.
Онлайн-SSL-тестеры. Сервисы вроде Qualys SSL Server Test позволяют проверить конфигурацию SSL/TLS удалённо. Они показывают цепочку сертификатов, поддержку протоколов, наличие ошибок и оценку безопасности. Если сертификат недействителен или конфигурация неверна, тест укажет на это.
Проверка DNS. Убедитесь, что A-запись домена указывает на правильный IP-адрес. Можно использовать команду dig example.com A или онлайн-инструменты для проверки DNS-пропагации.
Просмотр логов сервера. В логах nginx или Apache часто фиксируются ошибки handshake. Например, в nginx ошибка может выглядеть как SSL: error:14094458:SSL routines:ssl3_read_bytes:tlsv1 unrecognized name. Эти записи помогут подтвердить диагноз.
Исправление ошибки в nginx
Если вы используете nginx, первым делом проверьте конфигурацию серверного блока. Убедитесь, что для каждого домена, который должен обслуживаться по HTTPS, существует отдельный блок server с директивой server_name.
Пример корректной конфигурации:
server {
listen 443 ssl http2;
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;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
ssl_stapling on;
ssl_stapling_verify on;
}После изменения конфигурации выполните проверку синтаксиса и перезагрузите сервер:
nginx -t
systemctl reload nginxЕсли сайт должен быть доступен и по www, и без www, обязательно укажите оба имени в server_name. Также проверьте, что сертификат покрывает все варианты домена (в поле SAN).
Исправление ошибки в Apache
В Apache ошибка обычно связана с отсутствием или неправильной настройкой VirtualHost. Убедитесь, что для домена создан блок с портом 443 и указан корректный ServerName.
Пример:
ServerName example.com
ServerAlias www.example.com
SSLEngine on
SSLCertificateFile /path/to/cert.pem
SSLCertificateKeyFile /path/to/key.pem
SSLCertificateChainFile /path/to/chain.pem
После изменений перезапустите Apache:
systemctl restart apache2Также проверьте, что модуль SSL включён и конфигурация не содержит синтаксических ошибок. Если вы используете .htaccess для редиректа на HTTPS, убедитесь, что правила не конфликтуют с SSL-настройками.
Дополнительные шаги: HTTPS-редирект, CDN и хостинг
Даже если сертификат установлен корректно, сайт может не загружаться по HTTPS, если не настроен редирект с HTTP. Браузеры по умолчанию пытаются подключиться по HTTP, и только после редиректа переходят на HTTPS. Если редирект отсутствует, пользователь может увидеть ошибку.
Настройка редиректа в nginx:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}В Apache через .htaccess:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]При использовании CDN (например, Cloudflare) проверьте настройки SSL-режима. Если выбран режим Full (strict), необходимо установить origin-сертификат на backend-сервере. В противном случае CDN будет передавать запросы на сервер, который не распознает домен, что вызовет ошибку.
Если вы на shared-хостинге, обратитесь в службу поддержки провайдера. Они должны добавить домен в конфигурацию сервера и убедиться, что SSL-сертификат привязан к правильному виртуальному хосту. Опишите шаги, которые вы уже предприняли, чтобы ускорить решение.
Что делать посетителю сайта
Если вы столкнулись с ошибкой ERR_SSL_UNRECOGNIZED_NAME_ALERT при посещении сайта, вы мало что можете сделать напрямую, поскольку проблема на стороне сервера. Однако есть несколько действий, которые стоит попробовать.
- Обновите страницу. Иногда ошибка бывает временной, вызванной сбоем сети или кэшированием.
- Очистите кэш браузера и куки. Устаревшие данные могут конфликтовать с актуальными настройками сервера.
- Попробуйте другой браузер. Как упоминалось, Chrome относится к предупреждению unrecognized_name как к фатальной ошибке, в то время как Firefox или Safari могут игнорировать его.
- Проверьте доступность сайта через онлайн-инструменты. Если сайт открывается через прокси или SSL-чекер, значит, проблема локальная.
Если ошибка не исчезает, свяжитесь с владельцем сайта или администратором и сообщите о проблеме. Они смогут проверить конфигурацию сервера и устранить неполадку.
Профилактика и лучшие практики
Чтобы избежать ошибки ERR_SSL_UNRECOGNIZED_NAME_ALERT в будущем, следуйте нескольким рекомендациям.
- Используйте доверенные центры сертификации. Сертификаты от Let's Encrypt, Sectigo, DigiCert и других известных CA автоматически доверяются браузерами. Избегайте самоподписанных сертификатов в production-среде.
- Настройте автопродление. Сертификаты Let's Encrypt действуют 90 дней. Настройте cron-задачу для автоматического обновления, чтобы не пропустить истечение срока.
- Проверяйте цепочку сертификатов. После установки убедитесь, что промежуточные сертификаты загружены корректно. Неполная цепочка может вызвать ошибки у некоторых клиентов.
- Включите HSTS. Заголовок Strict-Transport-Security заставляет браузер всегда использовать HTTPS, что снижает риск атак и ошибок.
- Мониторьте SSL-сертификаты. Используйте онлайн-сервисы для регулярной проверки срока действия и конфигурации. Настройте уведомления за 30, 14 и 7 дней до истечения.
- Документируйте конфигурацию. Ведите записи о том, какие домены и сертификаты настроены на каждом сервере. Это упростит диагностику при возникновении проблем.
Часто задаваемые вопросы
В этом разделе собраны ответы на распространённые вопросы, связанные с ошибкой ERR_SSL_UNRECOGNIZED_NAME_ALERT.
Может ли ошибка быть вызвана проблемами на стороне клиента?
Обычно нет. Ошибка возникает из-за несоответствия SNI и конфигурации сервера. Однако устаревший кэш браузера или расширения могут усугубить ситуацию, но не являются первопричиной.
Что делать, если ошибка появляется только в Chrome?
Это нормально, поскольку Chrome трактует предупреждение unrecognized_name как фатальное. Другие браузеры могут игнорировать его. Всё равно необходимо исправить конфигурацию сервера.
Как проверить, что сертификат действителен?
Используйте онлайн-инструменты, такие как Qualys SSL Server Test, или команду openssl s_client. Они покажут срок действия, цепочку доверия и покрываемые домены.
Нужно ли переустанавливать сертификат, если ошибка появилась после смены хостинга?
Возможно, но сначала проверьте DNS и конфигурацию сервера. Чаще всего проблема в том, что домен не добавлен в виртуальный хост на новом сервере.
Может ли ошибка быть связана с истекшим сертификатом?
Нет, истекший сертификат вызывает другие ошибки, например NET::ERR_CERT_DATE_INVALID. ERR_SSL_UNRECOGNIZED_NAME_ALERT указывает на проблему с именем домена, а не со сроком действия.
Как быстро исправить ошибку на shared-хостинге?
Обратитесь в поддержку хостинг-провайдера. Они добавят домен в конфигурацию и привяжут SSL-сертификат. Обычно это занимает от нескольких минут до нескольких часов.
Влияет ли ошибка на SEO?
Да, поскольку сайт становится недоступным для пользователей и поисковых роботов. Это может привести к падению позиций в поисковой выдаче, поэтому важно устранить проблему как можно скорее.
Вопросы и ответы
Что такое SNI и зачем он нужен?
SNI (Server Name Indication) — это расширение протокола TLS, которое позволяет одному IP-адресу обслуживать несколько HTTPS-сайтов с разными SSL-сертификатами. Клиент передаёт имя домена до завершения рукопожатия, и сервер выбирает соответствующий виртуальный хост. Без SNI на одном IP можно было бы разместить только один сайт с одним сертификатом.
Почему ошибка ERR_SSL_UNRECOGNIZED_NAME_ALERT появляется только в Chrome?
По RFC 6066 предупреждение unrecognized_name является warning, и некоторые браузеры могут его игнорировать. Chrome же трактует его как фатальную ошибку и блокирует соединение. Поэтому ошибка чаще всего видна именно в Chrome, хотя проблема существует на сервере.
Как проверить, что сервер возвращает правильный сертификат?
Используйте команду openssl s_client -connect example.com:443 -servername example.com. В выводе вы увидите сертификат, который сервер отправляет для указанного домена. Если в выводе есть alert unrecognized_name, значит, сервер не распознал имя. Также можно воспользоваться онлайн-инструментами, например Qualys SSL Server Test.
Может ли ошибка быть вызвана проблемами с DNS?
Да, если A-запись домена указывает на IP-адрес, где домен не настроен, сервер не сможет обработать SNI-запрос. Проверьте, что DNS-записи соответствуют вашему серверу, и что на этом IP настроен виртуальный хост для вашего домена.
Что делать, если ошибка не исчезает после исправления конфигурации?
Если вы проверили сертификат, конфигурацию nginx/Apache, DNS и редиректы, но ошибка остаётся, обратитесь к хостинг-провайдеру. Возможно, проблема на уровне инфраструктуры, например, в настройках CDN или балансировщика. Опишите все предпринятые шаги, чтобы ускорить диагностику.
Влияет ли ошибка на безопасность сайта?
Ошибка не означает, что сайт взломан, но она делает сайт недоступным, что может подорвать доверие пользователей. Кроме того, отсутствие корректной SSL-конфигурации делает данные уязвимыми для перехвата, если пользователь всё же попытается подключиться по HTTP.
Как настроить автопродление SSL-сертификата Let's Encrypt?
Используйте certbot с cron-задачей. Например, добавьте в crontab строку: 0 0 * certbot renew --quiet. Это будет проверять срок действия сертификата ежедневно и продлевать его за 30 дней до истечения. Убедитесь, что веб-сервер перезагружается после обновления.