Это руководство объясняет, как создается запрос на подпись сертификата (CSR) для сертификата подписи кода, когда вы работаете с OpenSSL, а также, что не менее важно, когда этот подход больше не применяется. С 1 июня 2023 года правила для ключей подписи кода изменились, поэтому старый рабочий процесс, основанный только на программном OpenSSL, больше не принимается Удостоверяющими центрами для публично доверенного сертификата подписи кода. Сначала прочтите требование ниже, затем выберите путь, соответствующий тому, как хранится ваш ключ.
Важно: ключи подписи кода должны храниться на аппаратном устройстве
В соответствии с базовыми требованиями CA/Browser Forum к подписи кода, вступившими в силу 1 июня 2023 года, приватный ключ для каждого публично доверенного сертификата подписи кода, как стандартного (OV), так и Extended Validation (EV), должен генерироваться и храниться в аппаратном криптографическом модуле, соответствующем стандарту FIPS 140-2 Level 2, Common Criteria EAL4+ или эквивалентному. Ключ должен быть неэкспортируемым. Для EV-подписи кода аппаратное хранение требовалось всегда; это правило распространило ту же защиту на стандартные сертификаты.
Практическое следствие: приватный ключ и CSR, сгенерированные исключительно программно с помощью обычного OpenSSL на ноутбуке или сервере, больше не принимаются для выпуска публично доверенного сертификата подписи кода. Удостоверяющие центры прекратили поддержку генерации ключей в браузере и программных CSR для этих продуктов. Теперь ваш ключ хранится в одном из следующих мест:
- Аппаратный токен, доставленный вам (например, YubiKey или SafeNet/Thales eToken). При методе доставки «токен + отправка» Удостоверяющий центр генерирует ключ на устройстве и обрабатывает CSR, поэтому вам не нужно создавать его с помощью OpenSSL.
- Модуль аппаратной безопасности (HSM), находящийся под вашим контролем, локальный или облачный. Здесь вы генерируете ключ внутри HSM и создаете CSR вместе с подтверждением ключа (key attestation), доказывающим, что ключ был создан в аппаратном устройстве.
- Облачный сервис подписи, который хранит ключ в соответствующем HSM от вашего имени.
Выберите свой путь исходя из того, как вы планируете получать и хранить сертификат. Для общего обзора см. руководство методы доставки сертификатов подписи кода. Для шагов по созданию CSR и подтверждения ключа на аппаратных устройствах следуйте руководству, соответствующему вашему устройству:
- YubiKey 5 FIPS: генерация CSR и подтверждение ключа
- Luna Network Attached HSM v7.x: руководство по CSR и подтверждению ключа
Если вы используете другой HSM, генерируйте CSR с помощью инструментов этого производителя, чтобы ключ оставался в аппаратном устройстве. Команда OpenSSL req, показанная далее, все еще играет роль в таких рабочих процессах, когда OpenSSL управляет HSM через провайдера или движок (engine), но она должна ссылаться на ключ, уже находящийся в модуле, а не на обычный программный файл ключа, если речь идет о публично доверенном сертификате.
Когда программный метод OpenSSL все еще применим
Приведенный ниже программный рабочий процесс создает файл ключа на диске. Это допустимо только для случаев, которые не являются публично доверенным сертификатом подписи кода, например:
- Внутренняя или тестовая подпись с использованием собственного/корпоративного УЦ, где хранение ключа регулируется вашей собственной политикой, а не публичными правилами CA/Browser Forum.
- Изучение структуры команд OpenSSL перед переходом на токен или HSM.
- Подготовка данных субъекта и синтаксиса команд, которые вы будете повторно использовать при создании настоящего CSR для вашего аппаратного ключа.
Не отправляйте программно созданный ключ и CSR в публичный Удостоверяющий центр для получения сертификата подписи кода OV или EV. Он будет отклонен. С учетом этого ограничения, вот процесс работы с OpenSSL и связанные с ним команды.
1. Загрузите и установите OpenSSL
Если OpenSSL еще не установлен на вашем компьютере, загрузите актуальную сборку (OpenSSL 3.x или новее) для вашей операционной системы и установите ее. macOS и большинство дистрибутивов Linux уже поставляются с OpenSSL; в Windows обычно устанавливается сторонняя сборка. Подтвердите установку и версию с помощью:
openssl version
2. Откройте терминал и загрузите OpenSSL
В Windows нажмите клавишу Windows + R, введите cmd и нажмите Enter. Для команд, записывающих файлы в защищенные папки, запустите командную строку от имени администратора: щелкните правой кнопкой мыши по значку командной строки и выберите Запуск от имени администратора. Вы также можете ввести cmd в поле поиска на панели задач и открыть командную строку оттуда. В macOS или Linux откройте приложение терминала.
Если исполняемый файл OpenSSL не указан в системном пути в Windows, сначала перейдите в его папку установки, используя путь, соответствующий вашей сборке:
cd OpenSSL-Win32bin
cd "Program FilesOpenSSL-Win64bin"
3. Создайте приватный ключ и CSR
Сначала сгенерируйте приватный ключ. Сертификаты подписи кода требуют надежного ключа: используйте RSA 3072 бита (или больше), что является распространенным минимумом для подписи кода, или ключ ECDSA на кривой P-256. Чтобы создать ключ RSA 3072 бита:
openssl genrsa -out code_signing_key.key 3072
Затем сгенерируйте CSR из этого ключа. В текущих версиях OpenSSL по умолчанию используется SHA-256 для подписи запроса:
openssl req -new -key code_signing_key.key -out code_signing_csr.txt
4. Заполните поля CSR
OpenSSL запрашивает данные, идентифицирующие владельца сертификата. Введите точную актуальную информацию, соответствующую записям вашей организации, поскольку УЦ ее проверяет. Замените примеры на ваши собственные данные:
- Страна (C): двухбуквенный код страны, где зарегистрирована ваша компания или где вы проживаете, например US.
- Штат или область (ST): полное название штата или области, например California.
- Населенный пункт (L): город, в котором зарегистрирована ваша компания, например San Jose.
- Название организации (O): официальное юридическое название вашей организации, или ваше полное юридическое имя, если сертификат выдается физическому лицу, например GPI Holding LLC.
- Организационное подразделение (OU): отдел, запрашивающий сертификат, например IT. Это поле необязательно.
- Общее имя (CN): юридическое название вашей организации, или ваше полное имя для индивидуального сертификата. Для подписи кода общее имя — это идентификатор, который отображается как издатель.
- Адрес электронной почты: действующий контактный адрес электронной почты.
Необязательные поля challenge password и название компании можно оставить пустыми: просто нажмите Enter на этих запросах.
Вы также можете объединить шаги 3 и 4 в одну команду. Флаг -subj предоставляет данные субъекта прямо в команде, поэтому OpenSSL не запрашивает их отдельно, а -nodes оставляет ключ незашифрованным на диске (в OpenSSL 3.x этот флаг переименован в -noenc, но -nodes все еще работает). Обратите внимание, что значение использует прямые кавычки, а не фигурные, и вся строка заключена в одну пару кавычек:
openssl req -new -newkey rsa:3072 -nodes -keyout code_signing_key.key -out code_signing_csr.txt -subj "/C=US/ST=California/L=San Jose/O=GPI Holding LLC/OU=IT/CN=GPI Holding LLC"
5. Проверьте CSR
Прежде чем что-либо отправлять, убедитесь, что CSR действителен и что его данные верны. Эта команда выводит расшифрованный субъект и проверяет подпись запроса:
openssl req -noout -text -verify -in code_signing_csr.txt
Проверьте, что строка Subject содержит страну, организацию и общее имя именно так, как вы задумали, что размер публичного ключа составляет 3072 бита или более (или это ключ ECDSA), и что алгоритм подписи — SHA-256. Вы также должны увидеть сообщение verify OK, которое подтверждает, что CSR подписан соответствующим приватным ключом.
6. Переместите приватный ключ и CSR в безопасный каталог
Переместите приватный ключ и CSR из папки OpenSSL в каталог, который контролируете вы сами. Держите приватный ключ в секрете и никогда не передавайте его никому за пределами вашей организации: любой, кто им обладает, может подписывать программное обеспечение от вашего имени. В Windows создайте папку и переместите файлы в нее:
md c:codesigningcertificates
move code_signing_key.key c:codesigningcertificates
move code_signing_csr.txt c:codesigningcertificates
7. Отправьте CSR в ваш УЦ
Откройте файл CSR в любом текстовом редакторе, например в Блокноте, и скопируйте весь его содержимый, включая строки ——BEGIN CERTIFICATE REQUEST—— и ——END CERTIFICATE REQUEST——, в форму заказа при оформлении сертификата. Блок CSR выглядит так:
-----BEGIN CERTIFICATE REQUEST-----
MIICvDCCAaQCAQAw...
...base64 encoded request...
-----END CERTIFICATE REQUEST-----
Помните правило из начала этого руководства: для публично доверенного сертификата подписи кода отправляемый вами CSR должен соответствовать ключу, созданному и хранящемуся в соответствующем аппаратном устройстве. Если вы создали программный ключ с помощью описанных выше шагов, используйте его только для внутренней или тестовой подписи. Для заказа в публичном УЦ создайте CSR с помощью вашего токена или HSM, следуя руководству YubiKey или Luna HSM, либо позвольте УЦ сгенерировать ключ, выбрав метод доставки «токен + отправка».
Для получения общего синтаксиса OpenSSL, помимо создания CSR, полезным дополнением станет справочник команды OpenSSL. Вы также можете изучить другие руководства по OpenSSL и руководства по подписи кода, или узнать о других способах создания CSR.
Сэкономьте 10% на SSL-сертификатах при заказе сегодня!
Быстрая выдача, надежное шифрование, 99,99% доверия к браузеру, специализированная поддержка и 25-дневная гарантия возврата денег. Код купона: SAVE10

