Devo convertire .CER in .CRT per i certificati SSL Apache? Se é cosi, come?


121

Ho bisogno di configurare un server Apache 2 con SSL.

Ho il mio file * .key, ma tutta la documentazione che ho trovato online, i file * .crt sono specificati e la mia CA mi ha fornito solo un file * .cer.

I file * .cer sono gli stessi di * .crt? In caso contrario, come posso convertire CER in formato CRT?


11
CERe le CRTestensioni non significano nulla. Diversi fornitori di PKI utilizzano estensioni diverse per la stessa cosa. Se il file è binario, probabilmente è codificato ASN.1 / DER. Se il file è leggibile dall'uomo con -----BEGIN CERTIFICATE-----, la sua codifica PEM. Cosa hai (DER o PEM) e di cosa hai bisogno (DER o PEM)?
jww

Risposte:


106

Le estensioni di file per i certificati crittografici non sono così standardizzate come ci si aspetterebbe. Per impostazione predefinita, Windows considera il doppio clic su un .crtfile come una richiesta per importare il certificato nell'archivio certificati radice di Windows, ma considera un .cerfile come una richiesta solo per visualizzare il certificato. Quindi, sono diversi nel senso che Windows ha un significato diverso intrinseco per ciò che accade quando fai doppio clic su ogni tipo di file.

Ma il modo in cui Windows li gestisce quando fai doppio clic su di essi è l'unica differenza tra i due. Entrambe le estensioni rappresentano semplicemente che contiene un certificato pubblico. Puoi rinominare un file di certificato per utilizzare un'estensione al posto dell'altra in qualsiasi file di sistema o di configurazione che ho visto. E su piattaforme non Windows (e anche su Windows), le persone non sono particolarmente attente a quale estensione usano e le trattano entrambe in modo intercambiabile, poiché non c'è differenza tra loro fintanto che il contenuto del file è corretto.

A rendere le cose più confuse è che ci sono due modi standard per memorizzare i dati del certificato in un file: uno è una codifica X.509 "binaria" e l'altro è una codifica base64 "testo" che di solito inizia con " -----BEGIN CERTIFICATE-----". Questi codificano gli stessi dati ma in modi diversi. La maggior parte dei sistemi accetta entrambi i formati, ma, se necessario, puoi convertirne uno nell'altro tramite openssl o altri strumenti. La codifica all'interno di un file di certificato è realmente indipendente dall'estensione che qualcuno ha fornito al file.


La mia comprensione è che sono entrambe codifiche X.509. Non dici altrimenti, ma l'uso asimmetrico di x.509 sopra potrebbe suggerire il contrario a un lettore. Per il lettore, vale la pena notare che i certificati possono essere convertiti avanti e indietro tra queste 2 codifiche, perché, come menziona questa risposta, contengono le stesse informazioni. Vedi l'altra risposta con i comandi openssl x509 -inform.
FreeText

55

Secondo la documentazione mod_ssl :

SSLCertificateFile: 
   Name: SSLCertificateFile
   Description: Server PEM-encoded X.509 certificate file

Il file del certificato deve essere un file del certificato X.509 con codifica PEM:

openssl x509 -inform DER -in certificate.cer -out certificate.pem

Questo risolverà gli errori del certificato SSL, quando è dietro zscaler, in esecuzione vagrantsu win( vbox homestead), installando i nostri certificati root attendibili nella casella vagrant? scpLi avevo , poi ho usato la tua conversione e li ho collegati simbolicamente e ho /etc/ssl/certsanche copiato il contenuto nel ca-certificates.crtfile prima del reprovisioning, e continuo a ricevere un google-recaptcha tls sslerrore sulla file_get_contentsdev box.
blamb

54

Fondamentalmente ci sono due tipi di codifica del certificato CER, DER e Base64. Quando il tipo DER restituisce un errore durante il caricamento del certificato (routine di codifica asn1), provare il PEM e funzionerà.

openssl x509 -inform DER -in certificate.cer -out certificate.crt

openssl x509 -inform PEM -in certificate.cer -out certificate.crt


3
Il formato DER ha funzionato per me quando il mio file cer sembrava binario quando ho provato a modificarlo ... grazie!
Brad Parks il

1
Per il lettore, ho trovato utile la pagina man di openssl. Per me era ambiguo quale dei comandi facesse cosa (cioè in che modo era la conversione). Il parametro -inform specifica il formato del file -in di input, che è intuitivo, ma se sei già un po 'confuso, è bello saperlo esplicitamente. Vedi openssl.org/docs/manmaster/man1/openssl-x509.html
FreeText

32

Presumo che tu abbia un file .cer contenente i dati del certificato con codifica PKCS # 7 e desideri convertirlo in dati del certificato con codifica PEM (in genere un file .crt o .pem). Ad esempio, un file .cer contenente dati con codifica PKCS # 7 ha il seguente aspetto:

----- INIZIA PKCS7 -----
MIIW4gYJKoZIhvcNAQcCoIIW0zCCFs8CAQExADALBgkqhkiG9w0BBwGggha1MIIH
...
POI9n9cd2cNgQ4xYDiKWL2KjLB + 6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G
+ bKhADEA
----- FINE PKCS7 -----

I dati del certificato PEM hanno questo aspetto:

----- BEGIN CERTIFICATE -----
MIIHNjCCBh6gAwIBAgIQAlBxtqKazsxUSR9QdWWxaDANBgkqhkiG9w0BAQUFADBm
...
nv72c / OV4nlyrvBLPoaS5JFUJvFUG8RfAEY =
----- CERTIFICATO DI FINE -----

È disponibile un comando OpenSSL che convertirà i file .cer (con dati PKCS # 7) nei dati PEM che potresti aspettarti di incontrare (il BEGIN CERTIFICATEblocco nell'esempio sopra). Puoi forzare i dati PKCS # 7 in formato PEM con questo comando su un file che chiameremo certfile.cer:

openssl pkcs7 -text -in certfile.cer -print_certs -outform PEM -out certfile.pem

Tieni presente che un file .cer o .pem potrebbe contenere uno o più certificati (possibilmente l'intera catena di certificati).


1
Sarebbe utile se avessi una fonte di questa ipotesi. Penso che le persone usino (forse in modo errato) .cer, .crt, .pem in modo intercambiabile), quindi avere una fonte di verità correggerebbe le idee sbagliate.
PhilT

30

CER è un certificato X.509 in formato binario, codificato DER .
CRT è un certificato X.509 binario, incapsulato nella codifica di testo ( base 64 ).

Non è la stessa codifica.


13
Questa risposta è semplicemente sbagliata. Sia .CER che .CRT possono utilizzare la codifica DER o PEM (testo). Le estensioni .pem e .der riflettono la codifica, .cer e .crt no. Maggiori dettagli .
eis

1
In realtà, dovrebbe essere l'opposto. Ma tutte queste estensioni sono state confuse per molto tempo, quindi non dovresti fare affidamento su di esse.
Claudio Floreani

16

La risposta alla domanda su come convertire un file .cer in un file .crt (sono codificati in modo diverso!) È:

openssl pkcs7 -print_certs -in certificate.cer -out certificate.crt

5
Questo non ha funzionato per me! Ho usato:openssl x509 -inform der -in certificate.cer -out certificate.pem
sj59

Ricevo questo messaggio di errore:unable to load PKCS7 object
friederbluemle

@friederbluemle hai controllato questa risposta? serverfault.com/questions/417140/…
Alexander Presber

Questo è ciò che ho dovuto fare per ottenere il mio certificato positivoSSL pronto per essere convertito in PKCS12 per l'uso in Azure.
Owen

16

Uso il comando:

openssl x509 -inform PEM -in certificate.cer -out certificate.crt

Ma CER è un certificato X.509 in formato binario, codificato DER. CRT è un certificato X.509 binario, incapsulato nella codifica di testo (base 64).

Per questo motivo, forse dovresti usare:

openssl x509 -inform DER -in certificate.cer -out certificate.crt

E poi per importare il tuo certificato:

Copia la tua CA nella directory:

/usr/local/share/ca-certificates/

Usa comando:

sudo cp foo.crt /usr/local/share/ca-certificates/foo.crt

Aggiorna l'archivio CA:

sudo update-ca-certificates


5

Se il tuo file cer ha un formato binario, devi convertirlo con

openssl x509 -inform DER -in YOUR_CERTIFICATE.cer -out YOUR_CERTIFICATE.crt

3

I file .cer e .crt dovrebbero essere intercambiabili per quanto riguarda l'importazione in un keystore.

Dai un'occhiata al contenuto del file .cer. Cancella qualsiasi cosa prima -----BEGIN CERTIFICATE-----e dopo la -----END CERTIFICATE-----riga. Rimarrai con le righe BEGIN / END con un mucchio di materiale codificato Base64 tra di loro.

-----BEGIN CERTIFICATE-----
MIIDQTCCAqqgAwIBAgIJALQea21f1bVjMA0GCSqGSIb3DQEBBQUAMIG1MQswCQYD
...
pfDACIDHTrwCk5OefMwArfEkSBo/
-----END CERTIFICATE-----

Quindi importalo nel tuo file di chiavi usando keytool.

keytool -import -alias myalias -keystore my.keystore -trustcacerts -file mycert.cer

La cosa che mi ha aiutato è stato il tuo commento su BASE-64 ENCODING. Un certificato normale apparentemente è una codifica speciale e non è leggibile in testo normale. Grazie.
DRapp

-2

Basta fare

openssl x509 -req -days 365 -in server.cer -signkey server.key -out server.crt

8
Ti andrebbe di elaborare cosa fa esattamente questa linea e perché usi esattamente quei parametri? Questa risposta è piuttosto breve e potrebbe essere difficile da capire per le persone con meno esperienza.
GameDroids
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.