Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
pivit — x509-Zertifikate auf PIV-fähigen YubiKeys verwalten, Schlüssel und Zertifikatsanforderungen erstellen sowie Git-Commits und Dateien signieren oder verifizieren. | Kitploit
Tools/GitHubGitHub/cashapp/pivit
KryptographieHardware-SicherheitAuthentifizierung
GitHubcashapp/pivit

pivit

x509-Zertifikate auf PIV-fähigen YubiKeys verwalten, Schlüssel und Zertifikatsanforderungen erstellen sowie Git-Commits und Dateien signieren oder verifizieren.

Repository anzeigen
1009vor 2 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

codecov

Pivit

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.

Installation

Brew

root@kitploit:~
brew install pivit

Go install

root@kitploit:~
go install github.com/cashapp/pivit/cmd/pivit@latest

Verwendung

Um git so einzurichten, dass pivit zum Signieren und Verifizieren von Signaturen verwendet wird, führen Sie die folgenden Befehle aus:

root@kitploit:~
git config --(local|global) gpg.format x509
git config --(local|global) gpg.x509.program pivit

Yubikey-PIV zurücksetzen und initialisieren

root@kitploit:~
pivit --reset

Setzt das PIV-Applet des Yubikey zurück und erstellt eine neue PIN für den Zugriff darauf.

Ein Zertifikat erzeugen

root@kitploit:~
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:

root@kitploit:~
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:

  • Das Geräteattestierungszertifikat ist von Yubico signiert.
  • Das Schlüsselzertifikat ist vom Geräteattestierungszertifikat signiert.
  • Der öffentliche Schlüssel in der Zertifikatsignieranfrage ist derselbe wie der öffentliche Schlüssel im Schlüsselzertifikat.

Parameter der Zertifikatsignieranfrage

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:

  • E-Mail-Adressen enthalten PIVIT_EMAIL
  • URIs enthalten alle URLs, die in der Umgebungsvariable PIVIT_CERT_URIS angegeben sind (URIs werden durch ein Leerzeichen getrennt)

PIV-Slot-Unterstützung

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.
    Dies ist der einzige Slot, der beim Signieren keinen PIN-Zugriff auf den privaten Schlüssel erfordert, was die Nutzung reibungsloser macht.
  • 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

    root@kitploit:~
    pivit --generate [-w slot]
    
  • Signieren

    root@kitploit:~
    pivit -s -u userid [-w slot]
    
  • Zertifikat ausgeben

    root@kitploit:~
    pivit --print [-w slot]
    

Einen Yubikey anhand der Seriennummer festlegen

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:

root@kitploit:~
PIVIT_YK_SERIAL=13078292 pivit --print

Dies kann mit jedem Befehl verwendet werden.

Zertifikat in den Yubikey importieren

root@kitploit:~
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).

Zertifikatinformationen ausgeben

root@kitploit:~
pivit --print

Gibt das im Card-Authentication-Slot des Yubikey gespeicherte Zertifikat zusammen mit seinem Fingerabdruck aus.
Zum Beispiel:

root@kitploit:~
> pivit --print
bad126c47dc90e90e0c7ec90ec682b1717e52757
-----BEGIN CERTIFICATE-----
MIICczCCAVugAwIBAgIRANATKTxzlHOJgMdV30XRz5kwDQYJKoZIhvcNAQELBQAw
ITEfMB0GA1UEAwwWWXViaWNvIFBJViBBdHRlc3RhdGlvbjAgFw0xNjAzMTQwMDAw
MDBaGA8yMDUyMDQxNzAwMDAwMFowJTEjMCEGA1UEAwwaWXViaUtleSBQSVYgQXR0
ZXN0YXRpb24gOWUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAT1l76Mvo6dJ4CwX2QQ
HImYRWbxLqt1kCVsn0PUn20DYtSKLuq8kCnMAn+kdneqjtaaBmWuPJH+g7LMyI18
QDQp2w+qSOf9ZWrOupMAGM8EpWXNTSNKoE50JhKXFbudBByjTjBMMBEGCisGAQQB
gsQKAwMEAwUBAjAUBgorBgEEAYLECgMHBAYCBACDq1IwEAYKKwYBBAGCxAoDCAQC
AQIwDwYKKwYBBAGCxAoDCQQBBDANBgkqhkiG9w0BAQsFAAOCAQEAGSmu0PUMDfEb
PkmkJ/rKYvpOKhbmpryjXuZ7ENJ3jGq3foyLSN+aBbd3M1im2ejC6/upthcp1N5M
Mg2SN6MBRS4crtt43DVHepBPt2W07vW8h4uFosJX29HdhK0dP+RnBGDdWYo0nq7y
7q1Y1c0BI7oGnaORL0DzSDtdxAJAphjspWsWNCIP2DTWQPhLTg4DqmYd/ahygVsZ
IE64QvJDQC72Dfyad6tIajmtPncqPt857H0hEJv2X58iOoJA/wAeuId4or859cJU
GTDbN7Ke4LWXRbs7StJTgefmNgWmKjm1Q2qs80WGShyQ6OrxALejd8jivtcTwsDz
WvzdmHCOmg==
-----END CERTIFICATE-----

Der Fingerabdruck des Zertifikats wird berechnet, indem eine SHA1-Prüfsumme über die rohen Zertifikatsbytes gebildet und die Prüfsumme anschließend als Hex-String kodiert wird.

Verwenden Sie den Fingerabdruck des Zertifikats, um git mitzuteilen, welches Zertifikat beim Signieren von Commits und Tags verwendet werden soll:

root@kitploit:~
FINGERPRINT=`pivit --print | head -1`
git config --(local|global) user.signingkey $FINGERPRINT

Signieren

root@kitploit:~
pivit -s [-a] [-b] [-u userid] [--status-fd=[num]] [-t url] [file]
  • -a (--armor) - ob die Signatur in ASCII-Armor verpackt wird, um sie druckbar zu machen.
  • -b (--detach-sign) - erstellt eine separate Signatur.
  • -u (--local-user) - entweder eine E-Mail-Adresse oder ein als Hex-String kodierter Schlüsselfingerabdruck.
    Diese Kennung bestimmt, welches Zertifikat verwendet wird. Wenn eine E-Mail-Adresse angegeben ist, wird nach einem Zertifikat gesucht, das die angegebene Adresse enthält.
    Wenn ein Schlüsselfingerabdruck angegeben ist, wird nach einem Zertifikat gesucht, dessen SHA1-Prüfsumme mit dem angegebenen Hex-String übereinstimmt.
  • --status-fd - Dateideskriptor, an den Statusmeldungen ausgegeben werden. 1 ist stdout, 2 ist stderr.
    Jeder Wert 0 oder kleiner bedeutet, dass keine Statusmeldungen geschrieben werden.
  • -t (--timestamp-authority) - URL einer RFC3161-Zeitstempelbehörde, die für die Zeitstempelerstellung verwendet wird.

Dieser Befehl lässt den Yubikey blinken und blockiert, bis er berührt wird.

Wenn git zum Signieren von Commits und Tags eingerichtet ist, verwendet es die folgenden fest codierten Parameter -sbau [user.signingkey] --status-fd=1.
user.signingkey wird aus der lokalen/globalen Konfiguration von git übernommen.

Hinweis: Pivit wurde entwickelt, um das Signieren von Git-Commits zu unterstützen.
Wenn der verwendete Schlüssel jedoch mit --pin-policy=always erstellt wurde, wird dies möglicherweise nicht vollständig unterstützt.
Derzeit fragt Pivit die PIN nur über die Befehlszeile ab. Wenn Sie GUI-basierte Git-Clients wie GitKraken oder SourceTree verwenden, werden Sie diese Abfrage wahrscheinlich verpassen.

Signatur verifizieren

root@kitploit:~
pivit --verify [file ...]

Verifiziert die signierten Daten, die in den Dateiargument(en) angegeben sind.

Wenn keine Dateien angegeben wurden, wird von stdin gelesen.
Wenn ein oder kein Dateipfad angegeben wurde, wird angenommen, dass die Signatur an den signierten Daten angehängt ist.

Andernfalls wird angenommen, dass die erste Datei die Signatur und die zweite die signierten Daten enthält.
Geben Sie - an, um zu kennzeichnen, dass die signierten Daten von stdin gelesen werden sollen.

Tool herunterladen
  • file - Pfad zu der Datei, die signiert wird. Wenn kein Dateiname angegeben ist, wird stdin verwendet.