Reprepro导出找不到签名密钥


13

我们有一个私人的debian存储库,它是由较早的系统管理员在几年前建立的。软件包由旧密钥7610DDDE(我必须撤消)签名,如此处所示,用于回购服务器上的root用户。

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

我用Google搜索并发现了几个旧线程,这些线程指示reprepro找到正确的gnupg目录可能存在问题...所以我尝试了上述相同的结果:

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

一个线程建议通过签名一个看起来不错的虚拟文件来测试密钥...至少它没有报告错误,并且在完成后我得到了一个576字节的bla.gpg文件。

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

reprepro手册页还建议“如果签名有问题,您可以尝试使用gpg --list-secret-keys value来了解gpg如何解释该值。如果该命令未列出任何键或多个键,请尝试查找gpg可以更容易地与唯一键相关联。” 所以我也检查了一下并得到:

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

最后,我能够与首先设置我们代表的系统管理员取得联系,他建议尝试使用没有密码的密钥。因此,我生成了一个新的签名密钥DD219672,并将其发布,再次通过上述步骤,但结果相同。

今天,经过更多阅读和研究手册页,并注意到当我运行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]

到目前为止,我一直无法弄清楚gpg-agent在HAVKEY中找到它列出的密钥的位置,以及如何将其指向正确的方向以找到新密钥DD219672,以对我们更新的软件包进行签名。

Answers:


19

我遇到了同样的问题,经过无奈的挫折终于找到了发生了什么。

reprepro工具使用基于的gpgme gnupg2。该版本的最新版本更改了密钥环的处理方式:https : //www.gnupg.org/faq/whats-new-in-2.1.html

gpg用于将公钥对保存在两个文件中:pubring.gpgsecring.gpg...对于GnuPG 2.1,已进行了更改...为了简化向不加密方法的迁移,gpg会检测到a的存在 secring.gpg并实时转换密钥到gpg-agent的密钥存储区(这是private-keys-v1.dGnuPG主目录(~/.gnupg)下面的目录)。这仅执行一次,secring.gpg然后gpg不再触摸现有的 。这允许较早的GnuPG版本与GnuPG 2.1共存。但是,使用2.1之前的GnuPG版本不会显示使用新gpg对私钥所做的任何更改,反之亦然。

因此,如果您使用gpg创建新密钥,则gpg2将看不到它,反之亦然。

对我有用的快速修复:

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

当然,如果您需要采取其他方法,请执行以下操作:

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

根据您的设置,您可能还希望/需要添加 --export-secret-subkeys

完成上述操作后,可以reprepro正确使用我的新密钥。


2
杜德(Dude),您值得纪念一下。
Andrew Schulman

2

对我来说,问题是我以用户身份生成密钥,以root 用户身份运行reprepro

发生的是,我“无sudo” 生成的密钥被添加到了本地密钥中pubring.gpg。当我运行时,sudo reprepro ...我以root身份运行它,因此它尝试在root的目录中查找密钥pubring.gpg,显然找不到。

解决方案是以gpgroot用户身份先运行所有命令(先运行eq sudo -i,然后运行gpg --gen-key)。确保在运行sudo gpg --list-keys时看到所需的按键和线条/root/.gnupg/pubring.gpg

希望有帮助!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.