Wir möchten GPG-Signaturen verwenden, um einige Aspekte unserer Systemkonfigurationsverwaltungstools zu überprüfen. Darüber hinaus möchten wir ein "Vertrauensmodell" verwenden, bei dem einzelne Sysadmin-Schlüssel mit einem Master-Signaturschlüssel signiert werden. Anschließend vertrauen unsere Systeme diesem Master-Schlüssel (und verwenden das "Vertrauensnetz", um Signaturen durch unsere Sysadmins zu validieren).
Dies gibt uns viel Flexibilität, zum Beispiel die Möglichkeit, das Vertrauen in einen Schlüssel einfach zu widerrufen, wenn jemand abreist, aber wir haben ein Problem. Während der gpg
Befehl Ihnen mitteilt , ob ein Schlüssel nicht vertrauenswürdig ist, scheint er keinen Beendigungscode zurückzugeben, der auf diesen Sachverhalt hinweist. Beispielsweise:
# 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
Der Teil, der uns interessiert, ist der folgende:
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Der Exit-Code, der in diesem Fall von gpg zurückgegeben wird, ist 0, trotz des Vertrauensfehlers:
# echo $?
0
Wie kann gpg fehlschlagen, wenn etwas mit einer nicht vertrauenswürdigen Signatur signiert ist?
Ich habe einige Vorschläge gesehen, dass der gpgv
Befehl einen korrekten Exit-Code gpgv
zurückgibt, weiß aber leider nicht, wie man Schlüssel von Keyservern abruft. Ich denke, wir können die Statusausgabe (mit --status-fd) analysieren gpg
, aber gibt es einen besseren Weg?