OpenSSL PKCS#12 Export/Import

Jetzt haben wir einen Key samt zugehörigem Zertifikat und wie bekommen wir das Ganze nun beispielsweise in einen Webserver?

Export

Der angenehmste Weg, abgesehen vom Text-über-SSH-einfügen ist, alle erforderlichen Daten wie Private-Key und Zertifikat samt Chain-of-Trust in ein PKCS#12 File zu packen. Dieses Format ist für den Austausch von Identitätsinformationen gedacht. Es wurde aus Microsofts PFX von RSA entwickelt und spezifiziert. Details siehe auch im RFC 7292.

Zum Glück kann OpenSSL diese Dateien sowohl lesen als auch generieren.

Hier gleich die gesamte Magie:

Noch kurze Infos zu den Parameter:

  • pkcs12 – Openssl Modul für PKCS#12 Datenaustausch
  • -export: Es soll ein PKCS#12 File erstellt werden
  • -in : das Zertifikat als DER oder PEM kodiertes File
  • -inkey : der Zugehörige Private Key
  • -cafile : ein File, welches zusätzliche Intermediatezertifikate enthält. Diese werden in der Regel von der CA bereitgestellt und müssen vom Webserver mitgeschickt werden, damit die Zertifikatskette bist zur vertrauenwürdigen Root vollständig ist.
  • -name : Ein beliebiger Bezeichner für das Zertifikat. Das ist unter Windows wichtig, da dieser Name in den Auswahlfenstern benutzt wird und es ansonsten in der Regel keine weitere Info zum Zertifikat angezeigt wird.
  • -out : der Name des generierten Files

Da in dem File der Private-Key enthalten ist, wird von OpenSSL noch eine Passphrase verlangt, mit der der Dateiinhalt verschlüsselt wird. Diese muss man dann beim Import wieder eingeben.

Import

Wenig überraschend kann OpenSSL natürlich auch die in einem PKCS#12-Container enthaltenen Objekte wieder extrahieren.

Die gibt einfach alle in dem  File enthaltenen SafeBags hintereinander als PEM-Kodierten DER Text aus. -nodes verhindert wie immer, dass Keys mit einer DES Passphrase versehen werden. In der Regel kann man den meisten Diensten die auf libopenssl aufbauen einfach ein solches File füttern. Gegebenenfalls muss man noch Key und Zertifikate in unterschiedliche Dateien trennen.

Hierfür gibts aber auch 2 Parameter

Und nicht vergessen dem File mit dem Private-Key so restriktive Zugriffsrechte wie möglich zu geben …