Zertifikate ohne privaten Schlüssel aus einer P12 exportieren
Ein PKCS12-Bundle enthält Schlüssel und Zertifikate gemeinsam. Lesen Sie zuerst die Struktur und wählen Sie Zertifikate dann mit -nokeys aus, statt den Schutz zu entfernen.
Das Support-Ticket fragt, welches Zertifikat im VPN-Bundle steckt, und der erste Impuls ist, alles zu exportieren und anzuhängen. Eine P12-Datei verpackt Zertifikate und privates Schlüsselmaterial in einem Container, also ist genau das, was Sie nicht versenden sollten, ein Export von allem. Der Befehl, der die Frage beantwortet, ist ein Auswahlproblem, kein Konvertierungsproblem. Vier Flags entscheiden, welche Hälfte des Containers Sie erhalten, und zwei davon klingen sicherer, als sie sind.
Beginnen Sie damit, den Container zu lesen, statt ihn zu leeren.
Was eine PKCS12-Datei tatsächlich enthält
Ein PKCS12-Container enthält ein oder mehrere Zertifikate, möglicherweise einen privaten Schlüssel und einen Message Authentication Code über den Inhalt. Die Zertifikate können das Leaf-Zertifikat für Ihre Client-Identität und die Zwischenzertifikate enthalten, die es an eine CA ketten. Der Schlüssel, wenn vorhanden, ist das, was die Datei zu einem Geheimnis statt zu einem Dokument macht.
Diese Unterscheidung ist der Grund, warum -nokeys existiert und warum es das Flag ist, das diese Aufgabe braucht.
Das Bundle lesen, ohne den Schlüssel herauszuschreiben
Die Inspektionsform gibt Struktur- und Algorithmusdetails aus und schreibt nichts: openssl pkcs12 -in client.p12 -info -noout. Sie fragt nach dem Importpasswort, was der richtige Ort für diesen Wert ist, und sie sagt Ihnen, ob die Datei überhaupt einen Schlüssel enthält. Verwenden Sie -passin env:PKCS12_PASS, wenn das Passwort nicht eingegeben werden kann, denn ein Passwort in einem Shell-Befehl ist ein Passwort in der Prozessliste. Dieser Schritt exportiert nichts, und genau das ist der Punkt.
Lesen Sie die Ausgabe auf drei Dinge: wie viele Zertifikate, ob ein Schlüssel vorhanden ist und welche Algorithmen ihn schützen.
Verwenden Sie -nokeys und verwechseln Sie es nicht mit -nocerts
-nokeys schließt private Schlüssel aus und lässt die Zertifikate übrig. -clcerts verengt das auf Client-Zertifikate, -cacerts verengt es auf CA-Zertifikate, und diese beiden sind Filter, keine Alternativen. -nocerts klingt wie die sichere Schreibweise derselben Idee und bedeutet das Gegenteil: keine Zertifikate, was nur Schlüssel übrig lässt. Wer es in einen Zertifikatsexport mischt, bringt auf diese Weise einen privaten Schlüssel auf die Festplatte.
Die zweizeilige Form, die eine Zertifikatsdatei und eine CA-Datei und sonst nichts erzeugt, ist:
openssl pkcs12 -in client.p12 -nokeys -clcerts -out client-certificates.pem
openssl pkcs12 -in client.p12 -nokeys -cacerts -out ca-certificates.pemLegacy-Bundles brauchen -legacy unter OpenSSL 3, um ihre ältere Verschlüsselung zu lesen, und dieses Flag ändert, was der Parser akzeptiert, nicht was er ausgibt. Wenn das Parsen mit einem Fehler über einen nicht unterstützten Algorithmus scheitert, ist das Hinzufügen von -legacy der richtige erste Schritt und das Überspringen der MAC-Prüfung nicht.
Prüfen Sie die Ausgabe, nicht den Exit-Code
Ein Exit-Status von null sagt, dass der Befehl lief, nicht dass die Datei das enthält, was Sie erwarten. Zählen Sie die Zertifikate in der Ausgabe und lesen Sie Subject und Daten: openssl x509 -in client-certificates.pem -noout -subject -dates -fingerprint. Vergleichen Sie den Fingerprint mit dem, den das Supportteam erwartet, denn ein Bundle mit zwei Client-Zertifikaten erzeugt eine Datei mit zwei Blöcken, und die meisten Werkzeuge lesen nur den ersten. Zweck, Vertrauen und Schlüsselübereinstimmung sind wieder getrennte Tests.
Ein Zertifikat, das sich parsen lässt, ist ein Zertifikat, das sich parsen lässt. Es ist kein Zertifikat, das der VPN akzeptiert.
Entscheiden Sie, ob Sie überhaupt Dateien brauchen
Wenn der empfangende Client PKCS12 direkt importiert, ist das Senden des ursprünglichen Bundles über einen genehmigten Kanal mit getrennt gehaltenem Passwort einfacher und erhält den Schutz. Die Extraktion dient der Inspektion, einem Client, der PEM braucht, oder einem Supportfall, der ein bestimmtes Artefakt angefordert hat. Jede Extraktion entfernt eine Schicht und sollte einen Grund haben.
Öffentliche Zertifikate enthalten nicht den privaten Schlüssel, aber sie enthalten Namen und Organisationsangaben. Teilen Sie die Felder, nach denen das Ticket gefragt hat, statt die Datei, es sei denn, die Datei wurde angefordert.