Возможно ли, чтобы openssl пропустил запросы страны / общего имени?

82

Есть ли способ заставить openssl пропускать такие запросы, как

Country Name (2 letter code) [US]:
Organization Name (eg, company) [My Company Name LTD.]:
Common Name (eg, YOUR name) [something]:

При создании сертификатов с

openssl req -config openssl.cnf -new -x509 ...

учитывая тот факт, что эти параметры указаны в openssl.cnfфайле

например

countryName         = Country Name (2 letter code)
countryName_default     = US
countryName_min     = 2
countryName_max     = 2
0.organizationName      = Organization Name (eg, company)
0.organizationName_default  = My Company Name LTD.
commonName          = Common Name (eg, YOUR name)
commonName_max      = 64
commonName_default      = ${ENV::CN}
Цури Бар Йохай
источник
3
Вы можете передать эти вещи как параметры в командной строке. Я не помню синтаксиса.
indiv
1
спасибо, это работает! -subj '/C=US/ST=Oregon/L=Portland/CN=www.madboa.com'это путь
Цури Бар Йохай

Ответы:

129

спасибо @indiv

в соответствии с этим руководством -subj это путь, например

-subj '/CN=www.mydom.com/O=My Company Name LTD./C=US'
Цури Бар Йохай
источник
действительно, для этого не нужен файл конфигурации
Пэт
35

Другое решение состоит в использовании в вашем конфигурационном файле promptдирективы.
См. OpenSsl: формат файла конфигурации

prompt

если установлено значение, noэто отключает запрос полей сертификата и просто берет значения из файла конфигурации напрямую. Он также изменяет ожидаемый формат distinguished_nameи attributesразделов.

Есть два отдельных форматов для distinguished nameи attributeсекций.

Если для параметра приглашения установлено значение, noто эти разделы состоят только из имен полей и значений : например,

 CN=My Name
 OU=My Organization
 emailAddress=someone@somewhere.org

Это позволяет внешним программам (например, основанным на графическом интерфейсе) создавать файл шаблона со всеми именами полей и значениями и просто передавать его req.

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

 fieldName="prompt"
 fieldName_default="default field value"
 fieldName_min= 2
 fieldName_max= 4
VonC
источник
2
Это должен быть принятый ответ. Если файл конфигурации уже существует, нет смысла снова указывать параметры / CN / O / C в качестве команды.
Адитья Викас Деварапалли
1
@AdityaVikasDevarapalli Я согласен через 8 лет после того, как написал этот ответ. Но я пристрастен.
VonC
15

Создайте файл конфигурации и в разделе [req] вы можете указать prompt = no.

Например:

[req]
prompt = no
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
C = US
ST = California
L = Los Angeles
O = Our Company Llc
#OU = Org Unit Name
CN = Our Company Llc
#emailAddress = info@example.com

[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = example.com
DNS.2 = www.example.com

Затем просто выполните, например,

openssl req -new -sha256 -config THATFILE.conf -key example.com.key -out example.com.csr
ФлорианБ
источник
4

Смешанный подход не поддерживается

Может показаться интуитивно понятным, что возможен смешанный подход, когда вы можете подумать о помещении некоторых статических полей в openssl.cnf и указать некоторые (CN) через -subjпараметр. Однако это не работает.

Я протестировал сценарий, в котором я

  • поместите C, ST, L, O и OU в раздел openssl.cnf req_distinguished_nameи
  • бежал openssl reqс -subj=/CN=www.mydom.com.

openssl пожаловался, что отсутствует обязательное поле Country Name, а в сгенерированном сертификате просто указано CN в строке темы. Похоже, что -subjопция полностью перекрывает тему письма и не позволяет обновлять ни одно поле.

Это делает все следующие три подхода к предоставлению предметных областей исключительными друг для друга:

  • Подсказки
  • файл конфигурации
  • -subj вариант
Мохаммад Азим
источник
Спасибо, что подтвердили это. Это действительно должно быть отмечено как ошибка. Когда я запускаю его, -subjигнорируется, даже если указано после -config.
Otheus
1

-batchНеобязательный параметр заставляет openssl reqкоманду не запрашивать для любого из информационных полей. Я использую его таким образом без файла конфигурации для автоматизации самозаверяющих сертификатов.

Он указан в справке:

openssl help req
...
...
-batch              Do not ask anything during request generation
Даниэль Нальбах
источник
Я предполагаю, что на самом деле это не без файла конфигурации: если он не указан, он берется из местоположения по умолчанию и не работает, если он не был там установлен.
maf-soft