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: