# Schritt 2: Zertifikate extrahieren

## Worum es geht

Sie zerlegen die PFX-Datei in drei PEM-Dateien. Dadurch lassen sich Schlüssel, Domainzertifikat und Zertifikatskette beim Import eindeutig zuordnen.

## Terminal vorbereiten

Öffnen Sie das Terminal im Arbeitsordner mit der PFX-Datei und prüfen Sie die Version:

```bash
openssl version

```

Die folgenden Befehle setzen **OpenSSL 3 oder neuer** voraus. Wenn stattdessen LibreSSL oder eine ältere OpenSSL-Version angezeigt wird, verwenden Sie für diesen Ablauf eine aktuelle OpenSSL-Installation.

Unter macOS und Linux beschränken Sie die Rechte neu erzeugter Dateien in dieser Terminal-Sitzung vorab:

```bash
umask 077

```

Unter Windows schützen Sie den Arbeitsordner über die Dateiberechtigungen Ihres Benutzerkontos.

## Drei Dateien erzeugen

Ersetzen Sie `bechtle.pfx` durch den tatsächlichen Dateinamen. Lassen Sie die Anführungszeichen stehen, insbesondere bei Leerzeichen im Namen. Führen Sie jeden Befehl einzeln aus und fahren Sie nur fort, wenn keine Fehlermeldung erscheint.

### 1. Privaten Schlüssel extrahieren

```bash
openssl pkcs12 -in "bechtle.pfx" -nocerts -noenc -out priv-key.pem

```

### 2. Domainzertifikat extrahieren

```bash
openssl pkcs12 -in "bechtle.pfx" -clcerts -nokeys -out certificate.pem

```

### 3. Zertifikate der Zertifizierungsstellen extrahieren

```bash
openssl pkcs12 -in "bechtle.pfx" -cacerts -nokeys -out ca-certificates.pem

```

Geben Sie jeweils bei **Enter Import Password** das Passwort der PFX-Datei ein. Bei der Eingabe werden üblicherweise keine Zeichen angezeigt. Schreiben Sie das Passwort nicht direkt in den Befehl.

`-noenc` erzeugt einen **unverschlüsselten privaten Schlüssel**, wie ihn der Hetzner-Import benötigt. Die bisherige Option `-nodes` ist in OpenSSL 3 veraltet. Die PEM-Datei muss deshalb besonders geschützt bleiben. Die Trennung nach Schlüssel, Domain- und CA-Zertifikaten folgt den [OpenSSL-PKCS#12-Optionen](https://docs.openssl.org/3.0/man1/openssl-pkcs12/).

<table id="bkmrk-datei-inhalt-sp%C3%A4tere"><thead><tr><th>Datei</th><th>Inhalt</th><th>Späteres Zielfeld</th></tr></thead><tbody><tr><td>`priv-key.pem`</td><td>Privater Schlüssel</td><td>Privater Schlüssel / Schlüsselblock</td></tr><tr><td>`certificate.pem`</td><td>Domainzertifikat</td><td>Öffentlicher Schlüssel / Zertifikatsblock</td></tr><tr><td>`ca-certificates.pem`</td><td>Mitgelieferte CA-Zertifikate</td><td>Zwischenzertifikate / CA Blöcke</td></tr></tbody></table>

## Domain und Gültigkeit prüfen

Zeigen Sie die Zertifikatsdaten an:

```bash
openssl x509 -in certificate.pem -noout -subject -issuer -dates -ext subjectAltName

```

Prüfen Sie die enthaltenen Domainnamen unter **Subject Alternative Name** sowie **notBefore** und **notAfter**. Das Zertifikat muss bereits gültig sein und das erwartete neue Ablaufdatum besitzen. Angaben zu Organisation oder Aussteller können sich gegenüber der vorherigen Lieferung ändern.

Prüfen Sie anschließend jeden vorgesehenen Hostnamen, beispielsweise:

```bash
openssl x509 -in certificate.pem -noout -checkhost anmeldung.bechtle-events.com

```

Ersetzen Sie den Beispielnamen durch die tatsächliche Domain. Das Ergebnis muss bestätigen, dass der Name passt. Diese Prüfung kontrolliert die Namensabdeckung, nicht die vollständige Vertrauenskette. Die Optionen sind in der [OpenSSL-x509-Dokumentation](https://docs.openssl.org/3.0/man1/openssl-x509/) beschrieben.

## Gehören Schlüssel und Zertifikat zusammen?

Erzeugen Sie aus beiden Dateien jeweils den öffentlichen Schlüssel:

```bash
openssl pkey -in priv-key.pem -pubout -out key-public.pem
openssl x509 -in certificate.pem -pubkey -noout -out cert-public.pem

```

Beide Befehle müssen ohne Fehler enden. Vergleichen Sie anschließend die Prüfsummen:

```bash
openssl dgst -sha256 key-public.pem cert-public.pem

```

Die beiden Hashwerte müssen **identisch** sein; die angezeigten Dateinamen unterscheiden sich. Bei Abweichungen nicht importieren, sondern prüfen, ob Dateien aus verschiedenen Lieferungen vermischt wurden. `-pubout` gibt nur den öffentlichen Anteil aus; siehe [OpenSSL pkey](https://docs.openssl.org/3.0/man1/openssl-pkey/).

## Zertifikatskette kontrollieren

Öffnen Sie `certificate.pem` und `ca-certificates.pem` in einem lokalen Texteditor. Das Domainzertifikat sollte als ein einzelner Zertifikatsblock vorliegen. In der CA-Datei können mehrere Blöcke stehen.

Wenn die CA-Datei leer ist, fehlen im PFX möglicherweise die Zwischenzertifikate. Fordern Sie die passende Kette bei der zuständigen Zertifikatsbetreuung an. Verwenden Sie nicht ungeprüft die Kette einer alten Lieferung. Bei mehreren Domainzertifikaten lassen Sie vor dem Import klären, welches zum geprüften Schlüssel gehört.

## Häufige Fehler

<table id="bkmrk-meldung-oder-problem"><thead><tr><th>Meldung oder Problem</th><th>Nächster Schritt</th></tr></thead><tbody><tr><td>Datei nicht gefunden</td><td>Arbeitsordner, Dateiname und Anführungszeichen prüfen.</td></tr><tr><td>`Mac verify error` / ungültiges Passwort</td><td>Passwort der aktuellen PFX-Lieferung prüfen; gegebenenfalls Datei erneut aus dem Originalarchiv entpacken.</td></tr><tr><td>`unsupported` mit Hinweis auf `RC2-40-CBC`</td><td>Bei einer älteren PFX-Verschlüsselung kann OpenSSL 3 die zusätzliche Option `-legacy` zum Lesen benötigen. Den betroffenen `openssl pkcs12`-Befehl mit dieser Option wiederholen.</td></tr><tr><td>`-noenc` wird nicht erkannt</td><td>Mit `openssl version` prüfen, ob tatsächlich OpenSSL 3 oder neuer verwendet wird.</td></tr><tr><td>Domainprüfung schlägt fehl</td><td>Hostnamen und aktuelle Zertifikatslieferung abgleichen; nicht für diese Domain aktivieren.</td></tr><tr><td>Unterschiedliche Hashwerte</td><td>Schlüssel und Zertifikat stammen nicht aus einem passenden Paar; Dateien erneut zuordnen.</td></tr></tbody></table>

Beispiel für das Lesen einer älteren PFX-Datei:

```bash
openssl pkcs12 -legacy -in "bechtle.pfx" -nocerts -noenc -out priv-key.pem

```

Nutzen Sie `-legacy` nur bei entsprechendem Lesefehler; die [OpenSSL-Dokumentation](https://docs.openssl.org/3.0/man1/openssl-pkcs12/) beschreibt diesen Fall ausdrücklich.

**Ergebnis dieses Schritts:** Schlüssel und Zertifikat passen zusammen, die vorgesehenen Domainnamen und Gültigkeitsdaten sind geprüft, die CA-Zertifikate liegen vor.

**Weiter:** [Schritt 3: Bei Hetzner einrichten und freigeben](https://doc.gwatch.events/books/bechtle-zertifikat-bei-hetzner-installieren/page/schritt-3-zertifikat-bei-hetzner-einrichten-und-freigeben).  
**Zurück:** [Schritt 1: Grundlage](https://doc.gwatch.events/books/bechtle-zertifikat-bei-hetzner-installieren/page/schritt-1-grundlage).