В системах инфраструктуры открытых ключей (PKI) запрос на подпись сертификата ( CSR или запрос на сертификацию ) представляет собой сообщение, отправляемое заявителем в центр сертификации инфраструктуры открытых ключей (PKI) для подачи заявки на получение цифрового сертификата идентификации . CSR обычно содержит открытый ключ, для которого должен быть выдан сертификат, идентификационную информацию (такую как доменное имя) и доказательство подлинности, включая защиту целостности (например, цифровую подпись). Наиболее распространенным форматом для CSR является спецификация PKCS #10 ; другие включают более эффективный формат сообщения запроса сертификата (CRMF) [1] и формат SPKAC (подписанный открытый ключ и вызов), генерируемый некоторыми веб-браузерами .
Перед созданием CSR для сертификата X.509 заявитель сначала генерирует пару ключей , сохраняя закрытый ключ этой пары в секрете, например:
# https://www.openssl.org/docs/manmaster/man1/openssl-genrsa.html# "openssl genrsa" создает закрытый ключ RSA:$ openssl genrsa -out 2024_wikipedia.org.key
CSR содержит информацию, идентифицирующую заявителя (например, отличительное имя ), открытый ключ , выбранный заявителем, и, возможно, дополнительную информацию. При использовании формата PKCS #10 запрос должен быть подписан самостоятельно с использованием закрытого ключа заявителя, что обеспечивает доказательство владения закрытым ключом, но ограничивает использование этого формата ключами, которые могут быть использованы для (некоторой формы) подписи. CSR должен сопровождаться доказательством происхождения (т. е. доказательством личности заявителя), которое требуется центром сертификации, и центр сертификации может связаться с заявителем для получения дополнительной информации.
Типичная информация, требуемая в CSR (пример столбца из образца сертификата X.509 ). Обратите внимание, что часто существуют альтернативы для Distinguished Names (DN), предпочтительное значение указано.
В этом примере командной строки используются данные, указанные в таблице выше:
# https://www.openssl.org/docs/manmaster/man1/openssl-req.html# "openssl req" создает запрос на подпись:$ openssl req -sha512 -new -subj "/C=US/ST=Калифорния/L=Сан-Франциско/O=Wikimedia Foundation, Inc./CN=*.wikipedia.org" -key 2024_wikipedia.org.key -out 2024_wikipedia.org.csr
Если запрос выполнен успешно, центр сертификации отправит обратно сертификат личности, подписанный цифровой подписью с использованием закрытого ключа центра сертификации.
Запрос на сертификацию в формате PKCS #10 состоит из трех основных частей: информация о запросе на сертификацию, идентификатор алгоритма подписи и цифровая подпись на информации о запросе на сертификацию. Первая часть содержит важную информацию, включая открытый ключ. Подпись запрашивающей стороны не позволяет субъекту запрашивать поддельный сертификат чужого открытого ключа. [3] Таким образом, закрытый ключ необходим для создания CSR PKCS #10, но он не является частью CSR. [4]
В CSR для персональных удостоверений личности и сертификатов подписи должен быть указан адрес электронной почты владельца удостоверения личности или название организации в случае удостоверения личности предприятия.
Первая часть, тип ASN.1 CertificationRequestInfo , состоит из номера версии (который равен 0 для всех известных версий, 1.0, 1.5 и 1.7 спецификаций), имени субъекта, открытого ключа (идентификатор алгоритма + битовая строка) и набора атрибутов, предоставляющих дополнительную информацию о субъекте сертификата. Атрибуты могут содержать требуемые расширения сертификата, пароль-вызов для ограничения отзыва, а также любую дополнительную информацию о субъекте сертификата, возможно, включая локальные или будущие типы. [3]
Стандарт PKCS#10 определяет двоичный формат для кодирования CSR для использования с X.509 . Он выражен в ASN.1 . Вот пример того, как можно проверить его структуру ASN.1 с помощью OpenSSL :
openssl asn1parse -i -in ваш_запрос.p10
CSR может быть представлен как PKCS#10, закодированный в Base64 ; пример приведен ниже:
-----НАЧАЛО ЗАПРОСА СЕРТИФИКАТА----- MIICzDCCAbQCAQAwgYYxCzAJBgNVBAYTAkVOMQ0wCwYDVQQIDARub25lMQ0wCwYD VQQHDARub25lMRIwEAYDVQQKDAlXaWtpcGVkaWExDTALBgNVBAsMBG5vbmUxGDAW BgNVBAMMDyoud2lraXBlZGlhLm9yZzEcMBoGCSqGSIb3DQEJARYNbm9uZUBub25l LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMP/U8RlcCD6E8AL PT8LLUR9ygyygPCaSmIEC8zXGJung3ykElXFRz/Jc/bu0hxCxi2YDz5IjxBBopB/ kieG83HsSmZZtR+drZIQ6vOsr/ucvpnB9z4XzKuabNGZ5ZiTSQ9L7Mx8FzvUTq5y /ArIuM+FBeuno/IV8 zvwAe/VRa8i0QjFXT9vBBp35aeatdnJ2ds50yKCsHHcjvtr 9/8zPVqqmhl2XFS3Qdqlsprzbgksom67OobJGjaV+fNHNQ0o/rzP//Pl3i7vvaEG 7Ff8tQhEwR9nJUR1T6Z7ln7S6cOr23YozgWVkEJ/dSr6LAopb+cZ88FzW5NszU6i 57HhA7ECAwEAAaAAMA0GCSqGSIb3DQEBBAUAA4IBAQBn8OCVOIx+n0AS6WbEmYDR SspR9xOCoOwYfamB+2Bpmt82R01zJ/kaqzUtZUjaGvQvAaz5lUwoMdaO0X7I5Xfl sllMFDaYoGD4Rru4s8gz2qG/QHWA8uPXzJVAj6X0olbIdLTEqTKsnBj4Zr1AJCNy /YcG4ouLJr140o26MhwBpoCRpPjAgdYMH60BYfnc4/DILxMVqR9xqK1s98d6Ob/+ 3wHFK+S7BRWrJQXcM8veAexXuk9lHQ+FgGfD0eSYGz0kyP26Qa2pLTwumjt+nBPl rfJxaLHwTQ/1988G0H35ED0f9Md5fzoKi5evU1wG5WRxdEUPyt3QUXxdQ69i0C+7 -----КОНЕЦ ЗАПРОСА СЕРТИФИКАТА-----
Структура ASN.1 запроса на подпись сертификата выше (анализируемая openssl) выглядит следующим образом, где первое число — это смещение в байтах, d = глубина, hl = длина заголовка текущего типа, l = длина содержимого:
0:d=0 hl=4 l= 716 минусы: ПОСЛЕДОВАТЕЛЬНОСТЬ 4:d=1 hl=4 l= 436 минусы: ПОСЛЕДОВАТЕЛЬНОСТЬ 8:d=2 hl=2 l= 1 простое число: ЦЕЛОЕ :00 11:d=2 hl=3 l= 134 минусы: ПОСЛЕДОВАТЕЛЬНОСТЬ 14:d=3 hl=2 l= 11 минусы: SET 16:d=4 hl=2 l= 9 минусы: ПОСЛЕДОВАТЕЛЬНОСТЬ 18:d=5 hl=2 l= 3 prim: ОБЪЕКТ :countryName 23:d=5 hl=2 l= 2 prim: PRINTABLESTRING :EN 27:d=3 hl=2 l= 13 минусы: SET 29:d=4 hl=2 l= 11 минусы: ПОСЛЕДОВАТЕЛЬНОСТЬ 31:d=5 hl=2 l= 3 prim: ОБЪЕКТ :stateOrProvinceName 36:d=5 hl=2 l= 4 первичный: UTF8STRING :нет 42:d=3 hl=2 l= 13 минусы: SET 44:d=4 hl=2 l= 11 минусы: ПОСЛЕДОВАТЕЛЬНОСТЬ 46:d=5 hl=2 l= 3 prim: ОБЪЕКТ :localityName 51:d=5 hl=2 l= 4 первичный: UTF8STRING :нет 57:d=3 hl=2 l= 18 минус: SET 59:d=4 hl=2 l= 16 минусы: ПОСЛЕДОВАТЕЛЬНОСТЬ 61:d=5 hl=2 l= 3 prim: ОБЪЕКТ :organizationName 66:d=5 hl=2 l= 9 prim: UTF8STRING: Википедия 77:d=3 hl=2 l= 13 минусы: SET 79:d=4 hl=2 l= 11 минусы: ПОСЛЕДОВАТЕЛЬНОСТЬ 81:d=5 hl=2 l= 3 prim: ОБЪЕКТ :organizationalUnitName 86:d=5 hl=2 l= 4 первичный: UTF8STRING :нет 92:d=3 hl=2 l= 24 минус: SET 94:d=4 hl=2 l= 22 минус: ПОСЛЕДОВАТЕЛЬНОСТЬ 96:d=5 hl=2 l= 3 prim: ОБЪЕКТ :commonName 101:d=5 hl=2 l= 15 prim: UTF8STRING :*.wikipedia.org 118:d=3 hl=2 l= 28 минус: SET 120:d=4 hl=2 l= 26 минусы: ПОСЛЕДОВАТЕЛЬНОСТЬ 122:d=5 hl=2 l= 9 prim: ОБЪЕКТ :emailAddress 133:d=5 hl=2 l= 13 первичный: IA5STRING :[email protected] 148:d=2 hl=4 l= 290 минус: ПОСЛЕДОВАТЕЛЬНОСТЬ 152:d=3 hl=2 l= 13 минусы: ПОСЛЕДОВАТЕЛЬНОСТЬ 154:d=4 hl=2 l= 9 prim: ОБЪЕКТ :rsaEncryption 165:d=4 hl=2 l= 0 первичный: NULL 167:d=3 hl=4 l= 271 prim: СТРОКА БИТОВ 442:d=2 hl=2 l= 0 минус: продолжение [ 0 ] 444:d=1 hl=2 l= 13 минусы: ПОСЛЕДОВАТЕЛЬНОСТЬ 446:d=2 hl=2 l= 9 prim: ОБЪЕКТ :md5WithRSAEncryption 457:d=2 hl=2 l= 0 первичный: NULL 459:d=1 hl=4 l= 257 prim: СТРОКА БИТОВ
Это было создано путем указания кодировки base64 в команде , где PEM ( Privacy-Enhanced Mail ) — это кодировка ASN.1 Distinguished Encoding Rules в base64.openssl asn1parse -in your_request.p10 -inform PEM -i