Repreproエクスポートで署名キーが見つかりませんでした


13

数年前に初期のシステム管理者によって設定されたプライベートなdebianリポジトリがあります。パッケージは、リポジトリサーバー上のルートユーザーに対して示されているように、古いキー7610DDDE(失効する必要があります)によって署名されました。

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

pub   1024D/7610DDDE 2006-03-03 [revoked: 2016-03-31]
uid                  Archive Maintainer <root@xxxxxxxxxx.com>

pub   4096R/DD219672 2016-04-18
uid                  Archive Maintainer <root@xxxxxxxxxx.com>

以下のすべてのコマンドは、rootユーザーとしてのものです。repository / conf / distributionsファイルを変更して、明示的に作成した新しいサブキーを署名に使用しました。

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

しかし、dputを使用してパッケージを更新すると、

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)

そして、reprepro exportを直接実行すると、次のようになります:

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

私はグーグルで検索し、適切なgnupgディレクトリを見つけるrepreproの問題の可能性を示す古いスレッドをいくつか見つけました...そのため、上記と同じ結果でこれを試しました:

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

あるスレッドは、正常に動作しているように見えるダミーファイルに署名してキーをテストすることを提案しました...少なくともエラーは報告されず、終了後に576バイトのbla.gpgファイルになりました。

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

repreproのmanページには、「署名に問題がある場合、gpg --list-secret-keys valueを試して、gpgが値を解釈する方法を確認できます。そのコマンドがキーまたは複数のキーをリストしない場合、他の値(keyidなど)、そのgpgは一意のキーに簡単に関連付けることができます。」だから私もそれをチェックして得た:

# gpg --list-secret-keys DD219672
sec   4096R/DD219672 2016-04-18
uid                  Archive Maintainer <root@xxxxxxxxxx.com>

そして最後に、最初に再現を設定したシステム管理者と連絡を取ることができ、パスフレーズなしでキーを試すことを提案しました。そこで、新しい署名キーDD219672を生成して公開し、上記の手順を繰り返しましたが、結果は同じでした。

今日、manページをさらに読んで勉強し、repreproを実行するとpgp-agentが自動的に開始されることに気付いた後、しばらくそれを追いかけることにしました。

私はgpg-agent.confを追加しました

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

そして、ログでgpg-agentがキーを見つけていないことがわかります

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]

これまでのところ、pgp-agentがHAVKEYにリストするキーを見つけている場所と、更新されたパッケージに署名するために新しいキーDD219672を見つけるために正しい方向にポイントする方法を見つけることができませんでした。

回答:


19

私は同じ問題を抱えていましたが、多くのフラストレーションの後、最終的に何が起こっているのかを突き止めました。

repreproこのツールは、に基づいてGPGMEを、使用していますgnupg2。最近のリリースでは、秘密鍵リングの処理方法が変更されました:https : //www.gnupg.org/faq/whats-new-in-2.1.html

GPGは、2つのファイルに公開鍵のペアを維持するために使用:pubring.gpgsecring.gpgのGnuPG 2.1ではこれが変更され... ...無secring方式への移行を容易にするため、GPGはの存在を検出 secring.gpgし、オンザフライキーを変換し、 gpg-agentのキーストア(これはprivate-keys-v1.dGnuPGホームディレクトリ(~/.gnupg)の下のディレクトリです)。これは一度だけ行われ、既存の secring.gpgはgpgの影響を受けなくなります。これにより、古いGnuPGバージョンとGnuPG 2.1が共存できます。ただし、GnuPGの2.1より前のバージョンを使用している場合、新しいgpgを使用して秘密鍵を変更しても、その逆も反映されません。

したがって、gpgを使用して新しいキーを作成した場合、gpg2はそれを認識しません。逆の場合も同様です。

私のために働いたクイックフィックス:

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

そして、もしあなたが他の道を行く必要があるなら、もちろん:

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

設定によっては、追加する必要がある場合もあります --export-secret-subkeys

上記を実行した後reprepro、新しいキーで適切に機能しました。


2
男、それを追跡するためのメダルに値する。
アンドリューシュルマン

2

私にとっての問題は、私はということでしたユーザーとして鍵を生成し、ルートなどのRAN reprepro

起こったことは、「なしsudo」で生成したキーがローカルに追加されたことpubring.gpgです。私は実行するとsudo reprepro ...、私はrootとして、それを実行し、したがって、それはルートの中で鍵を見つけようとするpubring.gpgと、明らかに1を見つけることができません。

解決策は、すべてのgpgコマンドをルートとして実行することでした(eq。sudo -iおよびgpg --gen-key)。実行sudo gpg --list-keysすると、目的のキーと行が表示されることを確認してください/root/.gnupg/pubring.gpg

お役に立てば幸いです!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.