openssl «impossible de trouver« distinction_nom »dans la configuration»

40

J'obtiens l'erreur suivante de openssl req:

unable to find 'distinguished_name' in config
problems making Certificate Request
41035:error:0E06D06C:configuration file routines:NCONF_get_string:no value:/SourceCache/OpenSSL098/OpenSSL098-52.30.1/src/crypto/conf/conf_lib.c:329:group=req name=distinguished_name

Je crois comprendre que cela est le « sujet » qu'il ne peut pas trouver ... mais je suis en précisant que:

openssl req -new \
    -key "$PRIVATE_KEY" \
    -sha256 \
    -config "$OPTIONS_FILE" \
    -subj "/C=US/ST=California/L=San Francisco/O=ACME, Inc./CN=*.*.$DOMAIN/" \
    -out "$CSR_FILENAME"

La seule suggestion du manuel est que le fichier de configuration n'existe pas; Je peux cat "$OPTIONS_FILE", donc c'est définitivement là, et l'erreur n'est pas précédée de l'erreur dans le manuel, elle serait précédée si c'était le cas, donc je suis sûr de opensslvoir le fichier de configuration.

Mon fichier de configuration contient les éléments suivants:

[req]
req_extensions = v3_req

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.*.example.com 

… Qui est à peu près littéralement l'exemple dans les documents .

Qu'est-ce que je fais mal ici?

Thanatos
la source
1
Remarque mineure: le subjectAltName spécifié ici,, *.*.example.comn'est pas valide. (Vous ne pouvez en avoir qu'un *, et uniquement dans le composant le plus à gauche.) Cela ne concerne pas le problème ici, mais ne c / p aveuglément.
Thanatos

Réponses:

30

Autant que je sache , -configremplace une sorte de configuration interne; si vous voyez la section "EXEMPLES" de la page de manuel pour la demande openssl , elle montre un exemple de fichier de configuration avec distinguished_name. Sur une intuition, j'ai ajouté ce qui suit à ma configuration:

[req]
…
distinguished_name = req_distinguished_name

[req_distinguished_name]
# empty.

Ainsi, ma configuration entière ressemblait à quelque chose comme

[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name

[req_distinguished_name]

[v3_req]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.*.${DOMAIN}

(Notez qu'ici, ${DOMAIN}n'est pas littéral; vous devez le remplacer par votre nom de domaine DNS; je crée ce fichier dans un bashscript avec cat >"$OPTIONS_FILE" <<EOF, suivi de ce qui précède, suivi de EOF)

openssl req … -subj <my subject> -config <that file> …puis a pris mon sujet depuis la ligne de commande. Pour ceux qui sont intéressés, la commande entière a fini par ressembler à:

openssl req -new \
    -key "$PRIVATE_KEY" \
    -sha256 \
    -config "$OPTIONS_FILE" \
    -subj "/C=US/ST=California/L=San Francisco/O=My Company, Inc./CN=*.*.$DOMAIN/" \
    -out "$CSR_FILENAME"

D'après cette publication, je crois comprendre que SHA-1 est obsolète¹ pour les certificats X.509, donc -sha256(qui est un indicateur non documenté…), et subjectAltName devient obligatoire², d'où la nécessité de la configuration. Le seul problème supplémentaire que je connaisse afin de générer une CSR conforme aux meilleures pratiques ci-dessus est que vous devez utiliser une taille de clé RSA d'au moins 2048 bits (si vous utilisez RSA, ce que je suis); vous devez spécifier la taille de la openssl genrsacommande car la valeur par défaut actuelle n'est pas sécurisée.

¹Bien qu'il ne soit pas cassé au moment où j'écris ceci, les gens pensent que ce n'est qu'une question de temps. Voir "
Suppression progressive de SHA1" ²L'utilisation du CN pour le nom de domaine n'est plus recommandée; Je ne sais pas quand / si les navigateurs prévoient de déprécier cela. «Éloignez-vous de l'inclusion et de la vérification des chaînes qui ressemblent à des noms de domaine dans le nom commun du sujet.», RFC 6125
Remarque: Je suis moins certain de la valeur «correcte» de keyUsage.

Thanatos
la source
2
Voir ma note sur la question; la configuration de cette réponse n'est pas valide, car elle *.*.example.comn'est pas valide (vous ne pouvez pas avoir plusieurs *s); c / p-ers méfiez-vous.
Thanatos
La section vide req_distinguished_namen'est pas acceptée par openssl 1.1.0f, vous devez donc en avoir au moins countryName_defaultlà (voir Opensl.conf Walkthru ).
AntonK
12

J'ai eu le même problème et j'ai trouvé la réponse ici:

https://www.citrix.com/blogs/2015/04/10/how-to-create-a-csr-for-a-san-certificate-on-netscaler/

Le fichier de configuration ressemble à ceci:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = VA
L = SomeCity
O = MyCompany
OU = MyDivision
CN = www.company.com
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.company.com
DNS.2 = company.com
DNS.3 = www.company.net 
DNS.4 = company.net 

Et alors:

openssl req -new -key private.key -sha256 -nodes -config openssl.conf -out certificate.csr
Miquel
la source
1
Cela fonctionnerait aussi; Je spécifiais le sujet sur la ligne de commande (car c'était plus simple pour mon cas d'utilisation); cela le déplace simplement dans le fichier de configuration. De plus, ma question concernait OpenSSL se plaignant que le sujet ne pouvait pas être trouvé alors qu'en fait, il avait été spécifié.
Thanatos
Je ne sais pas si cette solution fonctionne - dans Windows, il signale constamment "Impossible de trouver distingué_nom dans la configuration" a tout essayé.
hagubear
1
La req_distinguished_namesection peut être laissée en blanc. Ce qu'il fait, c'est de spécifier le modèle d'étiquettes des noms de champs requis, qui peuvent être écrasés par -subj= /C=xx/ST=xx/L=xx/O=xx/OU=xx/CN=xxetc., c'est de ne pas assigner ces valeurs de champs.
Devy
5

Pour moi, cette erreur semble être causée par une création de chemin incorrecte lors de l'exécution de la commande dans Windows Server 2012, C:\OpenSSL-Win32\bin

openssl req -new -sha256 -key private.pem -out example.csr

qui génère une erreur non bloquante avant de demander le passage phare:

Impossible d'ouvrir C: \ Program Files (x86) \ Fichiers communs \ SSL / openssl.cnf pour la lecture, aucun fichier ou répertoire

De toute évidence, le chemin n'est pas valide en raison de la mauvaise barre oblique, donc le fichier de configuration doit être explicitement ajouté dans la ligne de commande:

openssl req -new -sha256 -key private.pem -config openssl.cfg -out example.csr
Alexei
la source
Cela a fonctionné pour moi, agréable et propre. Merci beaucoup!
Sossenbinder
Bien que cela résolve sans aucun doute votre problème, il ne se rapporte pas à la question d'origine en plus d'avoir à faire avec OpenSSL. (Cela pourrait être mieux en tant que question / réponse distincte.)
Thanatos
Cela a résolu mon problème avec "openssl incapable de trouver 'distinction_name' dans la configuration" merci!
chris31389
1

Cette erreur similaire:

$ openssl req -x509 -newkey rsa: 4096 -keyout _key.pem -out cert.pem -days 365 -nodes Vous êtes sur le point d'être invité à entrer des informations qui seront incorporées dans votre demande de certificat. Ce que vous êtes sur le point d'entrer est ce qu'on appelle un nom distinctif ou un DN. Il y a pas mal de champs mais vous pouvez en laisser un vide Pour certains champs, il y aura une valeur par défaut. Si vous entrez '.', Le champ sera laissé vide. ----- Nom du pays (code à 2 lettres) [AU]: problèmes lors de la demande de certificat

(Ubuntu 17.04) signifiait "vous devez ajouter

-subj "/C=US/ST=California/L=San Francis co/O=ACME, Inc./CN=*.*.$DOMAIN/"

à la ligne de commande "FWIW.

rogerdpack
la source
0

Un autre problème possible peut être des caractères UTF-8 spéciaux (invisibles). Vérifiez votre fichier à l'aide de

cat -v $OPTIONS_FILE
feri
la source