我有一个GPG公钥和一个子密钥。当我尝试签署我的Maven构件作为发布过程的一部分时,插件使用子键而不是主键进行签名。如何强制maven-gpg-plugin使用主要gpg密钥而不是子密钥?
看一下文档这里插件: http://maven.apache.org/plugins/maven-gpg-plugin/sign-mojo.html
我没有看到一个明显的属性设置来控制使用哪个键。有没有可能控制这个?
我有一个GPG公钥和一个子密钥。当我尝试签署我的Maven构件作为发布过程的一部分时,插件使用子键而不是主键进行签名。如何强制maven-gpg-plugin使用主要gpg密钥而不是子密钥?
看一下文档这里插件: http://maven.apache.org/plugins/maven-gpg-plugin/sign-mojo.html
我没有看到一个明显的属性设置来控制使用哪个键。有没有可能控制这个?
在邮件列表上问了一些问题之后,看起来我并不是这个问题唯一的问题。
在我的情况下,我在我的Mac上使用GPG Keychain Access UI创建了我的密钥对。使用相同工具创建密钥的其他用户也报告了与Maven相同的问题。
无论出于何种原因,当您使用该UI创建密钥对时,它不仅会创建顶级密钥,还会创建一个子密钥。当您使用命令行工具创建新的密钥对时,不会发生这种情况。
所以我去了命令行,撤销了子项,所有的东西都开始工作。
我不确定底层问题是否与GPG KeyChain Access UI创建键的方式一样,或者它是Maven插件读取键的方式。
TLDR;您可以通过删除或撤销该子项来控制它。建议撤销。
-
这已经在this sonatype issue进行了讨论,例如。此外,它不仅影响到UI - 我在Windows 7上使用gpg4win创建我的钥匙,和命令行密钥生成生成两个酒吧和子项:
> 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键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) <[email protected]>
由于你可以从上面的例子中看到,这个键有两个子键ID DD289F64和8738EC86。输出还显示创建时间和到期时间。这里重要的是用法:E代表 加密,所以子密钥DD289F64仅用于加密,S代表 用于签名,因此子密钥8738EC86仅用于签名。如果一个主要的 密钥有一个S子密钥,它将使用它进行签名,否则它本身将 做签名工作。所以我们要删除子密钥8738EC86。
首先选择我们要删除的子键,因为它的指数是2 (指数从0开始),我们运行命令:
GPG>键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) <[email protected]>
从输出中可以看到,子键8738EC86标有*。 现在删除它:
GPG> 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) <[email protected]>
提示如果您已经分发你的公钥,最好是 撤销子签名密钥,而不是将其删除,但无论是方式 您可以将您的主键作为签名密钥。请参阅GNU 隐私手册,了解删除和撤销之间的区别。到 撤消一个子密钥,使用gpg> revkey而不是gpg> delkey。
雅! 8738EC86没有列出任何更多,最后一步就是拯救我们的 变化:
GPG>保存
这就是它!现在您可以通过签署文件来测试更改,然后 进行验证。输出应该包含如下内容:
gpg:签名*************************使用***密钥ID [YOUR-主键-ID]
所以,对我的实际步骤
gpg --edit-key PRIMARYKEYID
key 1
revkey
[y]
[3]
save
和重做符号/释放。