Base64-PKCS #12 Zertifikat in .pem und .key umwandeln

Aus aktuellen Anlass durfte ich mich mit dem Thema von digitalen Zertifikaten auseinandersetzen. Zertifikate sind ein essentieller Bestandteil von gesicherter digitaler Kommunikation. Sie dienen meist dazu, eine an der Kommunikation beteiligte Person oder einen Server zu authentifizieren. Solche Zertifikate werden in verschiedensten Formaten und mit unterschiedlichen Standards verwendet, so kann es als vorkommen, dass man zwar über ein entsprechendes Zertifikat verfügt, dies aber im falschen Format vorliegt. In meinem Fall bekam ich von einem Authentifizerungs-Endpoint eines Webservices den Inhalt einer PCKS #12 formatierten Datei, benötigte aber zwei separate Dateien im PEM-Format. Diese Situation kann zum Beispiel auftreten, wenn man mithilfe von Postman Endpunkte testen möchte.

 

Zuerst aber ein paar kurze Erklärungen zu diesen beiden Abkürzungen:

  • PKCS #12 (Public Key Cryptography Standard 12) ist ein Archivierungs-Dateiformat, welches unter anderem dazu verwendet wird, mehrere kryptografische Dateien zu einer einzelnen zusammenzufassen. Solche Dateien sind durch die Endung .pfx oder .p12 zu erkennen. Solche Dateien sind zusätzlich mit einem Passwort geschützt.
  • PEM (Privacy-encaded Electronic Mail) ist ein Standard für die Speicherung von kryptografischen Informationen, etwa private Schlüssel oder Zertifikate. Der Vorteil am PEM-Format liegt darin, dass es in Base64 codiert ist, das heisst nur die Zeichen 'a-z', 'A-Z', '0-7', '+' und '/' verwendet werden. Dies ermöglicht es, diese Dateien über Anwendungen zu versenden, welche nur ASCII-Zeichen unterstützen.

 

Ich habe also eine .pfx-Datei, welche einen Schlüssel und ein Zertifikat enthält. Diese beiden Dinge brauche ich als separate Dateien, im PEM-Format. Für diese Konvertierung gibt es zwar einige Online-Tools, da es sich aber um vertrauliche Daten handelt ist dies nicht empfehlenswert. Deshalb werde ich auf solche verzichten.

 

 

Schritt 1: PFX-Datei vorbereiten

Liegen die PKCS #12-Daten in Base64 vor (z.B. als Response eines HTTP-Requests) müssen diese erst noch in binäre Codierung umgewandelt werden. Dazu wird der "pfx"-String in ein leeres Textdokument gespeichert und z.B. als "cert.pfx" abgespeichert.

 

Für die Konvertierung dieser Datei in eine "echte" pfx-Datei kann der Zertifikatsmanager, welcher bei Windows-Betriebssystemen üblicherweise mitgeliefert wird, verwendet werden. Dieser wird gestartet, indem auf die Start-Schaltfläche, bzw. Suche geklickt wird und in das Suchfeld "certmgr.msc" eingegeben wird und anschliessend Enter drückt.

Dann in den Ordner "Meine Zertifikate" navigieren und mit Rechtsklick "Alle Aufgaben" --> "Importieren" auswählen:

Anschliessend die eben erstellte PFX-Datei auswählen.  Dann muss das Passwort für die PFX-Datei eingegeben werden, diese sollte von der Quelle der PFX-Datei bekannt sein. Auf derselben Seite unbedingt das Kontrollkästchen "Schlüssel als exportierbar markieren":

Nun sollte das Zertifikat im Zertifikatsmanager vorliegen:

Nun kann dieses Zertifikat wieder im korrekten Format exportiert werden. Dazu wird der Zertifikatexport-Assistent mit erneutem Rechtsklick --> "Alle Aufgaben" --> "Exportieren" gestartet. Dabei muss darauf geachtet werden dass die Option "Privaten Schlüssel exportieren" angewählt ist. Zudem muss ein Passwort gesetzt werden. Als Exportdatei kann die Datei "cert.pfx" von vorhin überschrieben werden.

 

Schritt 2: PEM-Files generieren

Für diesen Schritt muss ein zusätzliches Tool installiert werden, und zwar OpenSSL. Deren offizielle Webseite findet sich hier: https://www.openssl.org/, und Binaries lassen sich hier finden: https://wiki.openssl.org/index.php/Binaries.

 

Nun kann der private Schlüssel im PEM-Format extrahiert werden, indem OpenSSL gestartet wird und folgender Befehl in die Kommandozeile eingegeben wird:

Der Pfad muss natürlich so angepasst werden, dass er auf den Speicherort der "cert.pfx"-Datei verweist. Nach dem Ausführen dieses Befehls sollte nun eine Datei "key.pem" im Ordner, in welchem sich die "openssl.exe"-Datei befindet, befinden. Öffnet man diese mit einem Texteditor sollte sie etwa so aussehen:

 

-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEA3Tz2mr7SZiAMfQyuvBjM9OiZ1BjP5CE/Wm/Rr500P
RK+Lh9x5eJPo5CAZ3/ANBE0sTK0ZsDGMak2m1g73VHqIxFTz0Ta1d+NAj
wnLe4nOb7/eEJbDPkk05ShhBrJGBKKxb8n104o/PdzbFMIyNjJzBM2o5y
5A13wiLitEO7nco2WfyYkQzaxCw0AwzlkVHiIyC71pSzkv6sv+4IDMbT/
XpCo8L6wTarzrywnQsh+etLD6FtTjYbbrvZ8RQMHg2qxraAV++HNBYmNW
s0duEdjUbJK+ZarypXI9TtnS4o1Ckj7POfljiQIIBAFyidxtqRQyv5KrD
kbJ+q+rsJxQlaipn2M4lGuQJEfIxELFDyd3XpxPUn/82NZNXlPmRIopXs
2T91jiLZEUKQw+n73j26adTbteuEaPGSrTZxBLRyssO0wWomUyILqVeti
6AkL0NJAuKcucHGqWVgUIa4g1haE0ilcm6dWUDofd+PpzdCJf1s4NdUWK
YV2GJcutGQb+jqT5DTUqAgST7N8M28rwjK6nVMIBUpP0xpPnuYDyPOw6x
4hBt8DZQYyduzIXBXRBKNiNdv8fum68/5klHxp64HRkMUL958UVeljUsT
BFQlO9UCgYEA/VqzXVzlz8K36VSTMPEhB5zBATVPRiXtYK1YpYV4/jSUj
vvT4hP8uoYNC+BlEMi98LtnxZIh0V4rqHDsScAqVyeSLH0loKMZgpwFEm
bEIDnEOD0nKrfT/9K9sPYgvB43wsLEtUujaYw3WLiy0WKmB8CgYEA34xn
1QlOOhHBn9Z8qYjoDYhvcj+a89tD9eMPhesfQFwrsfGcXIonFmWdVygbe
6Doihc+GIYIq/QP4jgMksE1ADvczJSke92ZfE2ifitBpQERNJO0BlabfP
ALs5NssKNmLkWS2U2BHCbv4DzDXwiQB37KPOL1ckBHfF2/htIs20d1UVL
+PK+aXKwguI6bxLGZ3of0UH+mGsSl0mkp7kYZCmOTQtfeRqP8rDSC7DgA
kHc5ajYqh04AzNFaxjRo+M3IGICUaOdKnXd0FdaQwfoaX4QlRTgLqb7AN
ZTzM9WbmnYoXrx17kZlT3lsCgYEAm757XI3WJVjWoLj1+v48WyoxZpcai
uv9bT4Cj+lXRS+gdKHK+SH7J3x2CRHVS+WH/SVCDxuybvebDoT0TkKiCj
BWQaGzCaJqZa+POHK0klvS+9ln0/6k539p95tfXX4TCzbVG6+gJiX0ysz
Yfehn5MCgYEAkMiKuWHCsVyCab3RUf6XA9gd3qYfCTIGtS1tR5PgFIV+G
engiVoWc/hkj8SBHZz1n1xLN7KDf8ySU06MDggBhJ+gXJKy+gf3mF5Kmj
DtkpjGHQzPF6vOe907y5NQLvVFGXUq/FIJZxB8kfJdHEm2M4=
-----END RSA PRIVATE KEY-----

Ähnlich kann man nun das Zertifikat extrahieren: