bg-blog-articles

Как проверить сертификат с помощью OpenSSL

Если вы управляете веб-сайтом или сервером, регулярная проверка SSL/TLS-сертификата — одна из тех задач, которую нельзя пропускать. Просроченный или неправильно настроенный сертификат означает предупреждения браузера, потерю доверия и потенциальный простой.

How to Check a Certificate With OpenSSL

OpenSSL — набор инструментов командной строки с открытым исходным кодом, используемый практически в каждом дистрибутиве Linux, в системах macOS и доступный для Windows, — предоставляет прямой, неотфильтрованный доступ к деталям сертификата. Без браузера. Без сторонних инструментов. Только терминал и несколько коротких команд.

Это руководство охватывает команды OpenSSL, которые вы будете использовать чаще всего: просмотр деталей сертификата, проверку сроков действия, изучение удаленных серверов, проверку цепочки сертификатов и подтверждение того, что ваш приватный ключ соответствует вашему сертификату. Каждая команда готова к копированию и вставке с четким разбором того, что она делает.

Предпочитаете работать в браузере? SSL Checker возвращает те же данные о сертификате: цепочку, срок действия, наборы шифров и рейтинг безопасности — всего лишь по имени домена, без необходимости в терминале, или вы можете прочитать сертификат самостоятельно в Chrome, Firefox, Safari или Edge. Это руководство охватывает все, что вы предпочли бы делать из командной строки.


Содержание

  1. Предварительные требования: проверьте версию OpenSSL
  2. Просмотр полных деталей сертификата с помощью openssl x509
  3. Проверка сертификата удаленного сервера с помощью openssl s_client
  4. Проверка сроков действия сертификата
  5. Проверка цепочки сертификатов с помощью openssl verify
  6. Подтверждение соответствия приватного ключа сертификату
  7. Конвертация между форматами сертификатов
  8. Устранение распространенных ошибок сертификата
  9. Держите свои сертификаты под контролем

Сэкономьте 10% на SSL-сертификатах, сделав заказ в SSL Dragon сегодня!

Быстрая выдача, надежное шифрование, 99,99% доверия к браузерам, специализированная поддержка и 25-дневная гарантия возврата денег. Код купона: SAVE10

Детальное изображение дракона в полете

Предварительные требования: проверьте версию OpenSSL

Прежде чем выполнять какие-либо команды, убедитесь, что OpenSSL установлен, и проверьте, какую версию вы используете. Ваша версия определяет, какие протоколы и алгоритмы доступны.

openssl version –a

Эта команда выводит номер версии, дату выпуска и каталог сертификатов по умолчанию (OPENSSLDIR). Большинство систем Linux поставляются с предустановленным OpenSSL. На macOS он поставляется с LibreSSL (форк OpenSSL), который обрабатывает те же команды.

Если вы используете Windows, вы можете получить доступ к OpenSSL через WSL (Windows Subsystem for Linux), Git Bash или отдельную сборку для Windows.

Совет: Убедитесь, что вы используете как минимум OpenSSL 1.1.1 или более позднюю версию. Более старые версии не поддерживают TLS 1.2 и TLS 1.3, которые требуются современными серверами и браузерами.


Просмотр полных деталей сертификата с помощью openssl x509

Команда openssl x509 — это рабочая лошадка для проверки сертификатов. Она считывает X.509-сертификаты, стандартный формат, используемый всеми SSL/TLS-сертификатами, и выводит детали в удобочитаемом виде.

Чтобы просмотреть полные детали локально хранящегося файла сертификата:

openssl x509 -in certificate.crt -text -noout

Вот что делает каждый флаг:

  • -in certificate.crt — Указывает входной файл сертификата. Замените на реальное имя вашего файла (например, yourdomain.crt или server.pem).
  • -text — Выводит сертификат в читаемом текстовом формате вместо необработанных закодированных данных.
  • -noout — Предотвращает вывод OpenSSL закодированного в Base64 блока PEM вместе с текстовым выводом.

Эта команда раскрывает всё о сертификате:

  • Расширения — Включая альтернативные имена субъекта (SAN), использование ключа и доступ к информации об удостоверяющем центре.
  • Издатель — Удостоверяющий центр (CA), который его подписал (например, DigiCert, Let’s Encrypt, Sectigo).
  • Субъект — Домен или организация, для которых был выдан сертификат.
  • Срок действия — Даты «Not Before» и «Not After», показывающие, когда сертификат активен.
  • Алгоритм и размер открытого ключа — Обычно RSA 2048-bit или ECDSA P-256.
  • Алгоритм подписи — Обычно sha256WithRSAEncryption для современных сертификатов.

Проверка только издателя или субъекта

Если вам не нужен полный вывод, вы можете извлечь конкретные поля:

openssl x509 -in certificate.crt -noout -issuer
openssl x509 -in certificate.crt -noout -subject

Эти однострочные команды особенно полезны, когда вы пишете скрипты или просто нуждаетесь в быстром подтверждении.

Примечание: По умолчанию OpenSSL ожидает формат PEM — это текстовые файлы, начинающиеся с ——BEGIN CERTIFICATE——. Если ваш сертификат в формате DER (двоичный), добавьте флаг -inform der:

openssl x509 -in certificate.der -inform der -text -noout

Проверка сертификата удаленного сервера с помощью openssl s_client

У вас не всегда есть файл сертификата на локальной машине. Часто вам нужно проверить сертификат, установленный на действующем сервере. Здесь на помощь приходит openssl s_client.

openssl s_client -connect yourdomain.com:443 -servername yourdomain.com

Эта команда открывает TLS-соединение с сервером на порту 443 (порту HTTPS по умолчанию) и отображает цепочку сертификатов, версию протокола, набор шифров и данные сессии.

Флаг -servername включает Server Name Indication (SNI), что необходимо, когда сервер размещает несколько доменов на одном IP-адресе. Без него вы можете получить неверный сертификат.

Нажмите CTRL+C, чтобы закрыть соединение после просмотра вывода.

Нет терминала под рукой или хотите более быструю проверку? Наш SSL Checker позволяет проверить сертификат без OpenSSL. Вставьте домен и получите цепочку, срок действия и данные шифра прямо в браузере.

Используйте pipe для более чистого вывода

Необработанный вывод s_client многословен. Чтобы извлечь только детали сертификата, передайте его в openssl x509:

echo | openssl s_client -servername yourdomain.com -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -text

echo | в начале отправляет пустой ввод, чтобы соединение закрылось автоматически. 2>/dev/null подавляет сообщения об ошибках, давая вам чистый вывод.

Вы также можете сузить вывод до конкретных полей:

echo | openssl s_client -servername yourdomain.com -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -issuer -subject -dates

Эта однострочная команда — практический фаворит у системных администраторов. Она показывает издателя, субъекта и даты действия за один проход.

Сохранение сертификата локально

Если вы хотите сохранить удаленный сертификат в файл для дальнейшего анализа:

echo | openssl s_client -servername yourdomain.com -connect yourdomain.com:443 2>/dev/null | openssl x509 > yourdomain.pem

Теперь вы можете выполнять любую команду openssl x509 с сохраненным файлом.


Проверка сроков действия сертификата

Просроченные сертификаты — одна из самых распространенных причин ошибок SSL. OpenSSL предоставляет несколько способов проверить срок действия.

Быстрая проверка даты

openssl x509 -in certificate.crt -noout -dates

Эта команда выводит и «Not Before» (дата начала), и «Not After» (дата окончания). Если вам нужен только срок истечения:

openssl x509 -in certificate.crt -noout -enddate

Для удаленных серверов

Объедините s_client и x509, чтобы проверить срок действия сертификата действующего сервера:

echo | openssl s_client -servername yourdomain.com -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -enddate

Автоматизация оповещений о сроке действия с помощью -checkend

Флаг -checkend — это то, что упускают большинство руководств, но он невероятно полезен для автоматизации. Он проверяет, истечет ли срок действия сертификата в течение указанного количества секунд, и возвращает код выхода:

openssl x509 -in certificate.crt -noout -checkend 2592000

Значение 2592000 равно 30 дням в секундах. Если срок действия сертификата истекает в течение 30 дней, команда возвращает ненулевой код выхода и выводит предупреждение. Если сертификат все еще действителен за пределами этого окна, она возвращает ноль.

Это позволяет легко интегрировать её в cron-задания, скрипты мониторинга или конвейеры CI/CD:

if ! openssl x509 -in certificate.crt -noout -checkend 2592000 > /dev/null 2>&1; then
    echo "WARNING: Certificate expires within 30 days!"
fi

Почему это важно: С переходом форума CA/Browser к сроку действия сертификатов в 47 дней к 2029 году, автоматизированный мониторинг истечения срока действия больше не является опциональным — это необходимость. Внедрение таких проверок в вашу инфраструктуру сейчас избавит вас от простоев позже.


Проверка цепочки сертификатов с помощью openssl verify

Сертификат не работает изолированно. Браузеры и клиенты проверяют всю цепочку сертификатов — последовательность, которая начинается с сертификата вашего сервера, проходит через один или несколько промежуточных сертификатов CA и заканчивается доверенным корневым сертификатом CA.

Если цепочка нарушена или неполна, посетители видят ошибку «не доверено», даже если сам сертификат действителен.

Чтобы проверить сертификат по доверенному хранилищу CA системы:

openssl verify certificate.crt

Если выводится certificate.crt: OK, цепочка полная и действительная.

Когда промежуточные сертификаты хранятся отдельно

Если ваш промежуточный сертификат CA находится в отдельном файле (что распространено у многих провайдеров CA, включая DigiCert), используйте флаг -untrusted:

openssl verify -untrusted intermediate.crt certificate.crt

Флаг -untrusted указывает OpenSSL использовать предоставленный промежуточный сертификат при построении цепочки без постоянного добавления его в хранилище доверия.

Просмотр полной цепочки с удаленного сервера

Чтобы увидеть каждый сертификат в цепочке с действующего сервера:

openssl s_client -connect yourdomain.com:443 -servername yourdomain.com -showcerts

Флаг -showcerts выводит каждый сертификат в цепочке в формате PEM. Это основная команда для диагностики проблем с цепочкой, таких как отсутствующие промежуточные сертификаты или неверный порядок.

Предпочитаете визуальную проверку в один клик? Наш SSL Checker проверит цепочку сертификатов для любого домена и автоматически отметит отсутствующие промежуточные сертификаты.


Подтверждение соответствия приватного ключа сертификату

После установки сертификата одной из самых распространенных ошибок является несоответствие приватного ключа. Веб-сервер не запустится (или будет обслуживать разорванное соединение), если приватный ключ не соответствует открытому ключу сертификата.

Вот как проверить соответствие. Обе команды извлекают модуль — общее математическое значение — и хешируют его:

openssl x509 -noout -modulus -in certificate.crt | openssl md5
openssl rsa -noout -modulus -in privatekey.key | openssl md5

Если хеши MD5 идентичны, приватный ключ и сертификат являются действительной парой. Если они отличаются, что-то не так. Возможно, у вас неверный ключ, или сертификат был переиздан с новой парой ключей.

Вы можете расширить эту проверку, включив ваш CSR (запрос на подпись сертификата) тоже:

openssl req -noout -modulus -in request.csr | openssl md5

Проверка модуля показывает, принадлежат ли эти три файла друг другу, но не то, что на самом деле указано в CSR. Чтобы прочитать его собственные поля, выполните openssl req -in yourCSR.csr -noout -text, или вставьте запрос в наш декодер CSR.

Все три: сертификат, приватный ключ и CSR должны возвращать одинаковый хеш.

Не на машине с OpenSSL под рукой? Наш Certificate Key Matcher выполняет то же сравнение в вашем браузере, и он работает также для ключей ECDSA, где проверка модуля не проходит.


Конвертация между форматами сертификатов

Разные серверы и платформы требуют различные форматы сертификатов. Apache и Nginx используют PEM, тогда как Windows IIS и Tomcat обычно требуют PKCS#12 (.pfx). Вот самые распространенные конвертации:

DER в PEM:

openssl x509 -inform der -in certificate.der -out certificate.pem

PEM в DER:

openssl x509 -outform der -in certificate.pem -out certificate.der

PEM в PKCS#12 (.pfx):

openssl pkcs12 -export -out certificate.pfx -inkey privatekey.key -in certificate.crt -certfile ca-bundle.crt

PKCS#12 в PEM:

openssl pkcs12 -in certificate.pfx -out certificate.pem -nodes

Флаг -nodes экспортирует приватный ключ без шифрования паролем. Удалите его, если хотите получить вывод, защищенный парольной фразой.

Полезно знать: Файлы сертификатов с расширениями .crt, .cer и .pem все могут быть в формате PEM. Само расширение не говорит вам о кодировке, проверьте содержимое файла. Если он начинается с ——BEGIN, это PEM. Если это двоичная тарабарщина, это DER.

Для разовой конвертации на машине без OpenSSL,  SSL Converter обрабатывает PEM, DER, PFX и P7B прямо в браузере и разделяет PFX на сертификат, цепочку и ключ.


Устранение распространенных ошибок сертификата

Когда что-то идет не так, вывод OpenSSL обычно указывает, где проблема. Вот краткий справочник по самым частым проблемам:

«unable to get local issuer certificate». Цепочка сертификатов неполная. В конфигурации вашего сервера отсутствует промежуточный сертификат. Получите правильный пакет CA от вашего поставщика сертификатов и настройте его вместе с сертификатом сервера.

«certificate has expired». Именно то, на что похоже. Дата «Not After» сертификата прошла. Немедленно обновите и замените его.

«certificate signature failure». Сертификат был изменен или поврежден после подписания. Загрузите его заново от вашего поставщика CA или переиздайте.

«key values mismatch». Приватный ключ и сертификат не соответствуют друг другу. Выполните сравнение модуля из раздела выше, чтобы подтвердить это, затем найдите правильный ключ или создайте новый CSR.

«self-signed certificate». OpenSSL не может проследить сертификат до доверенного корневого CA. Это ожидаемо для самоподписанных сертификатов, используемых при разработке. Для продакшена убедитесь, что у вас есть сертификат, выданный публично доверенным удостоверяющим центром.

«hostname mismatch». Домен, к которому вы подключаетесь, не соответствует общему имени (CN) или альтернативному имени субъекта (SAN), указанному в сертификате. Проверьте SAN с помощью:

openssl x509 -in certificate.crt -noout -ext subjectAltName

Держите свои сертификаты под контролем

Проверка сертификатов с помощью OpenSSL — это то, что вы будете делать неоднократно на протяжении всего жизненного цикла сертификата: при установке, после продления и всякий раз, когда что-то ломается. Эти команды — самый быстрый способ диагностировать проблемы и убедиться, что всё настроено правильно.

Для быстрой проверки без открытия терминала, прогоните домен через наш SSL Checker и получите его рейтинг безопасности SSL плюс полный сертификат, цепочку и разбор шифров за секунды.

Но ручные проверки масштабируются лишь до определённого предела. Если вы управляете несколькими сертификатами на разных серверах, вам нужен надежный процесс управления сертификатами, особенно поскольку сроки действия сертификатов продолжают сокращаться, а допуск на ошибку становится всё меньше.

Нужны доверенные SSL-сертификаты? SSL Dragon предлагает широкий выбор SSL/TLS-сертификатов от ведущих удостоверяющих центров, таких как DigiCert, Sectigo и Thawte, с конкурентоспособными ценами, быстрым выпуском и специализированной поддержкой. Нужен ли вам сертификат для одного домена или корпоративное решение для нескольких доменов, вы найдете подходящий вариант.

Сэкономьте 10% на SSL-сертификатах при заказе сегодня!

Быстрая выдача, надежное шифрование, 99,99% доверия к браузеру, специализированная поддержка и 25-дневная гарантия возврата денег. Код купона: SAVE10

Детальное изображение дракона в полете
Написано

Опытный автор контента, специализирующийся на SSL-сертификатах. Превращает сложные темы кибербезопасности в понятный, увлекательный контент. Вносите свой вклад в повышение уровня цифровой безопасности с помощью впечатляющих рассказов.