Неинтерактивное создание запросов SSL-сертификатов

15

Есть ли способ создания SSL-запросов, указав все необходимые параметры в начальной команде? Я пишу панель управления веб-сервером на основе CLI, и я хотел бы избежать использования ожидаемого при выполнении, opensslесли это возможно.

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

$ openssl req -new -newkey rsa:2048 -nodes -sha256 -keyout foobar.com.key -out foobar.com.csr
Generating a 2048 bit RSA private key
.................................................+++
........................................+++
writing new private key to 'foobar.com.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New Sweden
Locality Name (eg, city) []:Stockholm
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Scandanavian Ventures, Inc.
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:foobar.com
Email Address []:gustav@foobar.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:FooBar

Я надеюсь увидеть что-то вроде этого: (неработающий пример)

$ openssl req -new -newkey rsa:2048 -nodes -sha256 -keyout foobar.com.key -out foobar.com.csr \
-Country US \
-State "New Sweden" \
-Locality Stockholm \
-Organization "Scandanavian Ventures, Inc." \
-CommonName  foobar.com \
-EmailAddress gustav@foobar.com \
-Company FooBar

Прекрасная справочная страница ничего не сказала по этому поводу, и я не смог ничего найти через Google. Должна ли генерация запроса сертификата SSL быть интерактивным процессом или есть какой-то способ указать все параметры в одной команде?

Это на дистрибутиве Linux, основанном на Debian openssl 1.0.1.

dotancohen
источник
@ceejayoz: Очень хорошо, спасибо. א) Где эти opensslфлаги задокументированы? ב) Что вы гуглили, чтобы найти это? Спасибо!
Dotancohen
1
Я погуглил "CSR генерировать скрипт". -subjПараметр документирован (не очень подробно) на openssl.org/docs/apps/req.html .
ceejayoz
Также возможно создать файл конфигурации, обычно называемый openssl.cnf.
Себикс

Ответы:

16

вам не хватает двух частей:

сюжетная линия, которую можно назвать

-subj "/C=US/ST=New Sweden/L=Stockholm /O=.../OU=.../CN=.../emailAddress=..."
  • замена ... со значением, X=будучи Х509 код ( O rganisation / O rganisation U нит / и т.д. ...)

значение пароля, которое можно назвать

-passout pass:client11
-passin  pass:client11
  • которые дают пароль ввода / вывода

мой призыв к новому ключу выглядит

openssl genrsa -aes256 -out lib/client1.key -passout pass:client11 1024
openssl rsa -in lib/client1.key -passin pass:client11 -out lib/client1-nokey.key

openssl req -new -key lib/client1.key -subj req -new \
    -passin pass:client11 -out lib/client1.csr \
    -subj "/C=US/ST=New Sweden/L=Stockholm/O=.../OU=.../CN=.../emailAddress=..."

(теперь, когда я это вижу, есть два -new...)

Archemar
источник
2

Проверьте -batchвариант, как описано в официальных документах .

выталкивания
источник
2
Спасибо. Я вижу, что пакетный вариант существует, но, похоже, нет объяснения, как его использовать.
dotancohen
Почему этот ответ был отвергнут? Разве партия не является возможным решением проблемы? Из названия это звучит так, как будто это может быть.
dotancohen
Это определенно единственный способ сделать это с опцией -batch, почему понизить рейтинг я понятия не имею. Утверждение «Прекрасной справочной странице нечего было сказать по этому вопросу» является ложным из-за опции «-batch».
извлечь
Голосовали за упоминание пакета, поскольку, хотя я и не использовал его в решении, оно может пригодиться в будущем.
dotancohen
-1

Я добавляю к своей обычной команде openssl:

openssl req -x509 -nodes -days 7300 -newkey rsa: 2048 -keyout /etc/ssl/private/key.pem -out /etc/ssl/private/cert.pem

Эта строка:

-subj "/C=PE/ST=Lima/L=Lima/O=Acme Inc. /OU=IT Department/CN=acme.com"

Описание:

  • Название страны (двухбуквенный код) [AU]: PE
  • Название штата или провинции (полное название) [Some-State]: Лима
  • Название населенного пункта (например, город) []: Лима
  • Название организации (например, компания) [Internet Widgits Pty Ltd]: Acme Inc.
  • Название подразделения (например, раздел) []: ИТ-отдел
  • Общее имя (например, полное доменное имя сервера или ваше имя) []: acme.com

Используйте "/" как разделитель.

JorgeM
источник
1
Кажется, что принятый ответ уже включает эту информацию. В противном случае, спасибо.
dotancohen