一、问题描述
我这边情况是这样的,原本在A电脑上,通过maven打包安装都是好的,最近新弄了台电脑,然后把A电脑的gpg秘钥通过Kleopatra的方式直接导出来
然后在B电脑上通过Kleopatra导入,整了很久,在IDEA中执行maven install操作一直报如下错误:
gpg: no default secret key: No secret keygpg: signing failed: No secret key
二、解决方法
我这边在网上找了很多的解决方法,以及自己遇到的问题,可自行参考操作下,最终通过gpg命令方式导入导出成功解决。
2.1.证书过期
通过如下方式查看:
gpg --list-keys
gpg: checking the trustdbgpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust modelgpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u/Users/xxx/.gnupg/xxx.gpg-----------------------------pub 2048R/236D3BEFxxxx -12-30 [expired: -12-30]uid xxxx <...@>
注意上面的expired: -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.txtB电脑导入gpg --import-ownertrust < otrust.txt
在执行以下命令时
gpg --list-keys
发现A和B电脑UID输出的东西对不上,A电脑上显示的是
uid [ ultimate ] User <xxx@ >
B电脑上却显示的是
uid [ unknown ] User <xxx@ >
解决方法如下:
GNUPG的信任数据库存储在 ~/.gnupg/trustdb.gpg
您可以使用以下--export-ownertrust
选项备份此信任数据库
gpg --export-ownertrust > file.txt
如果导出了密钥,以后又将其导入到新环境中,则信任数据库将不再存在。
gpg --edit-key 236D3BEFxxxxgpg> trustPlease 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? 5gpg> save
上面两种方式我这边试过后还是不行,一样提示错误。
2.3.通过gpg命令方式导入导出
我这边执行--list-secret-keys命令发现B电脑里面没有输出,而A电脑有输出
gpg --list-keysgpg --list-secret-keys
最终在网上找到了通过命令的方式导出导出的方式解决了
A电脑导出gpg --export 236D3BEFxxxx > public.keygpg --export-secret-key 236D3BEFxxxx > private.keyB电脑导入gpg --import public.keygpg --import private.key