
Gestisci certificati x509 su YubiKey con supporto PIV, genera chiavi e richieste di certificato e firma o verifica commit git e file.
Pivit è uno strumento da riga di comando per gestire certificati x509 memorizzati su smart card con supporto per l'applet PIV (Yubikey), e per utilizzare tali certificati per firmare e verificare dati.
È completamente compatibile con il modo in cui la riga di comando di git chiama programmi esterni per firmare e verificare commit e tag.
brew install pivit
go install github.com/cashapp/pivit/cmd/pivit@latest
Per configurare git per usare pivit per firmare e verificare le firme, esegui i seguenti comandi:
git config --(local|global) gpg.format x509
git config --(local|global) gpg.x509.program pivit
pivit --reset
Reimposta l'applet PIV della Yubikey e crea un nuovo PIN per accedervi.
pivit --generate [--p256] [--self-sign | --no-csr] [--assume-yes] [--pin-policy] [--touch-policy]
Genera una nuova coppia di chiavi nello slot di autenticazione della carta della Yubikey.
Questo comando genererà e memorizzerà anche un certificato x509 per la chiave generata, firmato da Yubico.
Se viene fornita l'opzione --p256, la coppia di chiavi viene generata utilizzando la curva ellittica P-256.
Altrimenti, viene utilizzata la curva P-384.
Aggiungi il flag --self-sign per generare un certificato autofirmato;
il certificato viene firmato con la chiave appena generata.
Ti verrà chiesto di confermare che un certificato autofirmato sia davvero desiderato,
poi ti verrà chiesto il PIN, e infine ti verrà chiesto di toccare la tua Yubikey.
L'output conterrà 3 blocchi CERTIFICATE invece di un CERTIFICATE_REQUEST alla fine (esempio di output sotto).
Questa opzione è utile soprattutto per scopi di test.
Il flag --assume-yes può essere usato in combinazione con l'opzione --self-sign per disabilitare la relativa richiesta s/n.
Aggiungi il flag --no-csr per saltare la stampa della richiesta di firma del certificato. In questo caso, non ti verrà chiesto di toccare la tua Yubikey.
Questa opzione è utile se non hai bisogno che la chiave generata faccia parte di una PKI esistente.
Puoi comunque verificare il certificato della chiave utilizzando il certificato di Yubico qui.
Il flag --pin-policy controlla quando richiedere un PIN per accedere alla chiave generata.
Impostalo su uno tra never, once o always (il valore predefinito è never).
Il flag --touch-policy controlla quando richiedere di toccare fisicamente l'hardware per accedere alla chiave generata.
Impostalo su uno tra never, cached o always (il valore predefinito è always).
L'output del comando sarà simile al seguente:
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-----
La CERTIFICATE REQUEST alla fine è firmata dalla nuova chiave privata generata,
e può essere utilizzata per emettere un certificato firmato da una CA.
Se scegli di emettere e utilizzare il tuo certificato, è importante verificare anche che:
Pivit consente di impostare diversi attributi nella CSR tramite variabili d'ambiente.
Le seguenti opzioni del certificato verranno impostate come segue:
Subject.CommonName sarà impostato sul valore della variabile d'ambiente PIVIT_EMAIL.Subject.Organization sarà impostato sul valore della variabile d'ambiente PIVIT_ORG.Subject.OrganizationalUnit sarà impostato sul valore della variabile d'ambiente PIVIT_ORG_UNIT.Inoltre, i seguenti Subject Alternative Name (SAN) saranno inclusi nella richiesta di certificato:
PIVIT_EMAILPIVIT_CERT_URIS (gli URI sono separati da uno spazio)Il modulo PIV supporta più slot in cui è possibile memorizzare chiavi e certificati.
Slot disponibili - 9a, 9c, 9d e 9e.
9e è lo slot "Card Authentication" (autenticazione della carta).9a è lo slot "Authentication" (autenticazione). Utilizzato per azioni come l'accesso al sistema.9c è lo slot "Digital Signature" (firma digitale). Utilizzato per la firma di documenti, o per firmare file ed eseguibili.9d è lo slot "Key Management" (gestione delle chiavi). Utilizzato per cose come la crittografia di e-mail o file a scopo di riservatezza.Per maggiori informazioni
pivit consente di scegliere uno slot usando il flag -w.
Per ogni comando, se non viene specificato alcuno slot, viene usato 9e per impostazione predefinita.
Per esempio:
Generazione del certificato
pivit --generate [-w slot]
Firma
pivit -s -u userid [-w slot]
Stampa di un certificato
pivit --print [-w slot]
Per impostazione predefinita, pivit prevede che sia collegata una singola Yubikey. Se un sistema ha più lettori di carte o più Yubikey, o
semplicemente per garantire che pivit stia comunicando con la Yubikey desiderata, specifica il numero di serie tramite la variabile
d'ambiente PIVIT_YK_SERIAL.
Esempio:
PIVIT_YK_SERIAL=13078292 pivit --print
Questo può essere usato con qualsiasi comando.
pivit --import [--first-pem] [file]
Importa un certificato da file.
Il nome file fornito deve contenere un certificato x509 serializzato codificato come blocco PEM.
Questa azione richiede il PIN della Yubikey.
Aggiungi --first-pem per importare il primo blocco PEM da file, ignorando il resto. È utile se si utilizza una CA che
fornisce i certificati emessi come catena o bundle, con il certificato dell'entità finale per primo (questa è la convenzione).
pivit --print
Stampa il certificato memorizzato nello slot di autenticazione della carta della Yubikey, insieme alla sua impronta.
Per esempio: