我有一个带有子键的GPG公钥。当我尝试在发布过程中签署我的Maven工件时,插件使用子键而不是主键进行签名。
在这里查看插件的文档: http://maven.apache.org/plugins/maven-gpg-plugin/sign-mojo.html
我没有看到设置控制使用哪个键的明显属性。有可能控制这个吗?
答案 0 :(得分:1)
在询问邮件列表上的一些问题之后,似乎我不是唯一一个有这个问题的人。
在我的情况下,我使用Mac上的GPG Keychain Access UI创建了我的密钥对。使用相同工具创建密钥的其他用户也报告了与Maven相同的问题。
无论出于何种原因,当您使用该UI创建密钥对时,它不仅会创建顶级密钥,还会创建子密钥。使用命令行工具创建新密钥对时,不会发生这种情况。
所以我去了命令行,撤销了子键,一切都开始工作了。
我不确定基础问题是否与GPG KeyChain Access UI创建密钥的方式有关,或者它是否是maven插件读取密钥的方式。
答案 1 :(得分:1)
TLDR;您可以通过删除或撤消子项来控制它。建议撤销。
-
例如,this sonatype issue已经讨论过这个问题。此外,它不仅影响用户界面 - 我在Windows 7上使用gpg4win创建了我的密钥,并且生成了命令行密钥以及pub和子密钥:
> gpg --gen-key
> gpg --list-keys
pub 2048R/xxxxxxxx 2014-12-18
uid
sub 2048R/yyyyyyyy 2014-12-18
评论说你有两个选择:
您需要删除子密钥,然后重新签名,再次部署
...
我撤销了密钥(没有删除它),这也很有用。
问题中的评论说明the document已就指示进行了更新,但链接不再有效。通过使用一些页面缓存,我能够挽救内容,如下所示:
删除子密钥
默认情况下,某些PGP工具会生成子签名密钥并将其用于 签名而不是使用主键。如果您使用,这是一个问题 它来签署工件并将工件部署到中央存储库, 因为Nexus无法从签名中获取主键ID 由子密钥生成,因此无法导入公钥 无法验证工件。修复方法是删除子签名密钥 所以PGP将使用主键进行签名。
要想知道天气你有一个子签名密钥,请在下面运行命令 使用您自己的密钥ID:
$ gpg --edit-key A6BAB25C
gpg (GnuPG/MacGPG2) 2.0.17; Copyright (C) 2011 Free Software
Foundation, Inc. This is free software: you are free to change and
redistribute it. There is NO WARRANTY, to the extent permitted by law.
Secret key is available.
pub 2048R/A6BAB25C created: 2011-08-31 expires: 2012-06-26 usage: SC
trust: ultimate validity: ultimate
sub 2048R/DD289F64 created: 2011-08-31 expired: 2011-09-30 usage: E
sub 2048R/8738EC86 created: 2011-12-19 expires: 2012-06-16 usage: S
[ultimate] (1). Juven Xu (for testing) <test@juvenxu.com>
从上面的示例中可以看出,此键有2个带ID的子键 DD289F64和8738EC86。输出还显示创建时间和 到期时间。这里重要的是用法:E代表 加密因此子密钥DD289F64仅用于加密,S代表 对于签名,因此子键8738EC86仅用于签名。如果是主要的 key有一个S子键,它会用它来签名,否则本身会 签约工作。所以我们要删除子键8738EC86。
首先选择我们要删除的子键,因为它的索引是2 (索引从0开始),我们运行命令:
GPG&GT;关键2
pub 2048R/A6BAB25C created: 2011-08-31 expires: 2012-06-26 usage: SC
trust: ultimate validity: ultimate
sub 2048R/DD289F64 created: 2011-08-31 expired: 2011-09-30 usage: E
sub* 2048R/8738EC86 created: 2011-12-19 expires: 2012-06-16 usage: S
[ultimate] (1). Juven Xu (for testing) <test@juvenxu.com>
从输出中可以看出,子键8738EC86标有*。 现在删除它:
GPG&GT; delkey
Do you really want to delete this key? (y/N) y
pub 2048R/A6BAB25C created: 2011-08-31 expires: 2012-06-26 usage: SC
trust: ultimate validity: ultimate
sub 2048R/DD289F64 created: 2011-08-31 expired: 2011-09-30 usage: E
[ultimate] (1). Juven Xu (for testing) <test@juvenxu.com>
提示如果您已经分发了公钥,那么效果会更好 撤消子签名密钥而不是删除它,尽管两种方式 您可以将主键作为签名密钥。参见The GNU 隐私手册,用于删除和撤销之间的区别。至 撤销子密钥,使用gpg&gt; revkey而不是gpg&gt; delkey。
雅! 8738EC86不再列出,最后一步是保存我们的 改变:
GPG&GT;保存
那就是它!现在,您可以通过签署文件来测试更改,然后 验证它。输出应包含以下内容:
gpg:使用***密钥ID签名************************* [YOUR-PRIMARY-KEY-ID]
所以,对我而言,实际步骤是
gpg --edit-key PRIMARYKEYID
key 1
revkey
[y]
[3]
save
并重做签名/发布。