Nos gustaría utilizar las firmas gpg para verificar algunos aspectos de nuestras herramientas de administración de configuración del sistema. Además, nos gustaría usar un modelo de "confianza" en el que las claves individuales del administrador de sistemas se firman con una clave maestra de firma, y luego nuestros sistemas confían en esa clave maestra (y usan la "red de confianza" para validar las firmas de nuestros administradores de sistemas).
Esto nos da mucha flexibilidad, como la capacidad de revocar fácilmente la confianza en una clave cuando alguien se va, pero nos hemos encontrado con un problema. Si bien el gpg
comando le dirá si una clave no es confiable, no parece devolver un código de salida que indique este hecho. Por ejemplo:
# 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 que nos importa es esta:
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
El código de salida devuelto por gpg en este caso es 0, a pesar de la falla de confianza:
# echo $?
0
¿Cómo conseguimos que gpg falle en caso de que algo esté firmado con una firma no confiable?
He visto algunas sugerencias de que el gpgv
comando devolverá un código de salida adecuado, pero desafortunadamente gpgv
no sabe cómo obtener claves de los servidores de claves. Supongo que podemos analizar la salida de estado (usando --status-fd) desde gpg
, pero ¿hay una mejor manera?