Obrigado ao @Joe Damato por me apontar para o utilitário gpg-preset-passphrase
. A solução descrita abaixo foi desenvolvida e testada em um host Fedora 25 com gnupg2-2.1.x
instalado.
(nb Ainda não descobri como determinar o valor de keygrip da chave de assinatura do RPM em plataformas executando versões antigas do GnuPG porque elas não suportam a opção --with-keygrip
. Se alguém quiser comentar sobre uma solução para isso, por favor, faça.)
Assegure que ~/.gnupg/gpg-agent.conf
contenha a linha.
allow-preset-passphrase
Após modificar ~/.gnupg/gpg-agent.conf
, recarregue o agente gpg.
$ gpg-connect-agent reloadagent /bye
OK
Liste as chaves GPG para obter o ID da chave com oito dígitos hexadecimais para a chave de assinatura do RPM. Neste exemplo, a ID da chave é 0123ABCD
.
$ gpg --list-keys
/home/me/.gnupg/pubring.gpg
-----------------------------------
pub 1024R/0123ABCD 2015-06-13
uid Test (rpm-sign)
Obtenha o código do keygrip para a chave de assinatura do RPM. (nos navegadores RHEL 7.2 e Fedora 20 que utilizo para testes, o programa GPG2(1)
nesses hosts não reconheceu a opção --with-keygrip
.)
$ gpg2 --with-keygrip -K 0123ABCD
sec rsa1024 2015-06-13 [SCEA]
0A1B2C3D4E5F6A7B8C9D0E0F1A2B3C4D0123ABCD
Keygrip = 2EACA0C5A4B46168EB91970B6715AF1AA52968BE
uid [ unknown] Test (rpm-sign)
Armazene em cache a frase secreta para a chave de assinatura do RPM. Na linha de comando mostrada abaixo, substitua 'PASSPHRASE'
pela senha real da chave de assinatura do RPM.
$ /usr/libexec/gpg-preset-passphrase --passphrase 'PASSPHRASE' --preset 2EACA0C5A4B46168EB91970B6715AF1AA52968BE
:: TESTE ::
Crie um arquivo RPM de teste que não esteja assinado. Verifique se o arquivo RPM de teste não está assinado.
$ rpm --checksig test-1.0.0-1.f25.noarch.rpm
test-1.0.0-1.fc25.noarch.rpm: sha1 md5 OK
Verifique se RPMSIGN(8)
usa a senha armazenada em cache - ou seja, que RPMSIGN(8)
não solicita a inserção da frase secreta para a chave de assinatura do RPM - ao assinar o arquivo RPM de teste.
$ rpmsign --resign test-1.0.0-1.f25.noarch.rpm
Verifique se o arquivo RPM de teste está assinado.
$ rpm --checksig test-1.0.0-1.f25.noarch.rpm
test-1.0.0-1.fc25.noarch.rpm: rsa sha1 (md5) pgp md5 OK
:: ADENDO 1 (2016-12-17) ::
De acordo com esta página da Web do GnuPG, edição 2331 :
gpg1 does not known about keygrips. Instead of the keygrip, gpg1 uses the fingerprint as cacheid for gpg-agent. The agent's command GET_PASSPHRAE, as used by gpg1, uses a different cache mode from what gpg-preset-passphrases uses. Thus even if you replace the keygrip with the fingerprint of the (sub)key, it won't work.
Por que vale a pena, eu fiz alguns testes com o GnuPG versão 2.0.x em hosts RHEL7 e gpg-preset-passphrase
não parece ser suportado. Eu só posso obter gpg-preset-passphrase
para trabalhar com o GnuPG versão 2.1.x.
Referências
ArcWiki do GnuPG