OpenSSL, как избежать запроса и указать команде брать из конфигурационного файла?

Вопрос или проблема

Создавая запрос на сертификат, я использую эту строку

openssl req -config ssl.config -newkey rsa:4096 -keyout `hostname`.key -out `hostname`.req

в “ssl.config” я указываю провинцию, штат, электронную почту и т.д. синтаксис верный. Но когда я создаю сертификат/ключ, он запрашивает провинцию и т.д. Можно ли сделать это без взаимодействия?

Я знаю этот флаг

-subj "/C=IT/ST=STATE/L=Location/O=Organization/CN=`hostname`"

но я хочу, чтобы команда читала это из ssl.config и не спрашивала.. это возможно?

Укажите [req] distinguished_name= в секцию с каждым полем, указанным отдельно, но также установите [req] prompt=no:

[req]
distinguished_name = req_dn
prompt = no

[req_dn]
# Должен быть в порядке OpenSSL (обратный порядок RFC 2223), т.е. /C/ST/L/O/CN
countryName = IT
organizationName = Some org
commonName = foo.example.com

Мне нужно было отредактировать сценарий, который у меня был, сделав его полностью автоматическим/без взаимодействия, изменив config.ssl:

  • Изменив некоторые параметры (местоположения закрытого ключа CA, местоположения сертификатов и т.д.)
  • Используя правильные параметры для ввода, вывода и пакетной обработки

Этот сценарий является всего лишь примером, который я использую для создания самоподписанных сертификатов для тестирования, важным является использование правильных параметров для избежания интерактивного режима:

set -e

DOMAIN=blu.priv
HOSTNAME=`hostname`

openssl req -new -config ssl.config -newkey rsa:4096 -days 3650 -x509 -nodes -keyout demoCA/$DOMAIN.key -out demoCA/$DOMAIN.crt -batch

openssl genrsa -aes256 -passout file:passphrase.txt -out demoCA/private/$DOMAIN.key 4096

openssl req -new -config ssl.config -x509 -days 3650 -key demoCA/private/$DOMAIN.key -passin file:passphrase.txt -keyout demoCA/$DOMAIN.key -out demoCA/$DOMAIN.crt -batch

openssl req -config ssl.config -passout file:passphrase.txt -newkey rsa:4096 -keyout $HOSTNAME.key -out $HOSTNAME.req -batch

yes|openssl ca -config ssl.config -passin file:passphrase.txt -out $HOSTNAME.crt -infiles $HOSTNAME.req 

for i in *key;do openssl rsa -passin file:passphrase.txt -in $i -out $i;done

Ответ или решение

Чтобы создавать запросы на сертификаты с использованием OpenSSL без интерактивного ввода, необходимо корректно настроить конфигурационный файл, который будет использоваться при выполнении команды.

Шаги к созданию неприемлемого запроса на сертификат

  1. Настройка конфигурации OpenSSL:
    Конфигурационный файл (например, ssl.config) должен содержать секцию [req], где мы указываем, что пользовательский ввод не нужен (prompt = no) и задаем информацию о сертификате через distinguished_name. Ключевые поля должны быть прописаны в отдельной секции, что позволит избежать запросов в терминале при генерации сертификатов.

    Пример конфигурационного файла:

    [req]
    distinguished_name = req_dn
    prompt = no
    
    [req_dn]
    countryName      = IT
    stateOrProvinceName = STATE
    localityName     = Location
    organizationName = Organization
    commonName       = `hostname`
  2. Использование команд OpenSSL:
    Для генерации запроса и ключа без диалогового ввода, можно использовать следующие команды:

    HOSTNAME=`hostname`
    openssl req -new -config ssl.config -newkey rsa:4096 -nodes -keyout $HOSTNAME.key -out $HOSTNAME.req

    В данной команде ключ будет создан из RSA-ключа длиной 4096 бит без шифрования, и все необходимые поля будут взяты из конфигурационного файла.

  3. Создание самоподписанного сертификата:
    Чтобы создать самоподписанный сертификат автоматическим образом, используйте следующую последовательность команд:

    DOMAIN=yourdomain.local
    openssl req -new -x509 -config ssl.config -days 3650 -keyout $DOMAIN.key -out $DOMAIN.crt -nodes

    Здесь -days 3650 указывает на срок действия сертификата в 10 лет.

Полная автоматизация с помощью скрипта

Для полной автоматизации процесса можно использовать bash-скрипт. Вот пример такого скрипта, который создаст самоподписанный сертификат и ключ, не требуя интерактивного ввода:

#!/bin/bash
set -e

DOMAIN=yourdomain.local
HOSTNAME=$(hostname)

# Генерация ключа и запроса на сертификат
openssl req -new -config ssl.config -newkey rsa:4096 -nodes -keyout $HOSTNAME.key -out $HOSTNAME.req

# Создание самоподписанного сертификата
openssl x509 -req -days 365 -in $HOSTNAME.req -signkey $HOSTNAME.key -out $HOSTNAME.crt

Заключение

С помощью вышеописанных настроек и команд вы сможете генерировать запросы на сертификаты и самоподписанные сертификаты, не проходя через команду ввода и избегая интерактивного взаимодействия. Это особенно полезно в ситуациях, когда требуется автоматизация процессов, например, в DevOps или при развертывании систем. Помните, что точность в настройках конфигурационного файла и командах обеспечит надежность и безопасность вашего сертификата.

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

Капча загружается...