54 votes

openssl "impossible de trouver 'distinguished_name' dans la configuration"

Je reçois 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

Si j'ai bien compris, c'est le "sujet" qu'il ne peut pas trouver Cependant, je 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" Il est donc bien présent, et l'erreur n'est pas précédée de l'erreur que le manuel indique qu'elle serait précédée si c'était le cas. 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 

ce qui est à peu près littéralement l'exemple dans les docs .

Qu'est-ce que je fais de mal ici ?

42voto

Thanatos Points 2232

D'après ce que je peux dire , -config remplace une sorte de configuration interne ; si vous consultez la section "EXEMPLES" de l'article la page de manuel de openssl req il montre un exemple d'un fichier de configuration avec distinguished_name en elle. 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 fichier bash script avec cat >"$OPTIONS_FILE" <<EOF suivi de ce qui précède, suivi de EOF )

openssl req … -subj <my subject> -config <that file> … puis j'ai pris mon sujet en 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"

Au moment de la publication de cet article, je crois savoir que SHA-1 est déprécié¹ pour les certificats X.509. -sha256 (qui est un drapeau non documenté ), et subjectAltName devient obligatoire², d'où la nécessité de la configuration. La seule autre difficulté que je connaisse pour générer une RSC conforme aux meilleures pratiques est que vous devez utiliser une clé RSA d'au moins 2048 bits (si vous utilisez RSA, ce qui est mon cas) ; vous devez aussi utiliser une clé de sécurité de type "C". debe spécifier la taille à l openssl genrsa car la valeur par défaut actuelle n'est pas sûre.

¹Bien qu'elle ne soit pas brisée au moment où j'écris ces lignes, les gens pensent que ce n'est qu'une question de temps. Voir <a href="http://googleonlinesecurity.blogspot.com/2014/09/gradually-sunsetting-sha-1.html" rel="nofollow noreferrer">"Mise en veilleuse progressive de SHA1"</a>
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 le déprécier. "Ne plus inclure et vérifier les chaînes de caractères qui ressemblent à des noms de domaine dans le nom commun du sujet", <a href="https://www.rfc-editor.org/rfc/rfc6125#section-1.5" rel="nofollow noreferrer">RFC 6125</a>
Note : Je suis moins sûr de la valeur "correcte" de <code>keyUsage</code> .

18voto

Miquel Points 341

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 puis :

openssl req -new -key private.key -sha256 -nodes -config openssl.conf -out certificate.csr

5voto

Alexei Points 493

Pour moi, cette erreur semble être causée par 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 sortent une erreur non bloquante avant de demander le pass phare :

Impossible d'ouvrir C:\Program Fichiers (x86) \Common ファイル \SSL /openssl.cnf pour la lecture, Aucun fichier ou répertoire

Il est clair que le chemin n'est pas valide à cause 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

1voto

NT. Points 109

Cette erreur similaire :

$ openssl req -x509 -newkey rsa:4096 -keyout _key.pem -out cert.pem -days 365 -nodes On va vous demander d'entrer des informations qui seront qui seront incorporées dans votre demande de certificat. Ce que vous êtes sur le point de ce que l'on appelle un nom distinctif ou un DN. Il y a plusieurs quelques champs mais vous pouvez en laisser certains vides. Pour certains champs, il y aura une valeur par défaut. Si vous entrez '.', le champ sera laissé vide. ----- Nom du pays (code de deux lettres) [AU]:problèmes liés à 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.

0voto

MKK Points 2663

Les caractères UTF-8 spéciaux (invisibles) peuvent également poser problème. Vérifiez votre fichier en utilisant

cat -v $OPTIONS_FILE

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X