5

Вы можете передать 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 ответ1

7

Если вы добавите --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 <grawity@nullroute.eu.org>
gpg: Good signature from "Mantas Mikulėnas <grawity@nullroute.eu.org>"
gpg:                 aka "Mantas Mikulėnas <grawity@gmail.com>"
[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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .