Проверка CSR или сертификата с помощью openssl
Команды openssl, чтобы прочитать CSR, проверить соответствие приватному ключу и посмотреть установленный сертификат.
На этой странице
Утилитой openssl можно проверить CSR перед отправкой в центр сертификации (CA), а затем и полученный сертификат: какие домены в них указаны, подходят ли они к приватному ключу и до какой даты действует сертификат. Страница «Декодер CSR» на blackbox.md (blackbox.md/ru/domains/csr-decode, меню «Домены» → «Декодер CSR») файлы не декодирует: на ней показано сообщение «Наш онлайн-декодер сейчас в разработке» и тоже предлагается openssl. Автоматические проверки, описанные на этой странице, выполните сами командами из статьи.
Доступно: всем. Команды выполняются на вашем компьютере или на сервере, аккаунт blackbox.md не нужен.
Где запускать openssl
| Где | Чем пользоваться |
|---|---|
| Linux и macOS | приложение «Терминал»; openssl обычно уже установлен |
| Windows | Git Bash (устанавливается вместе с Git for Windows) или WSL (подсистема Windows для Linux с Ubuntu); в PowerShell и cmd команды openssl по умолчанию нет |
| Сервер BLACKBOX | командная строка сервера после подключения по SSH: Подключение к серверу по SSH (Windows, macOS, Linux) |
Если на сервере нет команды openssl, установите её. Ubuntu и Debian:
apt update
apt install opensslAlmaLinux и CentOS Stream:
dnf install opensslВ примерах используются файлы domeniu.csr (запрос), domeniu.key (приватный ключ) и certificat.crt (сертификат от CA). Подставьте имена своих файлов или полный путь к ним. Генератор на blackbox.md называет файлы по полю «Common Name (CN)», например www.example.com.csr и www.example.com.key: Генератор CSR в браузере.
Безопасность CSR и сертификат — публичные данные, их можно отправлять кому угодно. Приватный ключ (
.key) не передавайте никому — ни центру сертификации, ни поддержке — и не загружайте на сайты для проверки. Команды с ключом выполняйте только на своём компьютере или на сервере.
Как прочитать CSR
openssl req -in domeniu.csr -noout -textРезультат выглядит так (фрагмент):
Certificate Request:
Data:
Version: 1 (0x0)
Subject: C=MD, ST=Chisinau, L=Chisinau, O=Numele Companiei SRL, CN=www.example.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
…
Attributes:
Requested Extensions:
X509v3 Subject Alternative Name:
DNS:example.com, DNS:www.example.com
Signature Algorithm: sha256WithRSAEncryption| Строка | Что показывает |
|---|---|
Subject: |
данные запроса: CN (домен), O (организация), OU (подразделение), L (населённый пункт), ST (регион), C (страна) |
Public-Key: |
длина ключа: (2048 bit) или (4096 bit) для RSA; (256 bit) и NIST CURVE: P-256 для ECDSA |
X509v3 Subject Alternative Name: |
список SAN: все имена DNS:, которые будет покрывать сертификат |
Signature Algorithm: |
алгоритм подписи: sha256WithRSAEncryption (RSA) или ecdsa-with-SHA256 (ECDSA) |
Только список SAN:
openssl req -in domeniu.csr -noout -text | grep -A1 "Subject Alternative Name"Если команда ничего не вывела, в CSR нет SAN.
Проверка подписи CSR
openssl req -in domeniu.csr -noout -verifyДля неповреждённого CSR команда выводит Certificate request self-signature verify OK, а в старых версиях OpenSSL (1.1.1) — verify OK. Если появилась ошибка, файл повреждён или изменён после генерации: создайте CSR заново.
Чек-лист перед отправкой CSR
| Что проверить | Правильно | Ошибка |
|---|---|---|
| Ключ | RSA не короче 2048 бит (Public-Key: (2048 bit) или (4096 bit)) либо ECDSA P-256 (NIST CURVE: P-256) |
RSA короче 2048 бит: центры сертификации отклоняют такой запрос |
| Common Name | CN= — точное имя домена для сертификата, например www.example.com; для wildcard — *.example.com |
опечатка, например www.exampel.com вместо www.example.com |
| SAN | в списке все имена, в том числе с www и без него: DNS:example.com, DNS:www.example.com |
нет одного из вариантов или вообще нет строки SAN |
| Подпись | sha256WithRSAEncryption или ecdsa-with-SHA256 (SHA-256) |
sha1WithRSAEncryption (устаревший SHA-1) |
| Организация и страна | O= — точное название компании без опечаток; C= — двухбуквенный код страны, например MD |
сокращённое или искажённое название: это важно для сертификатов OV и EV, для которых CA проверяет организацию |
Важно Генератор на blackbox.md не добавляет Common Name в список SAN автоматически. Если поле «Subject Alternative Names (опционально)» осталось пустым, в CSR не будет SAN. Браузеры проверяют именно имена из SAN, поэтому укажите там оба варианта, например
example.comиwww.example.com. Ошибка в CN или SAN означает, что сертификат выпустят на другой домен и его придётся перевыпускать.
Соответствие ключа, CSR и сертификата
Сертификат работает только с тем приватным ключом, с которым был создан CSR. Если они не совпадают, веб-сервер не примет конфигурацию (nginx сообщает key values mismatch).
RSA-ключи: сравнение модуля
openssl rsa -noout -modulus -in domeniu.key | openssl md5
openssl req -noout -modulus -in domeniu.csr | openssl md5
openssl x509 -noout -modulus -in certificat.crt | openssl md5Каждая команда выводит хеш, например MD5(stdin)= 3b81747c6e7e0f94f6a1dff92ecc6045 (в старых версиях — (stdin)= …). Значение должно совпадать во всех трёх строках. Пока сертификата нет, сравните первые две.
Если первая команда выводит Not an RSA key, ключ — ECDSA: воспользуйтесь следующим способом.
Ключ любого типа: сравнение публичного ключа
openssl pkey -in domeniu.key -pubout | openssl sha256
openssl req -in domeniu.csr -noout -pubkey | openssl sha256
openssl x509 -in certificat.crt -noout -pubkey | openssl sha256Правило то же: хеши должны совпадать. Способ подходит и для RSA, и для ECDSA.
Если значения различаются, найдите ключ, созданный вместе с этим CSR. Если ключ утерян, создайте новый ключ и новый CSR и попросите центр сертификации перевыпустить сертификат.
Как посмотреть сертификат
Файл от центра сертификации
openssl x509 -in certificat.crt -noout -textПроверьте те же строки, что и в CSR (Subject:, Public-Key:, Subject Alternative Name), а также Issuer: (кто выпустил сертификат) и Validity (Not Before и Not After). В сертификате строка Signature Algorithm: показывает подпись центра сертификации: SHA-256 и SHA-384 (например, ecdsa-with-SHA384) — это нормально, устарел только SHA-1.
Кратко — владелец, издатель и срок действия:
openssl x509 -in certificat.crt -noout -subject -issuer -datessubject=CN=www.example.com
issuer=C=…, O=…, CN=…
notBefore=Oct 9 10:01:55 2026 GMT
notAfter=Jan 7 10:01:55 2027 GMTВремя указано по GMT (UTC); notAfter — дата окончания действия. Проверить, не истекает ли сертификат в ближайшие 30 дней (2 592 000 секунд):
openssl x509 -in certificat.crt -noout -checkend 2592000Ответ — Certificate will not expire (в этот срок не истекает) или Certificate will expire (пора продлевать).
Сертификат, установленный на сервере
Путь к сертификату указан в конфигурации веб-сервера: директива ssl_certificate в nginx, SSLCertificateFile в Apache. Найти его можно так:
grep -rE "ssl_certificate |SSLCertificateFile" /etc/nginx /etc/apache2 /etc/httpd 2>/dev/nullСертификаты Let's Encrypt, полученные через certbot, лежат в /etc/letsencrypt/live/ДОМЕН/ (обычно это первый домен сертификата): fullchain.pem содержит сертификат и цепочку, cert.pem — только сертификат сайта. Команда openssl x509 читает первый сертификат в файле, то есть сертификат сайта:
openssl x509 -in /etc/letsencrypt/live/ДОМЕН/fullchain.pem -noout -subject -datesСайт в интернете: что видит посетитель
openssl s_client -connect ДОМЕН:443 -servername ДОМЕН </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -datesЗамените ДОМЕН в обоих местах на имя сайта, например www.example.com. Параметр -servername передаёт имя сайта (SNI). Он обязателен, если в -connect указан IP-адрес: без него сервер, на котором размещено несколько сайтов, может вернуть сертификат другого сайта.
Если домен проходит через прокси Cloudflare, команда выше покажет сертификат Cloudflare. Чтобы посмотреть сертификат на самом сервере, подключитесь напрямую к его IP-адресу:
openssl s_client -connect IP_СЕРВЕРА:443 -servername ДОМЕН </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -datesПроверьте и цепочку сертификатов:
openssl s_client -connect ДОМЕН:443 -servername ДОМЕН </dev/null 2>/dev/null | grep -m1 "Verify return code"| Результат | Что это значит | Что делать |
|---|---|---|
0 (ok) |
сертификат действителен, цепочка полная | ничего |
10 (certificate has expired) |
срок действия сертификата истёк | продлите сертификат и перезагрузите конфигурацию веб-сервера |
18 (self-signed certificate) (в старых версиях — self signed certificate) |
сертификат самоподписанный, его выпустил не CA | установите сертификат, полученный от CA |
21 (unable to verify the first certificate) |
сервер не отдаёт промежуточный сертификат | установите сертификат вместе с цепочкой от CA (для Let's Encrypt — fullchain.pem) |
Как настроить HTTPS на сервере: Веб-сервер с HTTPS: nginx или Apache и Let's Encrypt.
Частые сообщения об ошибках
| Сообщение | Причина | Что делать |
|---|---|---|
No such file or directory |
неверное имя файла или путь | запустите команду в папке с файлом или укажите полный путь |
unable to load X509 request |
файл не является CSR, обрезан или в нём нет строк -----BEGIN CERTIFICATE REQUEST----- и -----END CERTIFICATE REQUEST----- |
откройте файл в текстовом редакторе и убедитесь, что блок целый; скопируйте его заново |
Could not find certificate, Could not read certificate или unable to load certificate |
файл не является сертификатом или записан в двоичном формате (DER) | проверьте, что указали сертификат, а не CSR или ключ; для двоичного файла (.cer, .der) добавьте -inform der после openssl x509 |
Could not find private key, Could not read private key или unable to load Private Key |
файл не является приватным ключом | укажите файл, который начинается с -----BEGIN PRIVATE KEY----- (или -----BEGIN RSA PRIVATE KEY-----, -----BEGIN EC PRIVATE KEY-----) |
Not an RSA key |
ключ ECDSA | сравнивайте публичный ключ, а не модуль |
Частые вопросы
Можно ли проверить CSR, созданный кем-то другим? Да. В CSR есть только публичный ключ и данные запроса, а приватный ключ остаётся у того, кто его создал. Команды из раздела «Как прочитать CSR» работают с любым CSR.
Я потерял приватный ключ. Можно ли его восстановить? Нет. Генератор на blackbox.md ключ не хранит: «Ключ невозможно восстановить после того, как вы покинете страницу.» Создайте новый ключ и CSR и попросите центр сертификации перевыпустить сертификат.
Нужен ли CSR для Let's Encrypt?
Нет, certbot создаёт его автоматически. Полученный сертификат проверяйте командами из раздела «Как посмотреть сертификат»; на сервере команда certbot certificates показывает домены и дату окончания каждого сертификата. Чем различаются типы сертификатов: SSL-сертификаты: бесплатные (Let's Encrypt) и коммерческие.
Может ли BLACKBOX помочь с проверкой? Напишите в поддержку и приложите CSR или сертификат — но никогда не приватный ключ: Как связаться с поддержкой BLACKBOX.