web-dev-qa-db-fra.com

openssl "impossible de trouver 'nom_brancié' dans config"

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

D'après ce que je comprends, c'est le "sujet" qu'il ne peut pas trouver… cependant, je am spécifiant 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 mentionnée dans le manuel, elle serait précédée si c’était le cas, je suis donc presque sûr que openssl voit 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 de la documentation .

Qu'est-ce que je fais mal ici?

36
Thanatos

Comme je peux le dire , -config annule une sorte de configuration interne; Si vous voyez la section "EXEMPLES" de la page de manuel de openssl req , elle montre un exemple de fichier de configuration contenant distinguished_name. Sur un pressentiment, j'ai ajouté ce qui suit à ma config:

[req]
…
distinguished_name = req_distinguished_name

[req_distinguished_name]
# empty.

Ainsi, toute ma configuration 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 script bash avec cat >"$OPTIONS_FILE" <<EOF, suivi de ce qui précède, suivi de EOF.)

openssl req … -subj <my subject> -config <that file> … a ensuite pris mon sujet de la ligne de commande. Pour ceux que ça intéresse, 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"

À la date de cette publication, si j'ai bien compris, SHA-1 est obsolète¹ pour les certificats X.509, d'où -sha256 (qui est un indicateur non documenté…), et subjectAltName devient obligatoire², d'où la nécessité de la configuration. À ma connaissance, le seul casse-tête supplémentaire nécessaire pour générer un CSR de meilleure pratique que celui mentionné ci-dessus est d'utiliser une taille de clé RSA d'au moins 2048 bits (si vous utilisez RSA, ce que je suis); vous devez spécifiez la taille de la commande openssl genrsa car la valeur par défaut actuelle n’est pas sécurisée.

¹Quand ce n’est pas cassé au moment où j’écris ceci, les gens pensent que ce n’est qu’une question de temps. Voir "Suppression progressive du SHA1"
²L'utilisation du CN pour le nom de domaine n'est plus recommandée; Je ne sais pas quand/si les navigateurs envisagent de déconseiller cela. "Évitez d'inclure et de vérifier les chaînes qui ressemblent à des noms de domaine dans le nom commun du sujet.", RFC 6125
Remarque: je suis moins sûr de la valeur "correcte" de keyUsage.

24
Thanatos

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
10
Miquel

Pour moi, cette erreur semble être due à la création d'un chemin incorrect 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èrent une erreur non bloquante avant de demander le phare de passe:

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

Il est clair que le chemin est invalide à cause d'une mauvaise barre oblique. Le fichier de configuration doit donc être explicitement ajouté à la ligne de commande:

openssl req -new -sha256 -key private.pem -config openssl.cfg -out example.csr
4
Alexei

Cette erreur similaire:

$ openssl req -x509 -newkey rsa: 4096 -keyout _key.pem -out cert.pem -days 365-noeuds Vous allez être invité à entrer des informations qui seront intégrées à 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 quelques-uns. 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.

1
rogerdpack