SSL Zertifikate Konvertieren (mit openssl)

In meinem Admin-Alltag kommt es sehr oft vor das ich mit verschiedenen Arten und  Formen von Zertifikaten zu tun habe. Mal zur Absicherung von Webservern, mal für Zugänge zu WLANs oder Produkten, zum Absichern von Verbindungen (MySQL / MariaDB, Cyrus, Postfix) oder zum Einbau in Anwendungen bzw. Java Keystores. In allen Fällen hat es sich bisher als sehr praktisch erwiesen diverse Konvertierungen selbst durchführen zu können. Ich möchte hier nach und nach alles vorstellen was ich bisher mehr als einmal gebraucht habe. Dabei nutze ich openssl unter Linux.

Zertifikat anzeigen

openssl x509 -noout -text -in <zertifikatsname.crt>

PFX (pkcs12) nach PEM

Oft bekomme PFX Dateien. Diese beinhalten als Bundle alle die Zertifikate und Keys und auch alle Zwischenzertifikate (zumindest können diese Dateien das). Um die Zertifikate unter Linux zu nutzen ist es allerdings notwendig die PFX Datei in Ihre Einzelteile zu zerlegen.

Die PFX Datei heißt in den Beispielen „meincert.pfx“.

Zertifikat exportieren

openssl pkcs12 -in meincert.pfx -nokeys -out meincert.pem
Enter Import Password:
MAC verified OK

Hier sieht man wie der Export des Zertifikats abläuft. Man benötigt dazu das Import Paßwort  des PFX. Es muss zwingend MAC verified OK erscheinen ansonsten gab es ein Problem. Weiß man das Passwort nicht, hat man im übrigen verloren, die Datei ist Wertlos, das Zertifikat verloren.

Private Key exportieren

openssl pkcs12 -in meincert.pfx -nocerts -out meinkey.pem -nodes

openssl pkcs12 -in certmanager_X.pfx -nocerts -out meinkey.pem -nodes
Enter Import Password:
MAC verified OK

Der Vorgang läuft recht ähnlich ab wie der Export des Zertifikats. Auch hier ist wieder zwingend das MAC verified OK erscheint. Der Private Key ist, wie der Name schon sagt, sehr schutzbedürftig. Er ist der Weg zum entschlüsseln der Daten und sollte möglichst Geheim gehalten werden. Dazu kann man den Key auch mit einer Paßphrase versehen werden, der jedes mal beim Laden eingegeben werden muß. Darüber wie ein Private Key angemessen zu schützen ist gibt es Ansichten und auch praktische Beschränkungen. Wenn man neu in dem Thema ist sollte man das ausführlich ergoogeln.

Paßphrase vom Private Key entfernen

Möchte man die Paßphrase von einem Private Key entfernen, z.B. um beim Neustart eines Dienstes nicht immer die Paßphrase eingeben zu müssen tut man folgendes:

openssl rsa -in meinkey.pem -out meinkeyohnepassphrase.pem

Man muß sich allerdings klar machen, das es damit einen riesigen Nachteil gibt. Erbeutet jemand dieses Key kann er Ihn einfach dazu nutzen Daten zu entschlüsseln, er muß nichts machen außer die Datei zu besitzen. Normalerweise schützt die Paßphrase vor diesem Mißbrauch.

Intermediate Zertifikate in PFX (pkcs12) integrieren

Ab und an kommt es vor das ich ein PFX bekomme bei dem nicht alle Intermediate Zertifikate integriert sind. Das ist gerade für Windows User schlecht, die das File Importieren und damit erwarten das alles erledigt ist. Dies kann zu unvollständigen Zertifikatsketten (Broken Chains) führen damit zur Abwertung des Zertifikats bzw. zur nicht Anerkennung in Browsern oder Software.

Hat man nun den Fall muß man leider erst mal das PFX wie oben Beschrieben in Schlüssel (Key) und Zertifikat zerlegen. Um anschließend wieder alles zusammen zu bauen.

openssl pkcs12 -in meincert.pfx -nokeys -out meincert.pem #cert extrahieren openssl pkcs12 -in certmanager_X.pfx -nocerts -out meinkey.pem -nodes # key extrahieren

Nun benötigt man noch die Intermediate Zertifikate der austellenden Stelle (Thawte, Comodo, Positiv SSL, Rapid SSL, Geo Trust, etc.). Die können auf der Webseite runtergeladen werden. Oft ist das nicht ganz einfach, vor allem wenn man nicht genau weiß welches Produkt es ist.

Aus den intermediate Zertifikat(en) baut man sich nun eine Datei die die ganze Kette (Chain) enthält. Dazu fügt man einfach den Inhalt der Dateien hintereinander in eine Datei ein. Wichtig ist dabei das die Zertifikate in der richtigen Reihenfolge sind. Also intermediate1 -> intermediate2 -> intermediate<N>. Nur dann funktioniert das ganze später. Dabei muß man auch darauf achten das Zeilenumbrüche eingehalten werden und keine Leerzeilen in der Datei sind. Bei Commodo sind in den Dateien beispielsweise nach dem letzten Zeichen keine Zeilenumbrüche mehr enthalten so das man schnell Probleme bekommt.

Eine fertige Datei mit zwei Intermediate Zertifikaten sieht dann so aus (chain.crt):

-----BEGIN CERTIFICATE-----
MIIGDjCCA/agAwIBAgIQNoJ<....>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFdDCCBFygAwIBAgIQJ2b<....>
-----END CERTIFICATE----

Nun haben wir also 3 Dateien, das Zertifikat, den Schlüssel und die Chain Datei. Diese fügen wir jetzt mit openssl zu einem PFX (pkcs12) zusammen.

openssl pkcs12 -export -out meinneues.pfx -inkey meinkey.pem -in meincert.pem -certfile chain.crt

PEM zu DER Konvertieren

openssl x509 -outform der -in meincert.pem -out meincert.de

DER zu PEM Konvertieren

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

Prüfen ob ein Zertifikat zu einem Key passt

openssl x509 -noout -modulus -in meincert.crt | openssl md5
openssl rsa -noout -modulus -in meinkey.key | openssl md5

Wenn die md5sums passen, dann passen auch Key und Zertfikat zusammen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.