Скрипт для проверки подписи с помощью GPG

Скрипт для проверки подписи с помощью GPG

Вы можете передать GPG подписанный файл, и он выдаст сообщение «подпись верна», а затем сохранить открытый текст:

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

и я могу посмотреть на его вывод и убедиться, что да, gh403 подписал это и что да, подпись верна.

Что я хотел бы сделать, так это написать скрипт этого поведения. В частности, мне нужен скрипт, который будет проверять, что подпись хорошаичто ключ, которым он был подписан, имеет определенный идентификатор.

Есть ли простой вызов GPG для этого? Или мне понадобится более сложный скрипт? Спасибо за любые мысли!

решение1

Если вы добавите --status-fd <fd>, gpg выведет машиночитаемый текст статуса в указанный файловый дескриптор ( 1для stdout). Например:

$ 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

Затем просто отмените вывод по умолчанию (перенаправив 2> /dev/null) и проверьте наличие .VALIDSIG fingerprint

Я использую следующее:

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

Вероятно, вам придется снять TRUST_ULTIMATEфлажок, но сохранить VALIDSIG.

Связанный контент