web-dev-qa-db-fra.com

est-il possible de faire en sorte que openssl saute les invites de pays / nom commun?

Existe-t-il un moyen de faire en sorte que openssl ignore les invites telles que

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

Lors de la création de certificats avec

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

étant donné que ces paramètres sont fournis dans le fichier openssl.cnf

par exemple.

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}
70
Tzury Bar Yochay

grâce à @ indiv

selon cela guide-subj est la voie à suivre, par exemple.

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

Une autre solution consiste à utiliser, dans votre fichier de configuration, la directive Prompt.
Voir OpenSsl: format de fichier de configuration

Prompt

s'il est défini sur la valeur no, cela désactive l'invite des champs de certificat et prend directement les valeurs du fichier de configuration. Il modifie également le format attendu du distinguished_name et attributes sections.

Il existe deux formats distincts pour le distinguished name et attribute sections.

Si l'option Invite est définie sur no, ces sections se composent simplement de noms et de valeurs de champ : par exemple,

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

Cela permet aux programmes externes (par exemple basés sur une interface graphique) de générer un fichier de modèle avec tous les noms et valeurs de champ et de le transmettre à req.

Sinon, si l'option Invite est absente ou n'est pas définie sur non, le fichier contient des informations d'invite de champ. Il se compose de lignes de la forme:

 fieldName="Prompt"
 fieldName_default="default field value"
 fieldName_min= 2
 fieldName_max= 4
30
VonC

Générez un fichier de configuration et dans la section [req], vous pouvez mettre Prompt = no.

Par exemple:

[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

Il suffit ensuite d'exécuter par exemple.

openssl req -new -sha256 -config THATFILE.conf -key example.com.key -out example.com.csr
11
FlorianB

ne approche mixte n'est pas prise en charge

Il peut être intuitif de penser qu'une approche mixte est possible, où vous pouvez penser à mettre des champs statiques dans openssl.cnf et spécifier certains (CN) via -subj option. Mais cela ne fonctionne pas.

J'ai testé un scénario où je

  • mettez C, ST, L, O et OU dans la section openssl.cnf req_distinguished_name et
  • a couru openssl req avec -subj=/CN=www.mydom.com.

openssl s'est plaint que le champ obligatoire du nom de pays est manquant et que le certificat généré contenait simplement CN dans la ligne d'objet. Semble être -subj L'option remplace complètement la ligne d'objet et ne permet pas de mettre à jour un seul champ.

Cela rend les trois approches suivantes de fourniture de domaines thématiques exclusives les unes aux autres:

  • Instructions
  • fichier de configuration
  • -subj option
1
Mohammad Azim