Промежуточный сертификат — это звено цепочки между вашим серверным (листовым) сертификатом и корневым сертификатом удостоверяющего центра. Если он просрочен, браузеры и клиенты перестают доверять всей цепочке, даже если сам серверный сертификат ещё действует. Проверить срок действия промежуточного сертификата в файле можно за одну команду OpenSSL или через любой просмотрщик сертификатов — главное знать, какой именно файл открывать и на какое поле смотреть.
Главный ориентир: у каждого сертификата есть поля Not Before (начало действия) и Not After (окончание действия). Промежуточный сертификат считается действующим, если текущая дата попадает в этот интервал, а также если он не отозван и выпущен доверенным корнем. Ниже разобраны способы проверки, типичные ошибки при чтении файлов и порядок действий после обнаружения истёкшего звена.
- Почему важно проверять именно промежуточные сертификаты
- Типичные последствия истёкшего промежуточного сертификата
- Что понадобится для проверки
- Способ 1. Проверка через OpenSSL
- Способ 2. Проверка через графические средства
- Windows
- macOS
- Браузер
- Как отличить промежуточный сертификат от других
- Частые ошибки при проверке
- Если промежуточный сертификат действительно просрочен
- Промежуточный сертификат вашего удостоверяющего центра
- Промежуточный сертификат чужого сервиса
- Как избежать повторения проблемы
- Краткий алгоритм проверки
Почему важно проверять именно промежуточные сертификаты
Цепочка доверия строится так: корневой сертификат хранится в доверенном хранилище операционной системы или браузера, промежуточные сертификаты выдаёт удостоверяющий центр, а листовой сертификат получает ваш домен. Сервер обязан отдавать клиенту не только листовой сертификат, но и всю промежуточную часть цепочки.
Промежуточные сертификаты живут дольше листовых, но тоже имеют конечный срок. Когда один из них истекает, возникает характерная ситуация: основной сертификат «ещё не истёк», но сайты и сервисы начинают выдавать ошибки вида «недействительный сертификат», «цепочка не может быть проверена» или «истёкший сертификат». При этом ошибка часто указывает на листовой сертификат, хотя реальная причина — в промежуточном звене.
Типичные последствия истёкшего промежуточного сертификата
- Браузеры показывают предупреждение безопасности при открытии сайта, и часть посетителей уходит, не дождавшись объяснений.
- Мобильные приложения и API-клиенты с проверкой цепочки отклоняют соединения, даже если десктопный браузер по каким-то причинам ещё принимает сайт.
- Почтовые клиенты, интеграции и автоматические обмены данными падают с ошибками TLS-рукопожатия.
- Системы мониторинга фиксируют недоступность сервиса, хотя сам сервер работает нормально.
Что понадобится для проверки
Для проверки файла с сертификатом достаточно одного из инструментов:
- OpenSSL — консольная утилита, доступна в Linux, macOS, Windows (через WSL, Git Bash или отдельную сборку). Самый универсальный способ.
- Windows — двойной щелчок по файлу .crt/.cer открывает системный просмотрщик сертификатов.
- macOS — приложение «Связка ключей» (Keychain Access) после импорта файла.
- Онлайн-анализаторы — удобны, но загружать туда приватные данные нельзя. Файл сертификата публичен по своей природе, однако если вы не уверены в содержимом файла, безопаснее использовать локальные инструменты.
Способ 1. Проверка через OpenSSL
Это основной метод, который работает одинаково на всех платформах. Команда выводит содержимое сертификата в читаемом виде:
- Откройте терминал и перейдите в каталог с файлом сертификата.
- Выполните команду openssl x509 -in имя_файла.pem -noout -dates -subject -issuer. Для файлов в формате DER добавьте параметр -inform der.
- Найдите в выводе строки notBefore и notAfter — это границы срока действия.
- Сравните дату notAfter с текущей датой. Если она в прошлом, сертификат просрочен.
Полезные варианты команды:
- openssl x509 -in cert.pem -noout -text — полный разбор: срок, издатель, назначение, серийный номер.
- openssl x509 -in cert.pem -noout -checkend 86400 — проверка, истечёт ли сертификат в течение суток (число задаётся в секундах). Вывод «Certificate will expire» означает скорое истечение.
- openssl crl2pkcs7 -nocrl -certfile bundle.pem | openssl pkcs7 -print_certs -noout — если в одном файле лежит несколько сертификатов (бандл), эта команда выведет их все сразу.
Если файл содержит связку сертификатов, простая команда x509 покажет только первый из них. Обязательно убедитесь, что вы проверили каждый сертификат в бандле — просроченным может оказаться второй или третий элемент цепочки, а не первый.
Способ 2. Проверка через графические средства
Windows
Откройте файл двойным щелчком (подходят форматы .cer, .crt). В окне просмотра перейдите на вкладку «Общие» или «Состав» и найдите поля «Действителен с» и «Действителен по». Там же видно поле «Кем выдан» — по нему можно понять, промежуточный это сертификат или корневой/листовой.
macOS
Импортируйте файл в «Связку ключей» двойным щелчком, затем найдите сертификат в списке и откройте его. Сроки указаны прямо в карточке сертификата.
Браузер
Если нужно проверить цепочку на работающем сайте, а не в файле: откройте сайт, нажмите на значок замка, перейдите к сведениям о сертификате и просмотрите путь сертификации. Каждый узел пути можно открыть и посмотреть его срок действия. Так удобно находить, какое именно звено цепочки истекло.
Как отличить промежуточный сертификат от других
Чтобы не проверить не тот файл, ориентируйтесь на три признака:
- Поле Subject и Issuer различаются. У корневого сертификата они совпадают (он подписан сам собой). У промежуточного Subject — имя удостоверяющего центра, а Issuer — вышестоящий центр или корень.
- Расширение Basic Constraints. У промежуточных сертификатов оно обычно содержит значение CA:TRUE, то есть сертификат предназначен для выпуска других сертификатов.
- Позиция в цепочке. Листовой сертификат содержит доменное имя в поле Subject (или SAN), корневой совпадает сам с собой, всё посередине — промежуточные.
Частые ошибки при проверке
- Проверяется только первый сертификат в бандле. Файлы fullchain или ca-bundle содержат несколько сертификатов подряд, и просроченным нередко оказывается последний.
- Перепутан формат файла. PEM — текстовый файл с блоками BEGIN CERTIFICATE, DER — бинарный. Если OpenSSL выдаёт ошибку «unable to load certificate», попробуйте добавить -inform der.
- На сервере лежит старая копия цепочки. Вы обновили листовой сертификат, но промежуточный файл остался прежним. Проверяйте именно тот файл, который реально указан в конфигурации веб-сервера.
- Игнорируется часовой пояс. Даты в сертификате указаны в UTC (суффикс Z). Если текущее время близко к границе срока, учитывайте смещение вашего часового пояса.
- Проверка только срока без проверки отзыва. Действующий по датам сертификат может быть отозван. Для полной уверенности нужна проверка по CRL или OCSP, но для первичной диагностики срока достаточно полей notBefore/notAfter.
Если промежуточный сертификат действительно просрочен
Порядок действий зависит от того, чей это сертификат.
Промежуточный сертификат вашего удостоверяющего центра
- Зайдите в личный кабинет удостоверяющего центра, где выпускался листовой сертификат, и скачайте актуальную версию промежуточной цепочки.
- Замените файл цепочки на сервере (в nginx это директива ssl_trusted_certificate или объединённый fullchain-файл, в Apache — SSLCertificateChainFile либо тот же fullchain).
- Перезапустите веб-сервер и проверьте цепочку заново, например командой openssl s_client -connect вашдомен:443 -servername вашдомен — в выводе должна появиться полная цепочка без ошибок Verify return code.
Обратите внимание: сами удостоверяющие центры периодически перевыпускают свои промежуточные сертификаты задолго до истечения. Если вы давно не обновляли файл цепочки, имеет смысл скачать свежую версию, даже если текущая ещё формально действует.
Промежуточный сертификат чужого сервиса
Если проблема обнаружена при подключении к внешнему API или сайту, исправить её можете только владельцы этого сервиса. Сообщите им об ошибке, приложив вывод проверки. На своей стороне временным решением иногда становится отключение строгой проверки цепочки, но делать это допустимо только осознанно и ненадолго: такая настройка ослабляет защиту от подмены сервера.
Как избежать повторения проблемы
- Настройте мониторинг срока действия всех сертификатов в цепочке, а не только листового. Многие системы мониторинга умеют проверять удалённо отдаваемую цепочку целиком.
- Храните актуальные файлы цепочек вместе с конфигурацией и обновляйте их при каждом перевыпуске.
- При обновлении сертификата всегда проверяйте результат извне — тем же openssl s_client или онлайн-проверкой цепочки, чтобы увидеть то, что видит клиент.
- Учитывайте, что у разных удостоверяющих центров промежуточные сертификаты могут меняться независимо от ваших перевыпусков: подпишитесь на уведомления своего центра, если они есть.
Краткий алгоритм проверки
- Определите формат файла: PEM (текстовый) или DER (бинарный).
- Выполните openssl x509 -in файл -noout -dates -subject -issuer (для DER добавьте -inform der).
- Если в файле бандл — разберите все сертификаты командой через crl2pkcs7.
- Сравните notAfter с текущей датой в UTC.
- Убедитесь по полям Subject/Issuer, что проверяли именно промежуточное звено.
- При истечении скачайте актуальную цепочку у удостоверяющего центра, замените файл на сервере и перепроверьте соединение.
Проверка занимает пару минут, а предотвращает простои сайта, падения интеграций и потерю доверия посетителей. Если вы отвечаете за инфраструктуру, разумно включить контроль сроков всех элементов цепочки в регулярный мониторинг — тогда истечение промежуточного сертификата перестанет быть сюрпризом.
