SSL: errore: 0B080074: routine certificato x509: X509_check_private_key: valori chiave non corrispondenti


99

Non riesco a configurare SSL. Ho cercato su Google e ho trovato alcune soluzioni ma nessuna ha funzionato per me. Ho bisogno di aiuto per favore ...

Ecco l'errore che ottengo quando provo a riavviare nginx:

root@s17925268:~# service nginx restart
Restarting nginx: nginx: [emerg] SSL_CTX_use_PrivateKey_file("/etc/nginx/conf.d/ssl/ssl.key") failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)
nginx: configuration file /etc/nginx/nginx.conf test failed

Il mio certificato proviene da StartSSL ed è valido per 1 anno.

Ecco cosa ho provato:

  • Il certificato e la chiave privata non hanno spazi finali.
  • Non sto utilizzando il file server.key predefinito.
  • Ho controllato il file nginx.conf e le direttive puntano alla chiave privata e al certificato corretti.

Ho anche controllato il modulo e ottengo un modulo diverso sia per la chiave che per il certificato.

Grazie per l'aiuto. :)

Risposte:


36

Ho un hash MD5 con risultati diversi sia per la chiave che per il certificato.

Questo dice tutto. Hai una mancata corrispondenza tra la tua chiave e il certificato.

Il modulo dovrebbe corrispondere. Assicurati di avere la chiave corretta.


A meno che non mi manchi qualcosa, VUOI assolutamente che le chiavi pubblica e privata (il file del certificato e il file della chiave) siano diverse.
Mark Berry

1
Le modulus' and the parti dell'esponente pubblico nella chiave e nel certificato devono corrispondere. Senza dubbio i file sono diversi. La chiave viene generata per un determinato certificato.
dev0z

Colpa mia. Pensavo si riferisse all'MD5 dei file. Vedo ora che i certificati hanno una funzione modulo separata: come confermare che il modulo nella tua chiave privata corrisponde al modulo nella chiave pubblica del tuo certificato SSL / TLS prima dell'installazione? .
Mark Berry

165

Una volta stabilito che non corrispondono, hai ancora un problema: cosa fare al riguardo. Spesso il certificato può essere semplicemente assemblato in modo errato. Quando una CA firma il tuo certificato, ti invia un blocco che assomiglia a qualcosa

-----BEGIN CERTIFICATE-----
MIIAA-and-a-buncha-nonsense-that-is-your-certificate
-and-a-buncha-nonsense-that-is-your-certificate-and-
a-buncha-nonsense-that-is-your-certificate-and-a-bun
cha-nonsense-that-is-your-certificate-and-a-buncha-n
onsense-that-is-your-certificate-AA+
-----END CERTIFICATE-----

ti invieranno anche un pacchetto (spesso due certificati) che rappresentano la loro autorità per concederti un certificato. questo avrà un aspetto simile

-----BEGIN CERTIFICATE-----
MIICC-this-is-the-certificate-that-signed-your-request
-this-is-the-certificate-that-signed-your-request-this
-is-the-certificate-that-signed-your-request-this-is-t
he-certificate-that-signed-your-request-this-is-the-ce
rtificate-that-signed-your-request-A
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICC-this-is-the-certificate-that-signed-for-that-one
-this-is-the-certificate-that-signed-for-that-one-this
-is-the-certificate-that-signed-for-that-one-this-is-t
he-certificate-that-signed-for-that-one-this-is-the-ce
rtificate-that-signed-for-that-one-this-is-the-certifi
cate-that-signed-for-that-one-AA
-----END CERTIFICATE-----

tranne che, sfortunatamente, non saranno così chiaramente etichettati.

una pratica comune, quindi, è raggrupparli tutti in un unico file: il certificato, quindi i certificati di firma. Ma poiché non sono facilmente distinguibili, a volte capita che qualcuno le inserisca accidentalmente nell'ordine opposto - firmando i certificati, poi il certificato finale - senza accorgersene. In tal caso, il tuo certificato non corrisponderà alla tua chiave.

Puoi testare per vedere cosa pensa di rappresentare il certificato eseguendo

openssl x509 -noout -text -in yourcert.cert

In alto, dovresti vedere "Oggetto:" e quindi elementi che assomigliano ai tuoi dati. Se invece assomiglia alla tua CA, probabilmente il tuo bundle è nell'ordine sbagliato; potresti provare a fare un backup e quindi spostare l'ultimo certificato all'inizio, sperando che sia quello che è il tuo certificato.

Se questo non funziona, potrebbe essere necessario riemettere il certificato. Quando creo un CSR, mi piace etichettare chiaramente a quale server è destinato (invece di solo ssl.key o server.key) e farne una copia con la data nel nome, come mydomain.20150306.key ecc. In questo modo è improbabile che le coppie di chiavi private e pubbliche si confondano con un altro set.


1
Questo mi ha risolto su Nginx!
TTT

24
Enorme +1 per mostrare come vedere cosa c'è nella catena di certificati.
cbednarski

Decisamente utile, passo un'ora a cercare di capire perché nginx rifiutava il certificato mentre potevo vedere che conteneva i dati
Jacopofar

3
Ok, questo ha funzionato anche per me con un certificato Comodo e Ngix. Ho appena spinto l'ultimo blocco certificato in cima. Grazie per la spiegazione dettagliata e la comprensione di questo problema.
Andy D

1
Mi aiuta! Risposta molto utile! Grazie mille!
Oleg Klimenko

70
  1. Assicurati che il certificato e la chiave siano in formato PEM. In caso contrario, convertirli utilizzando il comando openssl
  2. Controlla un hash MD5 della chiave pubblica per assicurarti che corrisponda a ciò che si trova in una chiave privata

    openssl x509 -noout -modulus -in certificate.crt | openssl md5
    openssl rsa -noout -modulus -in privateKey.key | openssl md5
    

7
Buon Consiglio ! Bene, ricevo ancora lo stesso errore anche se l'hash md5 è lo stesso per me ^^
Delphine

4
Grazie per aver incluso come verificare gli hash. Ho scoperto di avere un errore di copia incolla e mancava un solo trattino dall'inizio del mio pem. Mi hai appena risparmiato un sacco di mal di testa. Saluti.
Justin Fortier

38

Ho avuto questo problema perché stavo aggiungendo bundle e certificato nell'ordine sbagliato, quindi forse questo potrebbe aiutare qualcun altro.

Prima (che è sbagliato):

cat ca_bundle.crt certificate.crt > bundle_chained.crt

Dopo (che è giusto)

cat certificate.crt ca_bundle.crt > bundle_chained.crt

E per favore non dimenticare di aggiornare la conf appropriata (ssl_certificate ora deve puntare al crt concatenato) come

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     bundle_chained.crt;
    ssl_certificate_key www.example.com.key;
    ...
}

Dalla manpage di nginx :

Se il certificato del server e il bundle sono stati concatenati nell'ordine sbagliato, nginx non si avvierà e visualizzerà il messaggio di errore:

SSL_CTX_use_PrivateKey_file(" ... /www.example.com.key") failed
   (SSL: error:0B080074:x509 certificate routines:
    X509_check_private_key:key values mismatch)

3
Questa è in realtà una risposta migliore a questa domanda rispetto a quella accettata.
baldrs

9

Se ciò accade e stai utilizzando Let's Encrypt / certbot, è molto probabile che il motivo sia stato utilizzato al chain.pemposto di fullchain.pem.

Dovrebbe essere qualcosa del genere:

ssl_certificate /etc/certbot/live/example.com/fullchain.pem;
ssl_certificate_key /etc/certbot/live/example.com/privkey.pem;

Consulta la documentazione di certbot "Dove sono i miei certificati?"


Oppure l'ordine dei certificati nel bundle è sbagliato: prima letsencrypt, poi il proprio certificato.
ingopingo

5

Ho avuto lo stesso problema e alla fine l'ho risolto cambiando l'ordine dei blocchi pem nel file del certificato.

Il blocco certificato dovrebbe essere messo all'inizio del file, quindi blocchi intermedi, quindi blocco radice.

Ho capito questo problema confrontando un file di certificato problematico con un file di certificato funzionante.


1

I miei 5 centesimi sulla questione:

Ho avuto lo stesso problema. Dopo circa 1 ora di cura, ho scoperto di aver incollato il certificato in modo errato.

Se hai un errore come questo, controlla il tuo certificato.


1

Nel mio caso ho voluto cambiare il certificato SSL, perché ho cambiato il mio server quindi ho dovuto creare un nuovo CSR con questo comando:

 openssl req -new -newkey rsa:2048 -nodes -keyout mysite.key -out mysite.csr

Ho inviato il file mysite.csr al provider SSL dell'azienda e dopo aver ricevuto il certificato crt e quindi ho riavviato nginx, e ho ricevuto questo errore

 (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)

Dopo molte indagini, l'errore era che il modulo del file chiave non era lo stesso di quello del file crt

Quindi, per farlo funzionare, ho creato un nuovo file csr ma devo cambiare il nome del file con questo comando

 openssl req -new -newkey rsa:2048 -nodes -keyout mysite_new.key -out mysite_new.csr

Poi ho ricevuto un nuovo file crt dal fornitore dell'azienda, riavviato nginx e ha funzionato.


0

Ciò può accadere anche quando la CA emette un certificato intermedio

Mi sono imbattuto in questo problema (due volte) con nginx e nessuna delle soluzioni in questo post ha spiegato il problema. Il post sul blog qui di un simpatico signore di nome Marco lo ha inchiodato, e lo incollo qui per chiunque si imbatta anche in quello che stavo vedendo. https://medium.com/@mrkdsgn/steps-to-install-a-go-daddy-ssl-certificate-on-nginx-on-ubuntu-14-04-ff942b9fd7ff

Nel mio caso, go-daddy era la CA e questo è specifico per il modo in cui emettono i pacchetti di certificati e intermedi.

Ecco l'estratto dal post sul blog di Marco

Con Nginx, se la tua CA include un certificato intermedio, devi creare un singolo file di certificato concatenato che contenga il tuo certificato ei certificati intermedi della CA.

Puoi utilizzare questo comando per creare un file combinato chiamato example.com.chained.crt:

cat example.com.crt intermediate.crt > example.com.chained.crt


0

Nel mio caso il problema era che ho cretead sertificates senza inserire alcun dato nell'interfaccia CLI. Quando ho rigenerato i cretifici e sono entrato in tutti i campi: città, stato, ecc. Tutto è andato bene.

 sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

0

A me è successo quando ho combinato bundle.crt e main cert. Il motivo è che ho copiato il certificato principale sotto bundle.crt. Dovrebbe essere il contrario

1 / certificato principale 2 / bundle.crt


0

Per Nginx:

  1. openssl req -newkey rsa:2048 -nodes -keyout domain.com.key -out domain.com.csr

  2. File domain_com.crte domain_com.ca-bundlefile SSL , quindi copia il nuovo file incollato domain.com.chained.crt.

3: Aggiungi file nginx:

  1. ssl_certificate /home/user/domain_ssl/domain.com.chained.crt;
  2. ssl_certificate_key /home/user/domain_ssl/domain.com.key;

Tardi riavvia Nginx.


0

SL_CTX_use_PrivateKey ("/ etc / nginx / ssl / file") non riuscito (SSL: errore: 0B080074: routine dei certificati x509: X509_check_private_key: valori chiave non corrispondenti)

Questo errore può verificarsi quando la chiave privata del certificato ( ssl_certificate_key, ad esempio, .keyo .pemfile) non corrisponde al file del certificato pubblico ( ssl_certificate) nella configurazione di Nginx (check nginx.confo in sites-enabled/). Assicurati che entrambi i file corrispondano.

Controlla i log degli errori di Nginx per ulteriori dettagli (ad esempio /var/log/nginx/error.log).


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.