Подтвердить что ты не робот

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

Есть ли способ сделать 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}
4b9b3361

Ответ 1

благодаря @indiv

в соответствии с этим guide -subj - это способ, например,

-subj '/CN=www.mydom.com/O=My Company Name LTD./C=US'

Ответ 2

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

prompt

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

Существует два разных формата для разделов distinguished name и attribute.

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

 CN=My Name
 OU=My Organization
 [email protected]

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

Альтернативно, если параметр приглашения отсутствует или не установлен в no, то файл содержит информацию о запросе поля. Он состоит из линий вида:

 fieldName="prompt"
 fieldName_default="default field value"
 fieldName_min= 2
 fieldName_max= 4

Ответ 3

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

Например:

[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 = [email protected]

[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 пожаловался на то, что обязательное поле "Название страны" отсутствует, и в сгенерированном сертификате только что был CN в строке темы. Похоже, опция -subj полностью перекрывает строку темы и не позволяет обновлять одно поле.

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

  • Запрашивает
  • конфигурационный файл
  • Опция -subj