SSL Zertifikate mit openSSL konvertieren

Problem

Sie möchten ein Zertifikat konvertieren. Am einfachsten geht das mit openSSL. 

Lösung

Gleich voran, OpenSSL für Windows können Sie hier herunterladen:

Download

Sie können OpenSSL in Windows entweder in einen Ordner entpacken (vergessen Sie nicht in Ihrer Pfad Variable den Pfad zum Ordner der openssl.exe hinzuzufügen) oder installieren.
Für Installationsfaule gäbe es noch anonsten auch online Konverter wie sslshopper.com - in wie fern Sie ihre internen Zertifikate zur Konvertion einer externen Seite überlassen ist Ihre Sache. Ich empfehle Ihnen den OpenSSL Download, es ist wirklich keine hexerei.

Grundlegendes zu den Zertifikatsformaten


Base64/PEM/CER/KEY/CRT Format

Ist das am häufigsten verwendete Format, in dem Zertifizierungsstellen Zertifikate ausstellen. Es enthält Text wie „—BEGIN CERTIFICATE—–“ und „—END CERTIFICATE—–“.
In einer Datei können mehrere PEM-Zertifikate und auch der private Schlüssel untereinander enthalten sein. Die meisten Plattformen (z. B.: - Apache) erwarten jedoch, dass sich die Zertifikate und der private Schlüssel in separaten Dateien befinden. Diese Dateien heißen meist id_rsa (ohne Dateiendung für den privaten Schlüssel) und id_rsa.pub (für den öffentlichen Teil).

  • Es handelt sich um Base64-codierte ACII-Dateien
  • Sie habenmeist Erweiterungen wie .pem, .crt, .cer, .key
  • Das von Linux/Apache und ähnliche Server verwende PEM-Format ist das gleiche wie ein Base-64 Zertifikat mit der Endung .crt .cer unter Windows.
    Nur die Dateiendung ist anders, aber es ist das gleiche File - Das schafft oft die erste Verwirrung zwischen "Windows und Linux Admins".
DER Format

Es ist eine binäre Form des ASCII-PEM-Formatzertifikats. Alle Arten von Zertifikaten und privaten Schlüsseln können im DER-Format codiert werden

  • Sind Dateien im Binärformat
  • Haben meist die Erweiterungen .cer & .der
  • Wird normalerweise in Java-Plattformen verwendet
P7B / PKCS # 7

Ethalten die Anweisungen „—–BEGIN PKCS—–“ und „—END PKCS7—–“. Es kann nur Zertifikate und Kettenzertifikate enthalten, nicht jedoch den privaten Schlüssel.

  • Sind Base64-codierte ASCII-Dateien
  • Haben meist die Erweiterungen .p7b, .p7c
  • Mehrere Plattformen unterstützen sie. Beispielsweise: Windows, Java Tomcat
PKCS # 8

Ethalten die Anweisungen „—–BEGIN PRIVATE KEY—–“ und „—END PRIVATE KEY—–“. Es kann Zertifikate, Kettenzertifikate enthalten und privaten Schlüssel enthalten.

  • Sind Base64-codierte ASCII-Dateien
  • Haben meist die Erweiterungen .pem, .key
  • Mehrere Plattformen unterstützen sie. Beispielsweise: Windows, Java Tomcat
PFX / PKCS # 12

Sie werden zum Speichern des Serverzertifikats, aller Zwischenzertifikate und des privaten Schlüssels in einer verschlüsselbaren Datei verwendet.

  • Sind Dateien im Binärformat
  • Haben meist die Erweiterungen .pfx, .p12
  • Wird normalerweise unter Windows zum Importieren und Exportieren von Zertifikaten und privaten Schlüsseln verwendet

Konvertierungsbefehle für openSSL

Nicht vergessen: PEM kann auch CER, CRT, sein.


PEM nach DER

openssl x509 -outform der -in certificate.pem -out certificate.der

PEM nach P7B
openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CAcert.cer

PEM nach PFX
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CAcert.crt

DER nach PEM
openssl x509 -inform der -in certificate.cer -out certificate.pem

P7B nach PEM
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer

P7B nach PFX
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CAcert.cer

PFX(PKCS#12) nach PEM
openssl pkcs12 -in certificate.pfx -nodes -out certificate.cer
Mit -nocerts wird nur der private Key ausgegeben.

Zertificate und/oder privaten Schlüssel von .pfx (PKCS12) Datei
Hinweis: Die *.pfx Datei ist ein "Container" in einem PKCX#12 Format und enthält privaten sowie öffentlichen Schlüssel sowie CA Zertifikat.

  • Private key extrahieren (unencrypted):
    openssl pkcs12 -in certname.pfx -nocerts -nodes -out certname.key

  • Private key extrahieren (encrypted):
    openssl pkcs12 -in certname.pfx -nocerts -out certname.key

  • Zertifikate extrahieren (alle, Client und CA Zertifikat):
    openssl pkcs12 -in certname.pfx -nokeys -out certname.cer

  • Zertifikat extrahieren (Client ohne CA Zertifikat):
    openssl pkcs12 -in certname.pfx -nokeys -clcerts -out certname.cer


  • Zertifikat extrahieren (CA Zertifikat ohne Client):
    openssl pkcs12 -in certname.pfx -nokeys -cacerts -out certname.cer

  • Passphrase von encrypted Key entfernen:
    openssl rsa -in certname_encrypted.key -out certname_decrypted.key

Generelle openSSL Befehle

Mit diesen Befehlen können Sie CSRs, Zertifikate und private Schlüssel generieren und andere verschiedene Aufgaben ausführen.

Generieren eines neuen privaten Schlüssel und eine neue Zertifikatsignierungsanforderung
openssl req -out CSR.csr -new -newkey rsa: 2048 -nodes -keyout privateKey.key

Generieren eines selbstsigniertes Zertifikat
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa: 2048 -keyout privateKey.key -out certificate.crt

Generieren einer Zertifikatsignierungsanforderung (Certificate Signing Request, CSR) für einen vorhandenen privaten Schlüssel
openssl req -out CSR.csr -key privateKey.key -new

Generieren einer Zertifikatsignierungsanforderung basierend auf einem vorhandenen Zertifikat
openssl x509 -x509toreq -in certificate.crt -out CSR.csr -signkey privateKey.key

Entfernen der Passphrase aus einem privaten Schlüssel
openssl rsa -in privateKey.pem -out newPrivateKey.pem

 


Print