Errore SSL: impossibile leggere il certificato del server dal file


37

Ho configurato SSL per il mio dominio oggi e ho riscontrato un altro problema: speravo che qualcuno potesse far luce su ..

Continuo a ricevere i seguenti messaggi di errore:

[errore] Init: impossibile leggere il certificato del server dal file /etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crt
[errore] Errore libreria SSL: 218529960 errore: 0D0680A8: routine di codifica asn1: ASN1_CHECK_TLEN: tag errato
[errore] Errore libreria SSL: 218595386 errore: 0D07803A: routine di codifica asn1: ASN1_ITEM_EX_D2I: errore asn1 nidificato

Sto eseguendo Apache 2.2.16 e Ubuntu 10.10. Il mio file .crt ha i tag Begin and End ed è stato copiato esattamente dall'e-mail di conferma che ho ricevuto, molto frustrante!

Saluti!

Modifica >> Quando si tenta di verificare .crt Non sembra funzionare:

>> openssl x509 -noout -text -in domain.com.crt 
impossibile caricare il certificato
16851: errore: 0906D06C: routine PEM: PEM_read_bio: nessuna linea di partenza: pem_lib.c: 650: attesa: CERTIFICATO DI AFFIDABILITÀ

Anche >>

>> openssl x509 -text -inform PEM -in domain.com.crt
impossibile caricare il certificato
21321: errore: 0906D06C: routine PEM: PEM_read_bio: nessuna linea di partenza: pem_lib.c: 650: attesa: CERTIFICATO DI AFFIDABILITÀ
>> openssl x509 -text -inform DER -in domain.com.crt
impossibile caricare il certificato
21325: errore: 0D0680A8: routine di codifica asn1: ASN1_CHECK_TLEN: tag errato: tasn_dec.c: 1316:
21325: errore: 0D07803A: routine di codifica asn1: ASN1_ITEM_EX_D2I: errore asn1 nidificato: tasn_dec.c: 380: Tipo = X509

Modifica >> (Evviva l'aiuto a proposito)

>> grep '^ -----' domain.com.crt
----- INIZIA ATTESTATO -----
----- CERTIFICATO DI FINE -----

Hanno appena inviato un'e-mail alla società che fornisce il certificato, hanno risposto>

Ho controllato il file CSR che hai fornito e posso assicurarti che questo è stato generato correttamente. L'errore che stai riscontrando è causato dal fatto che stai utilizzando una riga di comando errata per l'installazione del CSR. Dovrai modificare questo domain.com.crt dalla tua riga di comando con il nome corrispondente del tuo dominio.

  • attualmente crt è impostato su mysite.com.crt - ho usato domain.com.crt come esempio

Potresti per favore mostrarci l'output di grep '^-----' domain.com.crt?
quanti

Williamsowen, l'intero punto di un certificato deve essere mostrato a chiunque si colleghi al tuo server web; non è una cosa privata. Detto questo, valuteresti di allegare o pubblicare l'intero certificato qui in modo da poterlo guardare direttamente invece di indovinare?
MadHatter supporta Monica il

Aspetta, vedo che hai appena accettato la mia risposta. Ciò significa che sono stati gli avanzamenti di riga di Windows terminali a causare il problema?
MadHatter supporta Monica il

MadHatter - scuse! Nuovo per questo, ma ho appena funzionato, la formattazione dall'e-mail che ho ricevuto era disattivata, non potevo ringraziarvi abbastanza ragazzi!
williamsowen,

Risposte:


49

È possibile che le linee siano ^ M terminate? Questo è un potenziale problema quando si spostano file da Windows a sistemi UNIX. Un modo semplice per verificare è usare viin modalità "mostrami il binario", con vi -b /etc/apache2/domain.ssl/domain.ssl.crt/domain.com.crt.

Se ogni riga termina con un controllo-M, in questo modo

-----BEGIN CERTIFICATE-----^M
MIIDITCCAoqgAwIBAgIQL9+89q6RUm0PmqPfQDQ+mjANBgkqhkiG9w0BAQUFADBM^M
MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg^M
THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTEyMTgwMDAwMDBaFw0x^M

hai un file nel formato con terminazione di linea di Windows e apache non li adora.

Le opzioni includono lo spostamento del file di nuovo, prestando maggiore attenzione; o usando il dos2unixcomando per eliminare quelli; puoi anche rimuoverli all'interno di vi, se stai attento.


Modifica : grazie a @ dave_thompson_085, che sottolinea che questa risposta non si applica più nel 2019. Cioè, Apache / OpenSSL sono ora tolleranti con ^ linee terminate M, quindi non causano problemi. Detto questo, altri errori di formattazione, diversi esempi dei quali compaiono nei commenti, possono ancora causare problemi; verificare attentamente se questi sono stati spostati tra i sistemi.


Per me è stato un errore di copia e incolla, omettendo il primo paio di caratteri dell'intestazione -----BE... Grazie per l'ispirazione per un doppio controllo!
cfi,

Grazie, questo era il mio problema! In notepad ++ in Windows è possibile utilizzare la finestra di dialogo di conversione EDIT-EOL per modificare il formato LF corretto. E puoi usare il menu Visualizza-Mostra simbolo per vedere effettivamente le terminazioni di linea LF di Windows CR.
Bjørn,

1
Il mio certificato è semplicemente diventato un file vuoto. Qualcosa si è rotto nella generazione immagino. Questa risposta mi ha incoraggiato ad aprirlo e vederlo.
flickerfly,

Nota per gli utenti Windows: probabilmente dovrai convertire il formato di linea in UNIX anche se sei su Windows. DOS2UNIX non è un comando di Windows, ma Linux. La buona notizia, Git per Windows fornisce. Probabilmente lo fa anche CigWin, ma non ne sono sicuro.
Ignacio Segura,

Nota per gli utenti Windows: un elenco di autorizzazioni nella scheda Proprietà / Sicurezza di Windows Explorer viene incasinato dopo aver copiato un file con autorizzazioni limitate da una condivisione di rete con cp di Cygwin. Ad esempio, ho visto un "NUL SID", voci Disabilitate per tutti e per utenti di dominio.
Eel GhEEz,

19

Per chiunque arrivi a questa pagina con un errore simile quando prova a leggere una richiesta di firma certificato (CSR) (nota che OP sta leggendo un certificato): assicurati di usare il comando OpenSSL giusto. x509è per i certificati ed reqè per i CSR:

openssl req -in server.csr -text -noout

vs

openssl x509 -in server.crt -text -noout

17

Ho appena girato in tondo su questo, e si è scoperto che avevo i certificati nel modo sbagliato - ad es

SSLCertificateFile    /etc/apache2/ssl/server.key
SSLCertificateKeyFile /etc/apache2/ssl/server.crt

invece di:

SSLCertificateFile    /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key

Qualcosa da verificare se stai riscontrando questo errore.


11
>> openssl x509 -noout -text -in domain.com.crt 
unable to load certificate
16851:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:Expecting: TRUSTED CERTIFICATE

Sospetto che tu abbia un problema con il formato del certificato.

Esegui entrambi i seguenti due comandi e forniscici l'output:

openssl x509 -text -inform DER -in domain.com.crt 
openssl x509 -text -inform PEM -in domain.com.crt 

Grazie per questa risposta Sono stato in grado di determinare il formato che le mie SA fornite come ".cer" erano già ".pem" in incognito
javafueled

10

Nel mio caso, ho scoperto che il mio certificato aveva caratteri "-" diversi. Deve essere stato un problema di copia / incolla da parte dell'amministratore che ha inserito il certificato sul server, sostituendo l'editor di testo - con un carattere unicode speciale lungo la strada.

Ci sono volute ore per diagnosticare, e alla fine l'ho appena indovinato, ho modificato il certificato in vi, cancellato i caratteri "-" esistenti e li ho riscritti.

Spero che questo aiuti qualcuno.


8

Nel mio caso, ho riscontrato gli errori dell'OP perché chiunque avesse creato il file .crt per me in primo luogo aveva davvero creato un file formattato .PEM e lo aveva chiamato .crt.

L'ho scoperto correndo nella seguente guida utile: https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how -to-convert-li

tutto quello che dovevo fare era rinominare il mio .crt in un .pem, e avevo finito! La guida ha indicato che gli errori della domanda del PO implicano che il file di input è già formattato PEM, quindi non è possibile tentare di convertirlo in .pem da un formato DER, ed è di fatto superfluo.


4

Assicurarsi che il file non contenga spazi finali o iniziali all'interno del file del certificato. Accertarsi attentamente che non vi siano spazi o spazi vuoti all'interno del file del certificato, selezionando l'intero testo e cercando spazi vuoti in un editor di solo testo.

Controlla anche se effettivamente tutti i file configurati esistono e sono corretti.

Ad esempio: sull'altro tuo post dici che il tuo file .key è chiamato my domain.com.crt mentre nella configurazione vhost hai domain.com.crt

SSLCertificateFile /etc/apache2/domain.ssl/domain.ssl.crt/domain.com.crt
SSLCertificateKeyFile /etc/apache2/domain.ssl/domain.ssl.key/domain.com.key
SSLCertificateChainFile /etc/apache2/domain.ssl/ca.crt
SSLCACertificateFile /etc/apache2/domain.ssl/gs_intermediate_ca.crt

Controlla di nuovo che tutti i file sopra elencati esistano davvero e siano validi.


1
Controlla anche che i trattini siano trattini. Editor di testo Microsoftian piace cambiare --in ; non è stato molto divertente da risolvere.
Shane Madden

sì, dato che sei su Ubuntu, apri un terminale e usa nano per esempio. In questo modo sarai sicuro.
George Tasioulis,

Ciao, grazie per il tuo feedback: ho controllato tutto e tutto va bene. Ho provato a verificare il file crt comunque ottengo:sudo openssl x509 -noout -text -in domain.com.crt unable to load certificate 16851:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:Expecting: TRUSTED CERTIFICATE
williamsowen,

1
La prima riga del file domain.com.crt inizia con -----BEGIN CERTIFICATE-----e l'ultima riga termina con -----END CERTIFICATE-----?
George Tasioulis,

1

Se qualcun altro dovesse riscontrare questo problema e i log degli errori di Apache dovessero indicare qualcosa del tipo:

Init: impossibile leggere il certificato del server dal file /etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crt

Assicurati di non aver scambiato la tua chiave e i file dei certificati nelle dichiarazioni nella configurazione di apache. Avevo puntato la chiave sul mio file di certificato e il certificato sul mio file di chiave. Questo post mi ha aiutato a capire il problema, ma volevo segnalarlo come un altro potenziale problema / soluzione.


0

Il mio problema (con lo stesso errore durante l'installazione di un nuovo server con Apache 2.4) era che Apache (2.4) non riusciva a leggere il file binario .crt. L'ho importato nel mio archivio di certificati personali (con mmc) ed esportato come X.509 (.cer) codificato in base 64. Rinominato il file esportato con lo stesso nome (.crt) (usato nel mio httpd-ssl.conf) e ha funzionato di nuovo! Lo stesso certificato ha funzionato sul mio vecchio server, forse Apache 2.4 è più rigoroso di 2.2? In bocca al lupo.


0

Nel mio caso, ha a che fare con la BOM presente nel file. Si potrebbe spogliarlo in questo modo:

tail -c +4 ssl.crt > ssl2.crt

Non sono sicuro se ci vogliono sempre 3 byte, quindi il modo migliore deve essere:

vi -c 'se nobomb' -c wq ssl.crt

0

Ho avuto lo stesso errore perché ho cambiato .key con i nomi di file .crt


0

Ho avuto un problema simile quando ho usato accidentalmente un certificato IIS di tipo p7b fornito dal cliente nella configurazione di Apache. La conversione del certificato in formato x509 ha corretto l'errore. Entrambi i tipi sembrano uguali sulla superficie ma apparentemente diversi all'interno.


0

Ho avuto questo problema perché mi è stato inviato il contenuto di un file .p7b in stile IIS incollato in un'e-mail. Ha i tag "----- INIZIA CERTIFICATO -----" e "----- FINE CERTIFICATO -----", proprio come .pem, e il contenuto usa una codifica base64 dall'aspetto simile. L'ho convertito in un file * .pem in questo modo:

openssl pkcs7 -print_certs -in cert.p7b -out cert.cer

Successivamente, Apache 2.2 è stato felice.


0

Di recente ho riscontrato questo problema utilizzando Lets Encrypt (letsencrypt) su Windows. Il certificato è tornato codificato come UTF-16LE. La conversione in UTF-8 (usando dos2unix) ha risolto il problema.


0

Nel mio caso c'erano solo le righe vuote. Quando ho incollato il file crt da ntepad o notepad ++ in nano, ho sempre ottenuto smth come

sdgrgrgr rgregegreg rgrgreg
rgregreg rggregregr rgregrg

rimuovere gli spazi vuoti e mettere tutto in una riga risolto il problema Ad esempio:

sdgrgrgr
rgregegreg
rgrgreg
rgregreg
rggregregr
rgregrg
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.