Gostaríamos de usar assinaturas gpg para verificar alguns aspectos de nossas ferramentas de gerenciamento de configuração do sistema. Além disso, gostaríamos de usar um modelo de "confiança" em que chaves sysadmin individuais são assinadas com uma chave de assinatura principal e, em seguida, nossos sistemas confiam nessa chave mestra (e usam a "rede de confiança" para validar assinaturas por nossos administradores de sistema).
Isso nos dá muita flexibilidade, como a capacidade de revogar facilmente a confiança em uma chave quando alguém sai, mas encontramos um problema. Embora o gpg
comando diga se uma chave não é confiável, ela não parece retornar um código de saída indicando esse fato. Por exemplo:
# 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
A parte com a qual nos preocupamos é a seguinte:
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
O código de saída retornado por gpg nesse caso é 0, apesar da falha de confiança:
# echo $?
0
Como fazemos com que o gpg falhe no caso de algo ser assinado com uma assinatura não confiável?
Eu já vi algumas sugestões de que o gpgv
comando retornará um código de saída adequado, mas infelizmente gpgv
não sabe como buscar chaves dos servidores de chaves. Eu acho que podemos analisar a saída de status (usando --status-fd) gpg
, mas existe uma maneira melhor?