Сообщение об ошибке
net::ERR_CERT_COMMON_NAME_INVALID
На странице предупреждения отображается «NET::ERR_CERT_COMMON_NAME_INVALID»; инструменты автоматизации выводят «net::ERR_CERT_COMMON_NAME_INVALID».
Chrome, Edge and other Chromium browsers — the certificate does not cover the host name in the address bar
Что это означает
Сертификат доверенный и срок его действия не истёк, но имени хоста из адресной строки нет среди его альтернативных имён субъекта (SAN). Вопреки названию ошибки, начиная с Chrome 58 браузер вообще не использует общее имя (CN): хост должен быть указан в subjectAltName. Типичные случаи: www и домен без www, новый поддомен или wildcard, применённый на уровень глубже, чем он покрывает.
Почему это происходит
Этого хоста нет в сертификате
частоПоддомен или псевдоним добавили в DNS, но сертификат не перевыпустили.
Wildcard применён к двум уровням
часто*.example.com покрывает shop.example.com, но не eu.shop.example.com (как у wrong.host.badssl.com в воспроизведении).
www и домен без www
частоСертификат для www.example.com не покрывает example.com, и наоборот; в нём должны быть указаны оба имени.
Имя указано только в поле общего имени (CN)
иногдаСертификаты без subjectAltName (у старых внутренних инструментов) не проходят проверку в Chrome, даже если CN совпадает.
Как исправить
- 1.
Сравните список SAN с адресом
Недостающее имя и нужно добавить.
bash echo | openssl s_client -connect www.example.com:443 -servername www.example.com 2>/dev/null \ | openssl x509 -noout -ext subjectAltName - 2.
Перевыпустите сертификат со всеми обслуживаемыми именами
Включите домен без www, вариант с www и все поддомены (или отдельный wildcard для каждого уровня).
bash # Cover the apex and www (and any subdomain you serve) sudo certbot certonly --nginx -d example.com -d www.example.com - 3.
Проверьте, какой сертификат получает каждое имя
На общих серверах имя без собственного блока server получает сертификат по умолчанию от другого сайта.
text # nginx: every served name needs a server block with a matching certificate 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; }