Vorremmo usare le firme gpg per verificare alcuni aspetti dei nostri strumenti di gestione della configurazione del sistema. Inoltre, vorremmo utilizzare un modello di "trust" in cui le singole chiavi sysadmin sono firmate con una chiave di firma master, e quindi i nostri sistemi si fidano di quella chiave master (e utilizzano la "rete di fiducia" per convalidare le firme dei nostri amministratori di sistema).
Questo ci dà molta flessibilità, come la possibilità di revocare facilmente la fiducia su una chiave quando qualcuno lascia, ma abbiamo riscontrato un problema. Mentre il gpg
comando ti dirà se una chiave non è attendibile, non sembra restituire un codice di uscita che indica questo fatto. Per esempio:
# gpg -v < foo.asc
Version: GnuPG v1.4.11 (GNU/Linux)
gpg: armor header:
gpg: original file name=''
this is a test
gpg: Signature made Fri 22 Jul 2011 11:34:02 AM EDT using RSA key ID ABCD00B0
gpg: using PGP trust model
gpg: Good signature from "Testing Key <someone@example.com>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: ABCD 1234 0527 9D0C 3C4A CAFE BABE DEAD BEEF 00B0
gpg: binary signature, digest algorithm SHA1
La parte che ci interessa è questa:
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Il codice di uscita restituito da gpg in questo caso è 0, nonostante l'errore di fiducia:
# echo $?
0
Come possiamo far fallire gpg nel caso in cui qualcosa sia firmato con una firma non attendibile?
Ho visto alcuni suggerimenti secondo cui il gpgv
comando restituirà un codice di uscita corretto, ma sfortunatamente gpgv
non sa come recuperare le chiavi dai server di chiavi. Suppongo che possiamo analizzare l'output di stato (usando --status-fd) da gpg
, ma c'è un modo migliore?