Muss ich für Apache-SSL-Zertifikate .CER in .CRT konvertieren? Wenn das so ist, wie?

121

Ich muss einen Apache 2-Server mit SSL einrichten.

Ich habe meine * .key-Datei, aber die gesamte Dokumentation, die ich online gefunden habe, * .crt-Dateien sind angegeben, und meine Zertifizierungsstelle hat mir nur eine * .cer-Datei zur Verfügung gestellt.

Sind * .cer-Dateien mit * .crt identisch? Wenn nicht, wie kann ich CER in das CRT-Format konvertieren?

MN
quelle
11
CERund CRTErweiterungen bedeuten nichts. Verschiedene PKI-Anbieter verwenden unterschiedliche Erweiterungen für dieselbe Sache. Wenn die Datei binär ist, ist sie wahrscheinlich ASN.1 / DER-codiert. Wenn die Datei für Menschen lesbar ist -----BEGIN CERTIFICATE-----, wird ihre PEM codiert. Was hast du (DER oder PEM) und was brauchst du (DER oder PEM)?
JWW

Antworten:

106

Dateierweiterungen für kryptografische Zertifikate sind nicht so standardisiert wie erwartet. Windows behandelt das Doppelklicken auf eine .crtDatei standardmäßig als Anforderung zum Importieren des Zertifikats in den Windows-Stammzertifikatsspeicher, behandelt eine .cerDatei jedoch als Anforderung zum Anzeigen des Zertifikats. Sie unterscheiden sich in dem Sinne, dass Windows eine unterschiedliche Bedeutung für das hat, was passiert, wenn Sie auf jeden Dateityp doppelklicken.

Die Art und Weise, wie Windows sie beim Doppelklicken behandelt, ist jedoch der einzige Unterschied zwischen beiden. Beide Erweiterungen stellen lediglich dar, dass sie ein öffentliches Zertifikat enthalten. Sie können eine Zertifikatdatei umbenennen, um in jeder System- oder Konfigurationsdatei, die ich gesehen habe, eine Erweiterung anstelle der anderen zu verwenden. Und auf Nicht-Windows-Plattformen (und sogar unter Windows) achten die Benutzer nicht besonders darauf, welche Erweiterung sie verwenden, und behandeln beide austauschbar, da zwischen ihnen kein Unterschied besteht, solange der Inhalt der Datei korrekt ist.

Noch verwirrender ist, dass es zwei Standardmethoden zum Speichern von Zertifikatdaten in einer Datei gibt: Eine ist eine "binäre" X.509-Codierung und die andere ist eine "Text" -Basis64-Codierung, die normalerweise mit " -----BEGIN CERTIFICATE-----" beginnt . Diese codieren dieselben Daten auf unterschiedliche Weise. Die meisten Systeme akzeptieren beide Formate, aber wenn nötig, können Sie eines über openssl oder andere Tools in das andere konvertieren. Die Codierung in einer Zertifikatdatei ist wirklich unabhängig davon, welche Erweiterung jemand der Datei gegeben hat.

TylerH
quelle
Nach meinem Verständnis handelt es sich bei beiden um X.509-Codierungen. Sie sagen nichts anderes, aber die asymmetrische Verwendung von x.509 oben könnte einem Leser etwas anderes vorschlagen. Für den Leser ist es erwähnenswert, dass die Zertifikate zwischen diesen beiden Codierungen hin und her konvertiert werden können, da sie, wie in dieser Antwort erwähnt, dieselben Informationen enthalten. Siehe die andere Antwort mit den Befehlen openssl x509 -inform.
FreeText
55

Laut Dokumentation mod_ssl :

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

Die Zertifikatdatei sollte PEM-codiert sein. X.509-Zertifikatdatei:

openssl x509 -inform DER -in certificate.cer -out certificate.pem
Dmitry Grigansky
quelle
Wird diese ssl cert Fehler lösen, wenn hinter zscaler, läuft vagrantauf win( vbox homestead), durch unsere vertrauenswürdigen Stamm certs in das vagabundierende Box zu installieren? Ich würde scpsie verwenden, dann Ihre Konvertierung verwenden und sie in /etc/ssl/certsdie ca-certificates.crtDatei einbinden und sie auch in die Datei kopieren, bevor sie erneut bereitgestellt werden. Trotzdem wird auf der Entwicklungsbox ein google-recaptcha tls sslFehler angezeigt file_get_contents.
Blamb
54

Grundsätzlich gibt es zwei CER-Zertifikatcodierungstypen, DER und Base64. Wenn der Typ DER ein Fehlerladezertifikat zurückgibt (asn1-Codierungsroutinen), versuchen Sie es mit der PEM, und es soll funktionieren.

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

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

Liibo
quelle
3
Das DER-Format hat bei mir funktioniert, als meine Cer-Datei beim Versuch, sie zu bearbeiten, wie eine Binärdatei aussah ... danke!
Brad Parks
1
Für den Leser fand ich die openssl-Manpage nützlich. Mir war nicht klar, welcher der Befehle was tat (dh auf welche Weise war die Konvertierung). Der Parameter -inform gibt das Format der Eingabe -in-Datei an, das intuitiv ist. Wenn Sie jedoch bereits ein wenig verwirrt sind, ist es hilfreich, dies explizit zu wissen. Siehe openssl.org/docs/manmaster/man1/openssl-x509.html
FreeText
32

Ich gehe davon aus, dass Sie eine CER-Datei mit PKCS # 7-codierten Zertifikatdaten haben und diese in PEM-codierte Zertifikatdaten konvertieren möchten (normalerweise eine CRT- oder PEM-Datei). Eine CER-Datei mit PKCS # 7-codierten Daten sieht beispielsweise folgendermaßen aus:

----- BEGIN PKCS7 -----
MIIW4gYJKoZIhvcNAQcCoIIW0zCCFs8CAQExADALBgkqhkiG9w0BBwGggha1MIIH
...
POI9n9cd2cNgQ4xYDiKWL2KjLB + 6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G
+ bKhADEA
----- END PKCS7 -----

PEM-Zertifikatdaten sehen folgendermaßen aus:

----- BEGIN CERTIFICATE -----
MIIHNjCCBh6gAwIBAgIQAlBxtqKazsxUSR9QdWWxaDANBgkqhkiG9w0BAQUFADBm
...
nv72c / OV4nlyrvBLPoaS5JFUJvFUG8RfAEY =
----- ENDZERTIFIKAT -----

Es gibt einen OpenSSL-Befehl, der .cer-Dateien (mit PKCS # 7-Daten) in die PEM-Daten konvertiert, die Sie möglicherweise erwarten (der BEGIN CERTIFICATEBlock im obigen Beispiel). Mit diesem Befehl können Sie PKCS # 7-Daten in das PEM-Format für eine Datei zwingen, die wir certfile.cer nennen:

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

Beachten Sie, dass eine .cer- oder .pem-Datei möglicherweise ein oder mehrere Zertifikate enthält (möglicherweise die gesamte Zertifikatkette).

Karl Ward
quelle
1
Wäre praktisch, wenn Sie eine Quelle für diese Annahme hätten. Ich denke, die Leute verwenden (möglicherweise falsch) .cer, .crt, .pem austauschbar, so dass eine Quelle der Wahrheit die falschen Vorstellungen korrigieren würde.
PhilT
30

CER ist ein X.509-Zertifikat in binärer Form, DER- codiert.
CRT ist ein binäres X.509-Zertifikat, das in Textcodierung ( Base-64 ) gekapselt ist .

Es ist nicht die gleiche Kodierung.

Spawnrider
quelle
13
Diese Antwort ist einfach falsch. Sowohl .CER als auch .CRT können entweder DER- oder PEM-Codierung (Text) verwenden. Die Erweiterungen .pem und .der spiegeln die Codierung wider, .cer und .crt nicht. Weitere Details .
uvb
1
Eigentlich sollte es das Gegenteil sein. Aber all diese Erweiterungen sind schon lange verwirrt, deshalb sollten Sie sich nicht auf sie verlassen.
Claudio Floreani
16

Die Antwort auf die Frage, wie eine CER-Datei in eine CRT-Datei konvertiert wird (sie sind unterschiedlich codiert!), Lautet:

openssl pkcs7 -print_certs -in certificate.cer -out certificate.crt
Alexander Presber
quelle
5
Das hat bei mir nicht funktioniert! Ich benutzte:openssl x509 -inform der -in certificate.cer -out certificate.pem
sj59
Ich unable to load PKCS7 object
erhalte
@friederbluemle hast du diese Antwort überprüft? serverfault.com/questions/417140/…
Alexander Presber
Dies musste ich tun, um mein positives SSL-Zertifikat für die Konvertierung in PKCS12 zur Verwendung in Azure vorzubereiten.
Owen
16

Ich benutze Befehl:

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

CER ist jedoch ein X.509-Zertifikat in binärer Form, DER-codiert. CRT ist ein binäres X.509-Zertifikat, das in Textcodierung (Base-64) gekapselt ist.

Aus diesem Grund sollten Sie vielleicht Folgendes verwenden:

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

Und dann, um Ihr Zertifikat zu importieren:

Kopieren Sie Ihre Zertifizierungsstelle nach dir:

/usr/local/share/ca-certificates/

Befehl verwenden:

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

Aktualisieren Sie den CA-Speicher:

sudo update-ca-certificates

Hugo LM
quelle
5

Wenn Ihre Cer-Datei ein Binärformat hat, müssen Sie sie mit konvertieren

openssl x509 -inform DER -in YOUR_CERTIFICATE.cer -out YOUR_CERTIFICATE.crt
Mustafa Burak Kalkan
quelle
3

Die Dateien .cer und .crt sollten austauschbar sein, um sie in einen Schlüsselspeicher zu importieren.

Schauen Sie sich den Inhalt der CER-Datei an. Löschen Sie alles vor -----BEGIN CERTIFICATE-----und nach der -----END CERTIFICATE-----Zeile. Sie werden mit den BEGIN / END-Zeilen mit einer Reihe von Base64-codierten Dingen zwischen ihnen belassen.

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

Dann importieren Sie es einfach mit Keytool in Ihre Schlüsseldatei.

keytool -import -alias myalias -keystore my.keystore -trustcacerts -file mycert.cer
Gene Gotimer
quelle
Was mir geholfen hat, war Ihr Kommentar zu BASE-64 ENCODING. Ein normales Zertifikat ist anscheinend eine spezielle Codierung und nicht im Klartext lesbar. Vielen Dank.
DRapp
-2

Mach einfach

openssl x509 -req -days 365 -in server.cer -signkey server.key -out server.crt
Mutuma
quelle
8
Möchten Sie näher erläutern, was diese Zeile genau bewirkt und warum genau Sie diese Parameter verwenden? Diese Antwort ist ziemlich kurz und für Menschen mit weniger Erfahrung möglicherweise schwer zu verstehen.
GameDroids