Создать SSL-сертификат неинтерактивно [закрыт]

28

Я хочу молча, не в интерактивном режиме, создать сертификат SSL. Т.е. без запроса каких-либо данных.

Обычный способ создания сертификата:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 \
    -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem 

Я попробовал следующее:

openssl genrsa -out server.key 2048
touch openssl.cnf

cat >> openssl.cnf <<EOF
[ req ]
prompt = no
distinguished_name = req_distinguished_name

[ req_distinguished_name ]
C = GB
ST = Test State
L = Test Locality
O = Org Name
OU = Org Unit Name
CN = Common Name
emailAddress = test@email.com
EOF

openssl req -x509 -config openssl.cnf -nodes -days 7300 \
    -signkey server.key -out /etc/ssl/private/pure-ftpd.pem 

Но я все еще получаю подсказку для данных.

TheNiceGuy
источник
1
Можете ли вы дать объяснение или вывод о том, что происходит вместо желаемого результата?
Патрик
Я получаю помощь в качестве выходных данных - Что-то не так с параметрами здесь:openssl req -x509 -config openssl.cnf -nodes -days 7300 -signkey server.key -out /etc/ssl/private/pure-ftpd.pem
TheNiceGuy
Лучше всего выводить ошибки, когда у вас возникают проблемы. Я предполагаю, что ваша проблема из-за -signkey. Это недопустимая openssl reqопция в моей системе. Сообщение об ошибке будет иметь такую ​​же первую строку:unknown option -signkey
Patrick
Хорошо, что signkey должен сказать SSL, чтобы использовать предоставленный ключ, как я знаю?
TheNiceGuy
Ваш "нормальный способ создания сертификата" не запрашивает никаких данных. Вы не хотите, чтобы он что-то выводил? Тогда используйте 2> /dev/null.
wingedsubmariner

Ответы:

51

Вам не хватает, чтобы включить тему сертификата в -subj флаг. Я предпочитаю это созданию файла конфигурации, потому что его легче интегрировать в рабочий процесс и не требует последующей очистки.

Один шаг и генерация csr:

openssl req -new -newkey rsa:4096 -nodes \
    -keyout www.example.com.key -out www.example.com.csr \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com"

Один шаг самозаверяющего создания сертификата без пароля:

openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
    -keyout www.example.com.key  -out www.example.com.cert

Ни одна из этих команд не будет запрашивать какие-либо данные.

Смотрите мой ответ на этот почти идентичный вопрос на Super User.

bahamat
источник
О, это хорошее решение. Делает коды намного меньше. Спасибо: D
TheNiceGuy
1
Я не изменял его исходный файл конфигурации, так как думал, что это может быть заменой более сложного сертификата. Некоторые конфигурации, которые не могут быть представлены с -subjпараметром, особенно когда вы попадаете в расширения v3 и параметры subjectAltName.
robbat2
1
Вы также можете использовать -batch(неинтерактивный режим)
Эран Х.
Обратите внимание, что первая команда требует, чтобы ключ существовал до того, как он может быть выполнен, когда вторая команда создает их ключ и сертифицирует автоматически, потому что -subjэто базовый действующий встроенный CSR.
dragon788
@ dragon788 Спасибо за указание на это. Я починил это.
багамат
1

Команда, которую вы ищете:

openssl req -new -x509 -config openssl.cnf -nodes -days 7300 -key server.key -out /etc/ssl/private/pure-ftpd.pem

Изменения от вашей версии:

  • -new требуется генерировать что-либо
  • -key используется вместо -signkey
robbat2
источник