Вопрос или проблема
Создавая запрос на сертификат, я использую эту строку
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 без интерактивного ввода, необходимо корректно настроить конфигурационный файл, который будет использоваться при выполнении команды.
Шаги к созданию неприемлемого запроса на сертификат
-
Настройка конфигурации 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`
-
Использование команд OpenSSL:
Для генерации запроса и ключа без диалогового ввода, можно использовать следующие команды:HOSTNAME=`hostname` openssl req -new -config ssl.config -newkey rsa:4096 -nodes -keyout $HOSTNAME.key -out $HOSTNAME.req
В данной команде ключ будет создан из RSA-ключа длиной 4096 бит без шифрования, и все необходимые поля будут взяты из конфигурационного файла.
-
Создание самоподписанного сертификата:
Чтобы создать самоподписанный сертификат автоматическим образом, используйте следующую последовательность команд: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 или при развертывании систем. Помните, что точность в настройках конфигурационного файла и командах обеспечит надежность и безопасность вашего сертификата.