openssl "impossibile trovare 'distinguished_name' in config"


40

Ottengo il seguente errore da 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

La mia comprensione è che questo è il "Soggetto" che non riesce a trovare ... tuttavia, sto specificando che:

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"

L'unico suggerimento del manuale è che il file di configurazione non esiste; Posso cat "$OPTIONS_FILE", quindi è sicuramente lì, e l'errore non è preceduto dall'errore che il manuale osserva che sarebbe preceduto se fosse così, quindi sono abbastanza sicuro di opensslvedere il file di configurazione.

Il mio file di configurazione contiene quanto segue:

[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 

... che è praticamente letteralmente l'esempio nei documenti .

Cosa sto facendo di sbagliato qui?


1
Nota minore: il subjectAltName specificato qui, *.*.example.comnon è valido. (Puoi avere solo 1 *, e solo nel componente più a sinistra.) Questo non si riferisce al problema qui, ma non c / p ciecamente.
— Thanatos,

Risposte:


30

Quasi come posso dire , -configsta scavalcando una sorta di configurazione interna; se vedi la sezione "ESEMPI" per la pagina man di openssl req , mostra un esempio di un file di configurazione con distinguished_nameal suo interno. In un sospetto, ho aggiunto quanto segue alla mia configurazione:

[req]
…
distinguished_name = req_distinguished_name

[req_distinguished_name]
# empty.

Quindi, la mia intera configurazione sembrava qualcosa del genere

[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}

(Nota che qui ${DOMAIN}non è letterale; dovresti sostituirlo con il tuo nome di dominio DNS; creo questo file in uno bashscript con cat >"$OPTIONS_FILE" <<EOF, seguito da quello sopra, seguito da EOF)

openssl req … -subj <my subject> -config <that file> …poi ho preso il mio argomento dalla riga di comando. Per chi fosse interessato, l'intero comando ha finito per apparire come:

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"

A partire da questo post, la mia comprensione è che SHA-1 è deprecato¹ per i certificati X.509, quindi -sha256(che è una bandiera non documentata ...), e subjectAltName sta diventando richiesto², da qui la necessità della configurazione. L'unico gotcha aggiuntivo che conosco per generare un CSR di best practice a quanto sopra è che dovresti usare una dimensione della chiave RSA di almeno 2048 bit (se stai usando RSA, che sono); è necessario specificare la dimensione del openssl genrsacomando poiché il valore predefinito corrente non è sicuro.

¹ Sebbene non sia rotto nel momento in cui scrivo, la gente sente che è solo una questione di tempo. Vedere "SHA1 a tramonto
graduale " ² L'uso di CN per il nome di dominio non è più raccomandato; Non sono sicuro quando / se i browser prevedono di deprecarlo. "Allontanati dall'inclusione e dal controllo di stringhe che assomigliano a nomi di dominio nel nome comune del soggetto.", RFC 6125
Nota: non sono certo del valore "corretto" di keyUsage.


2
Vedi la mia nota sulla domanda; la configurazione in questa risposta non è valida, in quanto *.*.example.comnon è valida (non è possibile avere più *s); attenzione.
— Thanatos,

La sezione vuota req_distinguished_namenon è accettata da openssl 1.1.0f, quindi è necessario averne almeno countryName_defaultlì (fare riferimento a Openssl.conf Walkthru ).
— AntonK,

12

Ho avuto lo stesso problema e ho trovato la risposta qui:

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

Il file di configurazione è simile al seguente:

[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 

E poi:

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

1
Anche questo funzionerebbe; Stavo specificando l'argomento sulla riga di comando (dato che era più semplice per il mio caso d'uso); questo lo sposta semplicemente nel file di configurazione. Inoltre, la mia domanda riguardava OpenSSL lamentando che l'argomento non poteva essere trovato quando, in effetti, era stato specificato.
— Thanatos,

Non sono sicuro che questa soluzione funzioni - in Windows riporta costantemente "Impossibile trovare il nome_distinto nella configurazione" provato tutto.
— hagubear

1
La req_distinguished_namesezione può essere lasciata vuota. Ciò che fa è specificare il modello di etichette dei nomi dei campi richiesti, che possono essere sovrascritti da -subj= /C=xx/ST=xx/L=xx/O=xx/OU=xx/CN=xxecc., Ma non assegnare quei valori di campo.
— Devy,

5

Per me questo errore sembra essere stato causato dalla creazione errata del percorso durante l'esecuzione del comando in Windows Server 2012, C:\OpenSSL-Win32\bin

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

che ha generato un errore non bloccante prima di richiedere pass phare:

Impossibile aprire C: \ Programmi (x86) \ File comuni \ SSL / openssl.cnf per la lettura, Nessun file o directory

Chiaramente, il percorso non è valido a causa della barra sbagliata, quindi il file di configurazione deve essere aggiunto esplicitamente nella riga di comando:

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

Questo ha funzionato per me, bello e pulito. Molte grazie!
— Sossenbinder,

Sebbene questo senza dubbio risolva il tuo problema, non si collega alla domanda originale oltre a dover fare w / OpenSSL. (Potrebbe essere meglio come una domanda / risposta separata.)
— Thanatos,

Questo risolto il mio problema con "openssl impossibile trovare 'distinguished_name' in config" grazie!
— chris31389

1

Questo errore simile:

$ openssl req -x509 -newkey rsa: 4096 -keyout _key.pem -out cert.pem -days 365 -nodes Stai per essere invitato a inserire le informazioni che verranno incorporate nella tua richiesta di certificato. Quello che stai per inserire è quello che viene chiamato un nome distinto o un DN. Ci sono molti campi ma puoi lasciarne alcuni vuoti Per alcuni campi ci sarà un valore predefinito, se inserisci '.', Il campo sarà lasciato vuoto. ----- Nome paese (codice di 2 lettere) [AU]: problemi durante la richiesta del certificato

(Ubuntu 17.04) significava "devi aggiungere

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

alla riga di comando "FWIW.


0

Un altro possibile problema può essere costituito da caratteri UTF-8 speciali (invisibili). Controlla il tuo file usando

cat -v $OPTIONS_FILE
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.