Как проверить CSR
- Вставьте запрос от
-----BEGIN CERTIFICATE REQUEST-----до парной строки END или перетащите в поле файл.csr/.req. - Проверьте на карточке Субъект, Альтернативные имена (SAN) и Открытый ключ.
- При желании вставьте под CSR закрытый ключ. Его карточка покажет только тип и длину ключа и SPKI-пин SHA-256, который можно сравнить с пином CSR.
- Если портал CA хочет запрос в другом виде, используйте Скопировать PEM или Скачать .der.
Что внутри запроса на сертификат
CSR (PKCS#10) невелик: имя субъекта, открытый ключ, необязательные атрибуты и подпись поверх всего этого. Декодер показывает их так:
| Поле | Примечания |
|---|---|
| Субъект | C=US, O=Example Corp, CN=app.example.com. Для сертификатов с проверкой домена CA оставляет только то, что проверил, поэтому поля организации обычно отбрасываются. |
| Версия | Для PKCS#10 всегда v1. |
| Открытый ключ | Тип и длина, например RSA 2048 или EC P-256. Эта часть попадает в сертификат без изменений. |
| Алгоритм подписи | Обычно sha256WithRSAEncryption или ecdsa-with-SHA256. |
| Альтернативные имена (SAN), Использование ключа, Расширенное использование ключа | Запрошенные расширения. CA может их принять, переписать или отбросить. |
| Атрибуты | Прочие атрибуты PKCS#9. Про challengePassword сообщается, что он задан, а значение скрыто. |
| SPKI-пин SHA-256 | Хеш открытого ключа. У выпущенного сертификата будет тот же пин. |
Ошибки, которые стоит поймать до отправки
- Нет альтернативных имён (SAN). При сверке имени хоста браузеры игнорируют CN. Публичные CA обычно сами копируют CN в SAN, внутренние CA часто нет, и в итоге сертификат не проходит из-за несовпадения имени.
- Не хватает имени.
www.example.comиexample.comсчитаются разными записями. Wildcard*.example.comне покрывает самexample.com. - Слишком короткий ключ. Публичные доверенные CA требуют RSA не короче 2048 бит. CSR с RSA 1024 отклонят.
- Не тот ключ. CSR, сгенерированный на другом сервере или из старого файла ключа, даст сертификат, которым ваш сервер не сможет воспользоваться. Сравните пины.
- Опечатки в субъекте. Сейчас их исправить дёшево, а после проверки OV или EV дорого.
Инструмент читает CSR, но не проверяет его самоподпись. Обрезанный или отредактированный запрос всё равно может декодироваться, так что при сомнениях запустите openssl req -verify.
Создание и проверка CSR через OpenSSL
Новый ключ RSA и CSR с двумя именами хостов за один шаг (для -addext нужен OpenSSL 1.1.1 или новее):
openssl req -new -newkey rsa:2048 -nodes -keyout app.key -out app.csr \
-subj "/CN=app.example.com" \
-addext "subjectAltName=DNS:app.example.com,DNS:www.app.example.com"
Проверьте его вместе с подписью и убедитесь, что он соответствует ключу:
openssl req -in app.csr -noout -text -verify
diff <(openssl req -in app.csr -noout -pubkey) <(openssl pkey -in app.key -pubout) && echo "key matches"
Для целого запроса строка с -verify выводит Certificate request self-signature verify OK. Больше рецептов для командной строки есть на странице про OpenSSL.
Как CSR выглядит в Base64
CSR, как и сертификат, хранится в виде DER, обёрнутого в PEM. Запрос с RSA-2048 занимает примерно 650–700 байтов DER, поэтому его Base64 начинается с MIIC; запрос с EC P-256 ближе к 300 байтам и начинается с MIIB. Если полученное начинается с MIIC, а в заголовке написано CERTIFICATE, это сертификат, а не запрос. Вставьте его в декодер сертификатов: там тот же виджет, который справляется с обоими и сообщает, что именно нашёл.
Вопросы и ответы
Как проверить, какие домены указаны в CSR?
Вставьте CSR и посмотрите на Альтернативные имена (SAN). Какие имена хостов покроет сертификат, определяет именно этот список; CN в субъекте для этого не используется. Если строки нет, в запросе нет расширения SAN.
Как понять, подходит ли CSR к моему закрытому ключу?
Вставьте CSR и закрытый ключ вместе. Если на обеих карточках одинаковый SPKI-пин SHA-256, у них одна пара ключей. В OpenSSL сравните openssl req -in app.csr -noout -pubkey с openssl pkey -in app.key -pubout.
Есть ли в CSR закрытый ключ?
Нет. В CSR лежат открытый ключ, запрошенные имена и подпись, сделанная закрытым ключом, чтобы доказать, что он у вас есть. CSR можно спокойно отправлять в CA, а закрытый ключ должен оставаться на сервере.
Что за NEW CERTIFICATE REQUEST в заголовке?
Старая метка, которую используют Java keytool и некоторые инструменты Windows. Внутри та же структура PKCS#10, и декодер читает её как любой другой CSR.