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.