Как: Создать CSR в OpenSSL без Вопросов (Неинтерактивно)

В это статье, Вы найдете информацию о том, как сгенерировать CSR (Запрос на Подписание Сертификата) с помощью OpenSSL из командной строки в Linux, автоматически отвечая на вопросы о теме сертификата.

Ниже Вы найдете два примера создания CSR с помощью OpenSSL.

В первом примере я покажу как с помощью одной команды создать CSR с новым секретным ключом.

А во втором примере Вы увидите как сгенерировать CSR из существующего ключа (если у Вас уже есть секретный ключ и Вы ходите продолжить использовать его).

Оба примера показывают как создать CSR с помощью OpenSSL автоматически (во время генерации CSR Вас не будут спрашивать о значении полей темы сертификата).

Таким образом Вы можете использовать эти примеры в shell скриптах, для автоматизации генерации CSR.

Создание CSR и Ключа в OpenSSL Без Вопросов

Используйте следующую команду для генерации нового 2048-битного секретного ключа example.key и создания CSR example.csr на его основании:

$ openssl req -nodes -newkey rsa:2048 -keyout example.key -out example.csr -subj "/C=GB/ST=London/L=London/O=Global Security/OU=IT Department/CN=example.com"
Опция Описание
openssl req утилита генерации CSR
-nodes секретный ключ не шифруется
-newkey создание CSR и нового секретного ключа
rsa:2048 генерация 2048-битного RSA ключа
-keyout файл в который будет записан новый секретный ключ
-out файл в который будет записан CSR
-subj устанавливает тему сертификата

Генерация CSR из Существующего Ключа в OpenSSL

Используйте следующую команду для генерации CSR example.csr из секретного ключа example.key:

$ openssl req -new -key example.key -out example.csr -subj "/C=GB/ST=London/L=London/O=Global Security/OU=IT Department/CN=example.com"
Опция Описание
openssl req утилита генерации CSR
-new создание нового CSR
-key указывает из какого файла брать секретный ключ
-out файл в который будет записан CSR
-subj устанавливает тему сертификата

Автоматическая Неинтерактивная Генерация CSR

Секрет генерации CSR без интерактивных вопросов о значении полей которые используются в теме сертификата, заключается в опции -subj.

-subj arg Указывает значение полей темы сертификата. Аргументы (arg) должны передаваться в формате /тип0=значение0/тип1=значение1/тип2=…, символы могут экранироваться \ (обратным слэшем), пробелы не пропускаются.

Ниже приведены поля, которые необходимо заполнить для создания CSR:

Поле Значение Пример
/C= Country (Страна) GB
/ST= State (Область) London
/L= Location (Город) London
/O= Organization (Организация) Global Security
/OU= Organizational Unit (Отдел организации) IT Department
/CN= Common Name (Доменное имя сайта) example.com

Вы создали Запрос на Подписание Сертификата, который представляет из себя закодированный файл.

Теперь вы можете декодировать CSR для того, чтобы проверить что он содержит правильную информацию.

8 Replies to “Как: Создать CSR в OpenSSL без Вопросов (Неинтерактивно)”

  1. Hi, is there also an option for alt_names which works in the same way as -subj?

  2. The validity period is set on the CA under the configuration of the certificate template. You request the certificate the CA determines the length the certificate will be valid.

  3. hi guys!
    everything above is great and works fine.
    but could you please help me with -days parameter in req routine? i’m gonna request a 10-years certificate, so i just set -days 3650 and… get 1-year cert from my CA instead!
    where should i dig? maybe the configuration of corresponding certificate template @CA supresses too long certificate’s lifetime requested?

    1. Hello,
      According to PKCS #10: Certification Request Syntax Specification there is no posibility to specify validity period in CSR. The -days option is used not for CSR but for certificate generation. If you run the following command against your CSR, you will see that it doesn’t carry information about validity period:

      $ openssl asn1parse <example.csr

      Check man req for more information.

  4. yeah, and then you dont need to manage some other file, like openssl.cnf. also, you can pull the command easily from history, and you cannot do that with the contents of a file.

  5. @Trey Because sometimes it is better to run just one command (especially when you want to automate stuff).

  6. Why not use a -config file instead? Rather than writing that cumbersome -subj string. It would be more readable and easier to correct.

    It’s in standard .ini format. Like so:

    [ req ]
    prompt = no
    default_bits = 4096
    distinguished_name = req_distinguished_name
    req_extensions = req_ext
    
    [ req_distinguished_name ]
    C=
    ST=
    L=
    O=
    OU=
    CN=
    
    [ req_ext ]
    subjectAltName = @alt_names
    
    [alt_names]
    DNS.1 = hostname.domain.tld
    DNS.2 = hostname
    IP.1 = 10.20.30.40
    

    You may need to adjust based on the capabilities of your signing CA.

Добавить комментарий