Puede enviar a GPG un archivo que haya sido firmado y mostrará un mensaje de "la firma es buena" y guardará el texto sin formato:
[gh403@shillig-arch ~]$ gpg test.gpg
gpg: Signature made Thu Nov 1 14:19:08 2012 CDT using RSA key ID D1FEC5F4
gpg: Good signature from "gh403 <gh403@***********>"
y puedo mirar su salida y verificar que sí, gh403 firmó esto y que sí, la firma es buena.
Lo que me gustaría poder hacer es programar este comportamiento. Específicamente, necesito un script que verifique que la firma sea buena.yque la clave con la que se ha firmado tiene un ID determinado.
¿Existe una llamada GPG sencilla para hacer esto? ¿O necesitaría un guión más elaborado? ¡Gracias por cualquier idea!
Respuesta1
Si agrega --status-fd <fd>
, gpg generará un texto de estado legible por computadora al descriptor de archivo dado ( 1
para stdout). Por ejemplo:
$ gpg --status-fd 1 --verify authorized_keys.txt
gpg: Signature made 2012-08-18T19:25:12 EEST
gpg: using RSA key D24F6CB2C1B52632
[GNUPG:] SIG_ID BOn6PNVb1ya/KuUc2F9sfG9HeRE 2012-08-18 1345307112
[GNUPG:] GOODSIG D24F6CB2C1B52632 Mantas Mikulėnas <[email protected]>
gpg: Good signature from "Mantas Mikulėnas <[email protected]>"
gpg: aka "Mantas Mikulėnas <[email protected]>"
[GNUPG:] VALIDSIG 2357E10CEF4F7ED27E233AD5D24F6CB2C1B52632 2012-08-18 1345307112 0 4 0 1 2 00 2357E10CEF4F7ED27E233AD5D24F6CB2C1B52632
[GNUPG:] TRUST_ULTIMATE
Luego simplemente descarte la salida predeterminada (redireccionando 2> /dev/null
) y verifique .VALIDSIG fingerprint
Yo uso lo siguiente:
fprint="2357E10CEF4F7ED27E233AD5D24F6CB2C1B52632"
verify_signature() {
local file=$1 out=
if out=$(gpg --status-fd 1 --verify "$file" 2>/dev/null) &&
echo "$out" | grep -qs "^\[GNUPG:\] VALIDSIG $fprint " &&
echo "$out" | grep -qs "^\[GNUPG:\] TRUST_ULTIMATE\$"; then
return 0
else
echo "$out" >&2
return 1
fi
}
if verify_signature foo.txt; then
...
fi
Probablemente necesitarás quitar el TRUST_ULTIMATE
cheque, pero mantenlo VALIDSIG
.