Проверка SSL-сертификата сайта: онлайн, в браузере и через openssl
Проверка SSL-сертификата показывает, доверяют ли браузеры вашему https: не истёк ли срок, совпадает ли имя с доменом, полная ли цепочка и кем выдан сертификат. Быстрее всего проверить SSL онлайн — ввести домен в проверку SSL-сертификата: результат будет через несколько секунд. Без рабочего сертификата браузер помечает сайт небезопасным, и часть посетителей уходит, не дождавшись загрузки.
Как проверить SSL-сертификат онлайн: пошагово
- Откройте проверку SSL-сертификата и введите домен:
example.com. Можно вставить и полный адрес — инструмент сам выделит имя хоста. Нестандартный порт указывается через двоеточие:example.com:8443. - Инструмент подключается к серверу так же строго, как браузер: проверяет цепочку доверия и совпадение имени. Если строгая проверка не прошла, он подключается повторно без неё — чтобы всё равно показать сертификат и объяснить, что именно не так.
- Посмотрите на верхний баннер: сколько дней осталось до окончания срока. Меньше 30 дней — жёлтое предупреждение; красный баннер означает, что браузеры сертификату не доверяют, а причины перечислены ниже: истёк срок, сертификат выдан на другое имя, он самоподписанный или цепочка не проверяется. Под списком выводится и ответ OpenSSL при строгой проверке.
- Проверьте карточки с деталями: Common Name, издатель, даты «действителен с» и «действителен до», тип и длина ключа (RSA короче 2048 бит помечается как слабый), алгоритм подписи и список альтернативных имён (SAN) — в нём должны быть все варианты домена, включая www.
- Повторите проверку для
www.example.comи для поддоменов: у каждого имени может быть свой сертификат, и ошибка часто живёт именно там, куда не заходили.
Ограничения честно: это разовая проверка одного имени. Она не перебирает версии TLS и шифры, которые принимает сервер, не ищет смешанное содержимое на страницах и не следит за сроком сама. Версии протоколов проверяются командой openssl из раздела ниже или сканером Shield.
Как посмотреть сертификат в браузере
- Chrome, Edge и другие браузеры на Chromium: нажмите значок слева от адреса, затем «Подключение защищено» → «Сертификат действителен». Откроется окно с полями «Кому выдан», «Кем выдан», сроком действия и вкладкой с цепочкой.
- Firefox: замок → «Соединение защищено» → «Подробнее» → «Просмотреть сертификат».
- Safari: замок в адресной строке → «Показать сертификат».
Браузер удобен, чтобы быстро увидеть срок и издателя, но не годится как окончательная проверка: он кэширует промежуточные сертификаты и может «достроить» неполную цепочку, которую робот или мобильное приложение не примут.
Проверка SSL через командную строку (openssl)
Утилита openssl есть в macOS и Linux, в Windows — например, в составе Git for Windows. Базовая команда подключается к серверу и печатает цепочку и результат проверки:
openssl s_client -connect example.com:443 -servername example.com </dev/null
Параметр -servername передаёт имя сайта (SNI). Без него сервер, на котором живёт несколько сайтов, может отдать сертификат другого домена, и вы будете чинить несуществующую ошибку. В выводе ищите строку Verify return code: 0 (ok) — цепочка в порядке; 21 (unable to verify the first certificate) — обычно сервер не отдаёт промежуточный сертификат; 10 (certificate has expired) — истёк срок; 18 (self-signed certificate) — самоподписанный.
Даты, владельца и издателя удобно вытащить одной строкой:
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -dates -subject -issuer
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -ext subjectAltName
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -checkend 1209600
notBefore и notAfter — начало и конец срока, -ext subjectAltName выводит список имён (OpenSSL 1.1.1 и новее), а -checkend 1209600 отвечает, истечёт ли сертификат в ближайшие 14 дней (1 209 600 секунд) — эту строку удобно ставить в cron для мониторинга.
Принимает ли сервер устаревший протокол, покажет попытка подключиться только по нему: openssl s_client -connect example.com:443 -servername example.com -tls1_1 </dev/null. Если рукопожатие прошло — TLS 1.1 на сервере включён. Оговорка: в свежих сборках OpenSSL старые версии могут быть запрещены на стороне клиента, и тогда ошибка ничего не говорит о сервере. Для TLS 1.2 и 1.3 используйте -tls1_2 и -tls1_3.
Что смотреть в отчёте
| Параметр | Что должно быть |
|---|---|
| Срок действия | Больше двух недель в запасе; бесплатные сертификаты живут около трёх месяцев и обновляются автоматически |
| Имя в сертификате | Совпадает с доменом, включая вариант с www |
| Цепочка доверия | Полная: без промежуточного сертификата часть клиентов выдаст ошибку |
| Протоколы | TLS 1.2 и 1.3; устаревшие версии лучше отключить |
| Издатель | Известный центр сертификации, а не самоподписанный сертификат |
Что делать при ошибках
- Истёк срок. Обновите сертификат и проверьте, что автопродление действительно работает.
- Не совпадает имя. Добавьте нужные домены в сертификат или настройте отдельный.
- Неполная цепочка. Догрузите промежуточный сертификат на сервер.
- Смешанное содержимое. Замените ссылки на картинки, стили и скрипты с http на https, иначе браузер ругается даже при валидном сертификате.
Ошибки SSL: как выглядят и как исправить
| Ошибка | Как проявляется | Что сделать |
|---|---|---|
| Истёк срок | Chrome: NET::ERR_CERT_DATE_INVALID; openssl: certificate has expired | Перевыпустите сертификат и проверьте автопродление. Частый случай: новый файл уже на диске, но веб-сервер не перезагрузили, и он отдаёт старый. |
| Имя не совпадает | NET::ERR_CERT_COMMON_NAME_INVALID | Выпустите сертификат со всеми нужными именами в SAN — например, example.com и www.example.com. Wildcard *.example.com покрывает один уровень поддоменов, но не сам example.com и не a.b.example.com. |
| Неполная цепочка | В одних браузерах открывается, в других — NET::ERR_CERT_AUTHORITY_INVALID; openssl: unable to verify the first certificate | Установите полную цепочку: сертификат сайта плюс промежуточные. Для Let's Encrypt в nginx указывают fullchain.pem, а не cert.pem. |
| Самоподписанный сертификат | NET::ERR_CERT_AUTHORITY_INVALID; openssl: self-signed certificate | Замените на сертификат доверенного центра. Бесплатный вариант — Let's Encrypt или сертификат, который выпускает хостинг или CDN. |
| Только устаревший TLS | Обычно ERR_SSL_VERSION_OR_CIPHER_MISMATCH | Включите TLS 1.2 и 1.3, отключите SSL 3.0, TLS 1.0 и 1.1, обновите веб-сервер и библиотеку OpenSSL. |
| Неверное время | Ошибка срока у сертификата, который на самом деле действителен | Проверьте часы на устройстве пользователя или на сервере: сертификат сверяется с текущей датой. |
Сроки действия SSL-сертификатов
Максимальный срок публичных TLS-сертификатов задают правила CA/Browser Forum — объединения центров сертификации и разработчиков браузеров. Долгое время потолок составлял 398 дней. В апреле 2025 года форум принял бюллетень SC-081 о поэтапном сокращении, и первый шаг уже действует:
| Дата выпуска сертификата | Максимальный срок |
|---|---|
| с 15 марта 2026 года | 200 дней |
| с 15 марта 2027 года | 100 дней |
| с 15 марта 2029 года | 47 дней |
Ограничение применяется по дате выпуска: уже выданный сертификат дорабатывает свой срок. Подробности — в бюллетене SC-081 на сайте CA/Browser Forum. Бесплатные сертификаты Let's Encrypt и так короткие: по FAQ Let's Encrypt они действуют 90 дней (по желанию — 6 дней), а продлевать 90-дневные рекомендуется каждые 60 дней. Вывод простой: ручное продление раз в год уходит в прошлое, продлевать должен автомат.
Автопродление Let's Encrypt: как убедиться, что оно работает
sudo certbot certificates
sudo certbot renew --dry-run
systemctl list-timers | grep certbot
certbot certificatesпокажет все сертификаты на сервере и дату окончания каждого.certbot renew --dry-runпроиграет продление на тестовом сервере Let's Encrypt, не трогая боевые сертификаты. Если тест падает, настоящее продление тоже упадёт.- Продление запускает таймер systemd или задача cron; при установке certbot из snap таймер называется
snap.certbot.renew.timer. Нет ни того, ни другого — автопродления нет. - Чтобы веб-сервер подхватил новый сертификат, добавьте перезагрузку после продления:
--deploy-hook "systemctl reload nginx". - Типичные причины сбоя: путь
/.well-known/acme-challenge/закрыт редиректом, паролем или правилом файрвола; домен переехал на другой сервер или CDN, а certbot остался на старом.
Если сертификат выпускает хостинг или CDN, продление обычно на их стороне — но только пока домен указывает на них. После смены DNS проверьте сертификат заново.
Мониторинг сертификата
- Оповещение заранее. Внешний мониторинг или скрипт с
openssl x509 -checkendпо cron: пусть сигнал приходит минимум за две недели до окончания срока. - Повторная проверка после продления. Прогоните домен через проверку SSL: новый срок, полная цепочка, все имена в SAN.
- Журналы Certificate Transparency. Все публичные сертификаты попадают в открытые журналы; поиск по домену (например, на crt.sh) показывает, какие сертификаты на него выпускались, — так видно и забытые поддомены, и неожиданные выпуски.
- Регулярный аудит. Shield — платная проверка безопасности (разово с баланса или по подписке на мониторинг); в группе «TLS и сертификат» он смотрит срок и валидность сертификата, устаревшие TLS 1.0/1.1, редирект с HTTP на HTTPS и HSTS.
Бесплатный или платный сертификат
Для поиска разницы нет: браузер и робот проверяют валидность, а не цену. Бесплатные сертификаты выпускаются автоматически и обновляются сами — этого достаточно подавляющему большинству сайтов. Платные имеют смысл там, где нужны расширенная проверка организации, страховка или поддержка редких сценариев. Главное — чтобы автопродление действительно работало: просроченный дорогой сертификат хуже вовремя обновлённого бесплатного.
Как это связано с продвижением
Https — базовое требование: сайт без него теряет доверие и посетителей. Кроме того, ошибка сертификата мешает нашим проверкам: страница может оказаться недоступной для обхода. Полную картину безопасности даёт Shield, а заголовки защиты разобраны в статье о заголовках безопасности.