20100210

mutt and gpg. history of little investigation.

mutt и gpg. история маленького расследования.

как-то за время пользования mutt-ом стало уже привычным видеть:
gpg: Can't check signature: public key not found

но наконец-то оно меня достало.
да, /usr/share/doc/mutt/examples/gpg.rc у меня скопирован в ~/.mutt/, да, в ~/.muttrc добавлена строчка
source ~/.mutt/gpg.rc.
но вот ключи оно самостоятельно получать и проверять не хотит.

начинаю разбираться. вижу в том самом gpg.rc такие строчки:
# This will work when #172960 will be fixed upstream
# set pgp_getkeys_command="gpg --recv-keys %r"
читаю про этот «баг» в дебиановской багзилле и в mutt-овском trac-е. написано, что вместо keyid-ов на место «%r» mutt подставляет email-ы. и gpg обламывается.
даже исходники скачал. даже установил pkspxyc и потестировал.
оказывается, ребяты, такая вот фигня:
pgp умеет получать ключи по email-адресу, но не умеет по keyid-у.
а gpg умеет получать ключи по id-у, но не умеет по email-адресу.
хуже того. mutt вообще с id-ами не работает (насколько я вижу по исходникам) и строчку с id-ом (в виде gpg: Signature made Fri 08 Aug 2008 06:38:37 PM MSD using DSA key ID 545A2506) выдаёт сам gpg на основании сигнатуры. а mutt-у id — до лампочки.
поэтому косметической правкой исходников тут, увы не обойтись (а я так на это надеялся!).

тупик? тупик.
чешу опилки. начёсывается цепочка умозаключений:
gpg ведь вызывается для проверки? вызывается (командой, записанной в pgp_verify_command).
id он при этом из сигнатуры выковыривает? выковыривает.
т.е., id получить можно. а значит, можно и ключ скачать с keyserver-а.
ну, думаю, дело в шляпе. засучиваю рукава и прикидываю, как я эту команду (записанную в pgp_verify_command) заменю на скрипт, который будет этим всем делом заниматься. по ходу дела просматриваю упоминания про keyserver в man gpg.
и.
натыкаюсь на параметр --keyserver-options. у которого есть, в том числе, опция auto-key-retrieve:
This option enables the automatic retrieving of keys from a keyserver when verifying signatures made by keys that are not on the local keyring.
вау! это же прямо то, что мне нужно!
привожу строчку в gpg.rc к виду:
set pgp_verify_command="gpg --keyserver-options auto-key-retrieve --status-fd=2 --no-verbose --quiet --batch --output - --verify %s %f"
проверяю… работает, собака! исправно получает ключики, добавляет в keyring и верифицирует подписанные email-ы.

p.s. понятно, что вооружившись всей этой информацией, я без труда обнаружил вагон подсказок (ведь этому «багу» уже добрых восемь лет!). в том числе и предложение раскомментировать в ~/.gnupg/gpg.conf строчку
keyserver-options auto-key-retrieve
но это уже не интересно. это как после драки кулаками махать: нет того веселья.
проводить самостоятельное расследование гораздо прикольнее, согласитесь!

Комментариев нет: