Skript zum Überprüfen einer Signatur mit GPG

Skript zum Überprüfen einer Signatur mit GPG

Sie können GPG eine signierte Datei zuführen. Daraufhin gibt es die Meldung „Signatur ist gültig“ aus und speichert den Klartext:

[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@***********>"

und ich kann mir die Ausgabe ansehen und überprüfen, ob gh403 dies tatsächlich signiert hat und ob die Signatur gültig ist.

Ich möchte dieses Verhalten gerne per Skript programmieren können. Genauer gesagt brauche ich ein Skript, das überprüft, ob die Signatur gültig ist.Unddass der Schlüssel, mit dem es signiert wurde, eine bestimmte ID hat.

Gibt es dafür einen einfachen GPG-Aufruf? Oder bräuchte ich ein aufwändigeres Skript? Danke für alle Ideen!

Antwort1

Wenn Sie hinzufügen --status-fd <fd>, gibt gpg computerlesbaren Statustext an den angegebenen Dateideskriptor aus ( 1für stdout). Beispiel:

$ 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

Verwerfen Sie dann einfach die Standardausgabe (durch Umleitung 2> /dev/null) und suchen Sie nach .VALIDSIG fingerprint

Ich verwende folgendes:

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

Sie müssen das TRUST_ULTIMATEHäkchen wahrscheinlich entfernen, aber behalten Sie VALIDSIG.

verwandte Informationen