Reprepro Export konnte den Signaturschlüssel nicht finden

13

Wir haben ein privates Debian-Repository, das vor Jahren von einem früheren Systemadministrator eingerichtet wurde. Pakete wurden mit dem älteren Schlüssel 7610DDDE signiert (den ich widerrufen musste), wie hier für den Root-Benutzer auf dem Reposerver gezeigt.

# 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]>

Alle folgenden Befehle gelten als Root-Benutzer. Ich habe die Datei repository / conf / distributions geändert, um den neuen Unterschlüssel zu verwenden, den ich explizit zum Signieren erstellt habe:

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

Aber wenn ich ein Paket mit dput aktualisiere, bekomme ich

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)

Und wenn ich reprepro export direkt starte, bekomme ich:

# 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'!

Ich habe gegoogelt und ein paar alte Threads gefunden, die auf ein mögliches Problem bei der Suche nach dem richtigen Gnupg-Verzeichnis durch reprepro hinwiesen. Deshalb habe ich dies mit den gleichen Ergebnissen wie oben versucht:

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

Ein Thread schlug vor, den Schlüssel zu testen, indem er eine Dummy-Datei signierte, die anscheinend einwandfrei funktionierte. Zumindest wurden keine Fehler gemeldet, und ich erhielt nach Abschluss eine 576-Byte-bla.gpg-Datei.

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

Die Manpage reprepro schlägt außerdem vor: "Wenn beim Signieren Probleme auftreten, können Sie versuchen, den Wert von gpg --list-secret-keys zu ermitteln, um zu sehen, wie gpg den Wert interpretieren kann. Wenn dieser Befehl keine oder mehrere Schlüssel auflistet, versuchen Sie zu finden einen anderen Wert (wie die keyid), den gpg leichter mit einem eindeutigen Schlüssel assoziieren kann. " Also habe ich das auch überprüft und bekam:

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

Und schließlich konnte ich mich mit dem Sys-Administrator in Verbindung setzen, der zuerst unsere Repros eingerichtet hat, und er schlug vor, einen Schlüssel ohne Passphrase zu versuchen. Also habe ich einen neuen Signaturschlüssel generiert, DD219672, veröffentlicht und die obigen Schritte erneut ausgeführt, jedoch mit demselben Ergebnis.

Nachdem ich heute mehr Manpages gelesen und studiert und festgestellt habe, dass pgp-agent automatisch gestartet wird, wenn ich reprepro starte, habe ich mich entschlossen, das für eine Weile zu verfolgen.

Ich habe eine gpg-agent.conf mit hinzugefügt

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

Und ich kann im Protokoll sehen, dass gpg-agent die Schlüssel nicht findet

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]

Bisher konnte ich nicht herausfinden, wo gpg-agent die in HAVKEY aufgelisteten Schlüssel findet und wie man sie in die richtige Richtung zeigt, um den neuen Schlüssel DD219672 zum Signieren unserer aktualisierten Pakete zu finden.

Andy Dorman
quelle

Antworten:

19

Ich hatte das gleiche Problem, und nach viel Frustration spürte ich endlich auf, was los war.

Das repreproTool verwendet gpgme, das auf basiert gnupg2. In einer kürzlich erschienenen Version wurde der Umgang mit dem geheimen Schlüsselbund geändert: https://www.gnupg.org/faq/whats-new-in-2.1.html

GPG die öffentlichen Schlüsselpaaren in zwei Dateien zu halten , verwendet: pubring.gpgund secring.gpg... Mit GnuPG 2.1 änderte sich dies ... die Migration auf die nicht-SECRING Verfahren zu erleichtern, erkennt gpg das Vorhandensein einer secring.gpgund wandelt die Schlüssel on-the-fly in den Schlüsselspeicher von gpg-agent (dies ist das private-keys-v1.dVerzeichnis unterhalb des GnuPG-Ausgangsverzeichnisses ( ~/.gnupg)). Dies geschieht nur einmal und ein bestehendes secring.gpgwird dann von gpg nicht mehr berührt. Dies ermöglicht die Koexistenz älterer GnuPG-Versionen mit GnuPG 2.1. Änderungen an den privaten Schlüsseln, die das neue gpg verwenden, werden jedoch nicht angezeigt, wenn GnuPG-Versionen vor Version 2.1 verwendet werden und umgekehrt.

Wenn Sie also einen neuen Schlüssel mit gpg erstellen, wird er von gpg2 nicht angezeigt und umgekehrt.

Schnellkorrektur, die bei mir funktioniert hat:

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

Und wenn Sie den anderen Weg gehen müssen, natürlich:

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

Abhängig von Ihrem Setup möchten / müssen Sie möglicherweise auch hinzufügen --export-secret-subkeys

Nachdem Sie die oben genannten repreproSchritte ausgeführt haben , haben Sie ordnungsgemäß mit meinem neuen Schlüssel gearbeitet.

Gepard
quelle
2
Alter, du hast eine Medaille verdient, um das aufzuspüren.
Andrew Schulman
2

Für mich war das Problem, dass ich Schlüssel als Benutzer generiert und reprepro als root ausgeführt habe .

Was passiert ist, war, dass Schlüssel, die ich "ohne sudo" generiere, zu meinem lokalen hinzugefügt werden pubring.gpg. Wenn ich sudo reprepro ...es starte, starte ich es als root und deshalb versucht es, den Schlüssel in root zu finden pubring.gpgund findet offensichtlich keinen.

Die Lösung bestand darin, alle gpgBefehle als root auszuführen (Gl. sudo -iUnd dann gpg --gen-key). Stellen Sie sicher, dass Sie beim Ausführen sudo gpg --list-keysdie gewünschten Tasten und die Linie sehen /root/.gnupg/pubring.gpg.

Ich hoffe, das hilft!

Dmytro Bogatov
quelle