A exportação do Reprepro não encontrou a chave de assinatura

13

Temos um repositório Debian privado que foi configurado anos atrás por um administrador do sistema anterior. Os pacotes foram assinados pela chave mais antiga, 7610DDDE (que eu tive que revogar), como mostrado aqui para o usuário root no servidor repo.

# gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub   1024D/2D230C5F 2006-01-03 [expired: 2007-02-07]
uid                  Debian Archive Automatic Signing Key (2006)  <[email protected]>

pub   1024D/7610DDDE 2006-03-03 [revoked: 2016-03-31]
uid                  Archive Maintainer <[email protected]>

pub   4096R/DD219672 2016-04-18
uid                  Archive Maintainer <[email protected]>

Todos os comandos abaixo são como usuário root. Eu modifiquei o arquivo repository / conf / distributions para usar a nova subchave que criei explicitamente para assinatura:

Architectures: i386 amd64 source
Codename: unstable
Components: main
...
SignWith: DD219672

Mas quando eu uso o dput para atualizar um pacote eu recebo

Could not find any key matching 'DD219672'!
ERROR: Could not finish exporting 'unstable'!
This means that from outside your repository will still look like before (and
should still work if this old state worked), but the changes intended with this
call will not be visible until you call export directly (via reprepro export)

E quando eu executo reprepro export diretamente eu recebo:

# reprepro -V export unstable
Exporting unstable...
 generating main/Contents-i386...
 generating main/Contents-amd64...
Could not find any key matching 'DD219672'!
ERROR: Could not finish exporting 'unstable'!

Eu pesquisei e encontrei alguns tópicos antigos que indicavam um possível problema com o reprepro encontrando o diretório adequado do gnupg ... então eu tentei isso com os mesmos resultados acima:

# GNUPGHOME=/root/.gnupg reprepro -V export unstable

Um tópico sugeriu testar a chave assinando um arquivo fictício que parecia funcionar bem ... pelo menos não reportou erros e acabei com um arquivo de 576 byte bla.gpg depois que ele foi concluído.

# touch bla
# gpg -u DD219672 --sign bla

A página man do reprepro também sugere "Se houver problemas com a assinatura, você pode tentar gpg --list-secret-keys-value para ver como o gpg poderia interpretar o valor. Se esse comando não listar quaisquer chaves ou várias, tente encontrar algum outro valor (como o keyid), que gpg pode mais facilmente associar com uma chave única. " Então eu verifiquei isso também e consegui:

# gpg --list-secret-keys DD219672
sec   4096R/DD219672 2016-04-18
uid                  Archive Maintainer <[email protected]>

E finalmente consegui entrar em contato com o admin do sistema que primeiro configurou nossas repros e ele sugeriu tentar uma chave sem uma frase secreta. Então eu criei uma nova chave de assinatura, DD219672, publiquei, passei pelas etapas acima novamente, mas com o mesmo resultado.

Hoje, depois de ler e estudar mais páginas man e notar que o pgp-agent é iniciado automaticamente quando eu executo o reprepro, decidi persegui-lo por um tempo.

Eu adicionei um gpg-agent.conf com

debug-level 7
log-file    /root/gpg.agent.log
debug-all

E eu posso ver no log que o gpg-agent não está encontrando as chaves

2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK Pleased to meet you, process 18903
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- RESET
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- OPTION ttyname=/dev/pts/0
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- OPTION ttytype=xterm-256color
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- GETINFO version
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> D 2.1.11
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- OPTION allow-pinentry-notify
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- OPTION agent-awareness=2.1.0
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> OK
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- AGENT_ID
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> ERR 67109139 Unknown IPC command <GPG Agent>
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- HAVEKEY C2C5C59E5E90830F314ABB66997CCFAACC5DEA2F 416E8A33354912FF4843D52AAAD43FBF206252D9 8CE77065EA6F3818A4975072C8341F32CB7B0EF0
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 -> ERR 67108881 No secret key <GPG Agent>
2016-04-18 15:54:00 gpg-agent[15582] DBG: chan_5 <- [eof]

Até agora não consegui descobrir onde o gpg-agent está encontrando as chaves que ele lista no HAVKEY e como apontá-lo na direção certa para encontrar a nova chave, DD219672, para assinar nossos pacotes atualizados.

    
por Andy Dorman 13.04.2016 / 21:07

2 respostas

16

Eu tive o mesmo problema e, depois de muita frustração, finalmente descobri o que estava acontecendo.

A ferramenta reprepro usa o gpgme, que é baseado em gnupg2 . Uma versão recente disso mudou como o anel de chave secreta é tratado: link

gpg used to keep the public key pairs in two files: pubring.gpg and secring.gpg ... With GnuPG 2.1 this changed ... To ease the migration to the no-secring method, gpg detects the presence of a secring.gpg and converts the keys on-the-fly to the the key store of gpg-agent (this is the private-keys-v1.d directory below the GnuPG home directory (~/.gnupg)). This is done only once and an existing secring.gpg is then not anymore touched by gpg. This allows co-existence of older GnuPG versions with GnuPG 2.1. However, any change to the private keys using the new gpg will not show up when using pre-2.1 versions of GnuPG and vice versa.

Assim, se você criar uma nova chave com gpg, o gpg2 não a verá e vice-versa.

Correção rápida que funcionou para mim:

gpg --export-secret-keys | gpg2 --import -

E se você precisar seguir em frente, é claro:

gpg2 --export-secret-keys | gpg --import -

Dependendo da sua configuração, você também pode querer / precisar adicionar --export-secret-subkeys

Depois de fazer o acima, reprepro funcionou corretamente com minha nova chave.

    
por 19.04.2016 / 15:39
2

Para mim, o problema era que eu gerava chaves como usuário e executava o reprepro como root .

O que aconteceu foi que as chaves que gerei "sem sudo " são adicionadas ao meu local pubring.gpg . Quando eu executo sudo reprepro ... eu o executo como root e, portanto, ele tenta encontrar a chave no pubring.gpg do root e obviamente não encontra um.

A solução foi executar todos os comandos gpg como raiz (eq. sudo -i e, em seguida, gpg --gen-key ). Certifique-se de quando você executar sudo gpg --list-keys você vê as chaves desejadas e a linha /root/.gnupg/pubring.gpg .

Espero que ajude!

    
por 03.08.2017 / 00:16