一、问题描述
我这边情况是这样的,原本在A电脑上,通过maven打包安装都是好的,最近新弄了台电脑,然后把A电脑的gpg秘钥通过Kleopatra的方式直接导出来
然后在B电脑上通过Kleopatra导入,整了很久,在IDEA中执行maven install操作一直报如下错误:
gpg: no default secret key: No secret key
gpg: signing failed: No secret key
二、解决方法
我这边在网上找了很多的解决方法,以及自己遇到的问题,可自行参考操作下,最终通过gpg命令方式导入导出成功解决。
2.1.证书过期
通过如下方式查看:
gpg --list-keys
gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
/Users/xxx/.gnupg/xxx.gpg
-----------------------------
pub 2048R/236D3BEFxxxx 2016-12-30 [expired: 2018-12-30]
uid xxxx <...@qq.com>
注意上面的expired: 2018-12-30,说明该证书有过期时间,此时需要gpg续订过期的密钥对:
第一步:进入密钥编辑
gpg --edit-key 236D3BEFxxxx
236D3BEFxxxx就是上面pub后面的那串字符串。
第二步:延长私钥与公钥的过期时间,并保存修改
gpg> expire
将要变更主钥的使用期限。
请设定这把密钥的有效期限。
0 = 密钥永不过期
<n> = 密钥在 n 天后过期
<n>w = 密钥在 n 周后过期
<n>m = 密钥在 n 月后过期
<n>y = 密钥在 n 年后过期
密钥的有效期限是?(0) 0
密钥永远不会过期
以上正确吗?(y/n)y
................
gpg: WARNING: Your encryption subkey expires soon.
gpg: You may want to change its expiration date too.
gpg> key 1
......................
gpg> expire
将要变更子钥的使用期限。
请设定这把密钥的有效期限。
0 = 密钥永不过期
<n> = 密钥在 n 天后过期
<n>w = 密钥在 n 周后过期
<n>m = 密钥在 n 月后过期
<n>y = 密钥在 n 年后过期
密钥的有效期限是?(0) 0
密钥永远不会过期
以上正确吗?(y/n)y
.....................
gpg> save
此时就已经修改好了。
2.2.将私钥导入新环境,gpg --list-keys命令输出uid [unknown]
我这边后来又参考了网上的另一种方式方式导入导出
A电脑导出
gpg --export-ownertrust > otrust.txt
B电脑导入
gpg --import-ownertrust < otrust.txt
在执行以下命令时
gpg --list-keys
发现A和B电脑UID输出的东西对不上,A电脑上显示的是
uid [ ultimate ] User <xxx@qq.com >
B电脑上却显示的是
uid [ unknown ] User <xxx@qq.com >
解决方法如下:
GNUPG的信任数据库存储在 ~/.gnupg/trustdb.gpg
您可以使用以下--export-ownertrust
选项备份此信任数据库
gpg --export-ownertrust > file.txt
如果导出了密钥,以后又将其导入到新环境中,则信任数据库将不再存在。
gpg --edit-key 236D3BEFxxxx
gpg> trust
Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)
请确定您信任该用户的程度,以正确验证其他用户的密钥
(通过查看护照、检查不同来源的指纹等)
1 = I don't know or won't say (我不知道或不会说)
2 = I do NOT trust (我不相信)
3 = I trust marginally (我略微相信)
4 = I trust fully (我完全信任)
5 = I trust ultimately (我最终相信)
m = back to the main menu (返回主菜单)
Your decision? 5
gpg> save
上面两种方式我这边试过后还是不行,一样提示错误。
2.3.通过gpg命令方式导入导出
我这边执行--list-secret-keys命令发现B电脑里面没有输出,而A电脑有输出
gpg --list-keys
gpg --list-secret-keys
最终在网上找到了通过命令的方式导出导出的方式解决了
A电脑导出
gpg --export 236D3BEFxxxx > public.key
gpg --export-secret-key 236D3BEFxxxx > private.key
B电脑导入
gpg --import public.key
gpg --import private.key