
x509-Zertifikate auf PIV-fähigen YubiKeys verwalten, Schlüssel und Zertifikatsanforderungen erstellen sowie Git-Commits und Dateien signieren oder verifizieren.
Pivit ist ein Kommandozeilenwerkzeug zum Verwalten von x509-Zertifikaten, die auf Smartcards mit PIV-Applet-Unterstützung (Yubikey) gespeichert sind, und zum Verwenden dieser Zertifikate zum Signieren und Verifizieren von Daten.
Es ist vollständig kompatibel mit der Art und Weise, wie die git-Kommandozeile externe Programme zum Signieren und Verifizieren von Commits und Tags aufruft.
brew install pivit
go install github.com/cashapp/pivit/cmd/pivit@latest
Um git so einzurichten, dass pivit zum Signieren und Verifizieren von Signaturen verwendet wird, führen Sie die folgenden Befehle aus:
git config --(local|global) gpg.format x509
git config --(local|global) gpg.x509.program pivit
pivit --reset
Setzt das PIV-Applet des Yubikey zurück und erstellt eine neue PIN für den Zugriff darauf.
pivit --generate [--p256] [--self-sign | --no-csr] [--assume-yes] [--pin-policy] [--touch-policy]
Erzeugt ein neues Schlüsselpaar im Card-Authentication-Slot des Yubikey.
Dieser Befehl erzeugt und speichert außerdem ein x509-Zertifikat für den erzeugten Schlüssel, das von Yubico signiert ist.
Wenn die Option --p256 angegeben wird, wird das Schlüsselpaar mit der elliptischen Kurve P-256 erzeugt.
Andernfalls wird die Kurve P-384 verwendet.
Fügen Sie das Flag --self-sign hinzu, um ein selbstsigniertes Zertifikat zu erzeugen;
das Zertifikat wird mit dem neu erzeugten Schlüssel signiert.
Sie werden aufgefordert zu bestätigen, dass ein selbstsigniertes Zertifikat wirklich gewünscht ist,
dann nach der PIN gefragt und anschließend aufgefordert, Ihren Yubikey zu berühren.
Die Ausgabe enthält am Ende 3 CERTIFICATE-Blöcke anstelle eines CERTIFICATE_REQUEST (Beispielausgabe unten).
Diese Option ist hauptsächlich für Testzwecke nützlich.
Das Flag --assume-yes kann in Kombination mit der Option --self-sign verwendet werden, um deren y/n-Abfrage zu deaktivieren.
Fügen Sie das Flag --no-csr hinzu, um die Ausgabe der Zertifikatsignieranfrage zu überspringen. In diesem Fall werden Sie nicht aufgefordert, Ihren Yubikey zu berühren.
Diese Option ist nützlich, wenn der erzeugte Schlüssel nicht Teil einer bestehenden PKI sein muss.
Sie können das Zertifikat des Schlüssels dennoch mithilfe von Yubicos Zertifikat hier verifizieren.
Das Flag --pin-policy steuert, wann beim Zugriff auf den erzeugten Schlüssel zur Eingabe einer PIN aufgefordert wird.
Setzen Sie es auf einen der Werte never, once oder always (Standard ist never).
Das Flag --touch-policy steuert, wann beim Zugriff auf den erzeugten Schlüssel zum physischen Berühren der Hardware aufgefordert wird.
Setzen Sie es auf einen der Werte never, cached oder always (Standard ist always).
Die Ausgabe des Befehls sieht wie folgt aus:
Printing Yubikey device attestation certificate:
----- BEGIN CERTIFICATE -----
...
----- END CERTIFICATE -----
Printing generated key certificate:
----- BEGIN CERTIFICATE -----
...
----- END CERTIFICATE -----
Printing certificate signing request:
----- BEGIN CERTIFICATE REQUEST -----
...
----- END CERTIFICATE REQUEST-----
Die CERTIFICATE REQUEST am Ende ist mit dem neu erzeugten privaten Schlüssel signiert,
und kann verwendet werden, um ein von einer CA signiertes Zertifikat auszustellen.
Wenn Sie sich dafür entscheiden, ein eigenes Zertifikat auszustellen und zu verwenden, ist es wichtig, außerdem Folgendes zu verifizieren:
Pivit ermöglicht es, verschiedene Attribute in der CSR über Umgebungsvariablen zu setzen.
Die folgenden Zertifikatsoptionen werden wie folgt gesetzt:
Subject.CommonName wird auf den Wert der Umgebungsvariable PIVIT_EMAIL gesetzt.Subject.Organization wird auf den Wert der Umgebungsvariable PIVIT_ORG gesetzt.Subject.OrganizationalUnit wird auf den Wert der Umgebungsvariable PIVIT_ORG_UNIT gesetzt.Zusätzlich werden die folgenden Subject Alternative Names (SANs) in die Zertifikatsanfrage aufgenommen:
PIVIT_EMAILPIVIT_CERT_URIS angegeben sind (URIs werden durch ein Leerzeichen getrennt)Das PIV-Modul unterstützt mehrere Slots, in denen Schlüssel und Zertifikate gespeichert werden können.
Verfügbare Slots - 9a, 9c, 9d und 9e.
9e ist der „Card Authentication“-Slot.9a ist der „Authentication“-Slot. Wird für Aktionen wie die Systemanmeldung verwendet.9c ist der „Digital Signature“-Slot. Wird für Dokumentsignaturen oder zum Signieren von Dateien und ausführbaren Dateien verwendet.9d ist der „Key Management“-Slot. Wird für Dinge wie das Verschlüsseln von E-Mails oder Dateien zur Gewährleistung der Vertraulichkeit verwendet.Weitere Informationen
pivit ermöglicht die Auswahl eines Slots über das Flag -w.
Für jeden Befehl wird, wenn kein Slot angegeben ist, standardmäßig 9e verwendet.
Zum Beispiel:
Zertifikatserzeugung
pivit --generate [-w slot]
Signieren
pivit -s -u userid [-w slot]
Zertifikat ausgeben
pivit --print [-w slot]
Standardmäßig erwartet pivit, dass genau ein Yubikey angeschlossen ist. Wenn ein System über mehrere Kartenleser oder Yubikeys verfügt, oder
um einfach sicherzustellen, dass pivit mit dem gewünschten Yubikey kommuniziert, geben Sie die Seriennummer über die Umgebungsvariable PIVIT_YK_SERIAL
an.
Beispiel:
PIVIT_YK_SERIAL=13078292 pivit --print
Dies kann mit jedem Befehl verwendet werden.
pivit --import [--first-pem] [file]
Importiert ein Zertifikat aus file.
Der angegebene Dateiname soll ein serialisiertes x509-Zertifikat enthalten, das als PEM-Block kodiert ist.
Diese Aktion fragt nach der Yubikey-PIN.
Fügen Sie --first-pem hinzu, um den ersten PEM-Block aus file zu importieren und den Rest zu ignorieren. Dies ist hilfreich, wenn Sie eine CA verwenden, die
ihre ausgestellten Zertifikate als Kette oder Bündel bereitstellt, wobei das Endentitätszertifikat zuerst kommt (dies ist die Konvention).
pivit --print
Gibt das im Card-Authentication-Slot des Yubikey gespeicherte Zertifikat zusammen mit seinem Fingerabdruck aus.
Zum Beispiel: