BLACKBOXЦентр помощи

Проверка CSR или сертификата с помощью openssl

Команды openssl, чтобы прочитать CSR, проверить соответствие приватному ключу и посмотреть установленный сертификат.

общееОбновлено 2026-10-09~7 мин чтения
На этой странице

Утилитой 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 openssl

AlmaLinux и 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 -dates
subject=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.

Не нашли ответ?Напишите нам — служба поддержки ответит. support@blackbox.md
Открыть тикет