如何强制maven-gpg-plugin使用主gpg密钥而不是子密钥?

时间:2011-07-28 05:30:57

标签: maven gnupg

我有一个带有子键的GPG公钥。当我尝试在发布过程中签署我的Maven工件时,插件使用子键而不是主键进行签名。

在这里查看插件的文档: http://maven.apache.org/plugins/maven-gpg-plugin/sign-mojo.html

我没有看到设置控制使用哪个键的明显属性。有可能控制这个吗?

2 个答案:

答案 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

并重做签名/发布。