OpenSSL: Comment créer un certificat avec un DN de sujet vide?

14

Est-il possible de créer une demande de certificat PKCS # 10 / certificat X.509 avec les informations d'identification uniquement dans l'attribut / l'extension de nom alternatif du sujet? Selon X.509 4.1.2.6 Subject , le sujet peut être vide pour un certificat dont le sujet n'est pas une autorité de certification tant que subjectAltName est critique.

Mais lorsque j'utilise ce fichier de configuration avec une section de distinction_name vide:

# request.config
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no

[ req_distinguished_name ]

[ v3_req ]
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=critical,email:[email protected]

et commandes

openssl genrsa 1024 > key.pem
openssl req -new -key key.pem -out req.pem -config request.config

OpenSSL se plaint:

error, no objects specified in config file
problems making Certificate Request
yonran
la source

Réponses:

11

Cela a fonctionné pour moi:

fichier test-no-cn.cnf

[req] 
default_bits       = 4096
encrypt_key        = no
default_md         = sha256
distinguished_name = req_distinguished_name
req_extensions = v3_req

[ req_distinguished_name ]

[ v3_req ]
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=critical,email:[email protected],URI:http://example.com/,IP:192.168.7.1,dirName:dir_sect

[dir_sect]
C=DK
O=My Example Organization
OU=My Example Unit
CN=My Example Name

Générer le CSR

openssl req -new -newkey rsa:4096 -nodes -config test-no-cn.cnf -subj "/" -outform pem -out test-no-cn.csr -keyout test-no-cn.key

Signez le CSR

openssl x509 -req -days 365 -in test-no-cn.csr -signkey test-no-cn.key -out test-no-cn.crt -outform der -extensions v3_req -extfile test-no-cn.cnf

Afficher le certificat résultant

openssl x509 -inform der -in test-no-cn.crt -noout -text
bpawlak
la source
8

J'ai également rencontré cette erreur "aucun objet spécifié". Il affichait une invite comme celle-ci pour divers domaines:

US []:

Et j'appuyais simplement sur Entrée car j'avais déjà défini ces valeurs dans le fichier .cnf. Il s'est avéré que j'avais besoin de taper à nouveau toutes les valeurs, puis cela a fonctionné.

Oran Dennison
la source
Je devais faire de même. Malgré le fait de mettre des valeurs dans le fichier de configuration, cela m'a encore invité pour tous les composants DN. J'ai dû les répéter, mais cela a fonctionné au moins.
Nate W.
3
Cela est dû au fait que le fichier de configuration ne contient pas réellement de valeurs par défaut. C = USsignifie que "l'invite" pour C est "US", pas la valeur par défaut. Au lieu de cela, le fichier doit contenir C = Countryet C_default = US.
jordanbtucker
5
Oh, et c'est seulement si prompt = yes [or blank]. Si prompt = noalors C = USsignifiait "US" est la valeur par défaut.
jordanbtucker
3

Le problème vient de prompt = nola configuration d'origine. Qui fait du openssl reqprincipe que vous l' intention de spécifier des entrées de sujet dans le fichier de configuration et frappe une vérification préliminaire en req.c .

Il existe une solution de contournement: supprimez prompt = noet ajoutez plutôt -subj /à votre openssl reqligne de commande. Voici un exemple de script qui produit à la fois une CSR et un certificat auto-signé:

cat > openssl.cnf <<EOF
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req

[ req_distinguished_name ]

[ v3_req ]
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=critical,email:[email protected]
EOF
openssl req -newkey rsa:2048 -config openssl.cnf -nodes -new -subj "/" \
  -out req.csr
openssl req -newkey rsa:2048 -config openssl.cnf -nodes -new -subj "/" \
  -x509 -out cert.crt
jsha
la source
2

Essayez «commonName = facultatif» dans les sections de stratégie du fichier de configuration openssl.

Artem
la source
1

Il semble que vous saisissiez une seule valeur du groupe '"distinction_nom" de votre clavier et cela fonctionne très bien ... Je veux dire que vous n'avez pas besoin d'entrer d'autres valeurs et pouvez utiliser leur valeur par défaut (comme mentionné dans le fichier openssl.conf) qui dit

[ req ]
...
distinguished_name = req_distinguished_name
prompt = no
...

Should work fine.
hardeep
la source