我的密钥最近过期了,我创建了一个新的。
pass
由于我的旧密钥已过期,因此将不再创建新密码。
我可以解密现有密码。解密时,它使用旧 ID 3D1B47D3
,正如我所见gpg: Note: secret key 3D1B47D3 expired at Sun 02 Jul 2017 16:36:45 BST
。
3D1B47D3
是我的旧密钥 ID,1F7CCC88
是我的新密钥 ID。
因此我需要使用我的新密钥重新加密~/.password-store
。文档说使用 pass init 1F7CCC88
应该可以做到这一点。
但是我收到了错误:
gpg: [stdin]: encryption failed: Unusable public key
gpg: Note: secret key 3D1B47D3 expired at Sun 02 Jul 2017 16:36:45 BST`.
每次输入密码都会重复出现此错误。
~/.password-store/.gpg-id
包含我运行以来的新密钥ID init
。
gpg --encrypt filename
我可以使用我的新密钥手动加密文件。
请注意,我的密钥和子密钥在未来都会有一个到期日期。
pub 4096R/1F7CCC88 2016-07-02 [expires: 2018-07-28]
uid Kris Leech <[email protected]>
sub 4096R/3D1B47D3 2016-07-02 [expires: 2018-07-28]
sub 2048R/E77481E9 2016-07-28 [expires: 2018-07-28]
答案1
看起来 pass 正在使用 gpg2,您使用 gpg 创建了密钥,但 gpg2 中存在一些不受支持的内容(md5 已弃用?)。
例如使用 gpg 解密有效:
$ gpg -d --quiet secret.gpg
You need a passphrase to unlock the secret key for
user: "bot three (third bot) <[email protected]>"
2048-bit RSA key, ID 2A8EA0F6, created 2017-08-24 (main key ID 2003591B)
something much longer then blah
而 gpg2 则不会:
$ gpg2 -d --quiet secret.gpg
gpg: decryption failed: No secret key
重命名 gpg2 强制使用 gpg:
# mv /usr/bin/gpg2 /usr/bin/gpg2-css
$ pass show test/secret
something much longer then blah
您可以做的是:
- 重命名 gpg2。
- 创建一个 gpg2 密钥。
- 使用新的 gpg2 生成的密钥重新初始化密码存储以重新加密。
- 将 gpg2 重命名回 gpg2。
此时应该可以再次工作。从这里开始,使用 gpg2,而不是 gpg。
嗯。
答案2
除了我接受的答案之外,我还想发布另一个选项。您只需将现有密钥导入 gpg2 即可。
gpg --list-keys
gpg --export [ID] > public.key
gpg --export-secret-key [ID] > private.key
gpg2 --import public.key
gpg2 --import private.key
rm public.key private.key
答案3
我迟到了,但我找到了解决方案。
我必须说,这些解决方案对我都不起作用,而且我里面有多个文件夹,~/.password-store
里面有几十个键,这意味着我无法避免文件夹问题。
对我有用的是:
$ cp -r ~/.password-store ~/.password-store.backup
$ cd ~/.password-store
$ pass init <new-gpg-key-hash>
Password store initialized for <new-gpg-key-hash>
folder1/pass1: reencrypting to <new-gpg-key-hash>
gpg: Note: secret key <old-gpg-key-hash> expired at Tue XX Jul 2021 XX:YY:ZZ AM EDT
folder2/pass1: reencrypting to <new-gpg-key-hash>
gpg: Note: secret key <old-gpg-key-hash> expired at Tue XX Jul 2021 XX:YY:ZZ AM EDT
...
您可以通过复制通行证并生成新通行证来验证它是否有效(导致无法验证其他公钥的真实性,结果证明这是一种奇怪的副作用):
pass -c folder1/pass1
pass generate test/test
这确实有效。如果出现问题,您可以简单地:
mv ~/.password-store.backup ~/.password-store
希望它能帮助别人!干杯
答案4
pass init *gpg-id*
在现有的密码存储目录中将重新加密整个存储以gpg-id。
每pass
人字形:
如果指定的 gpg-id 与任何现有文件中使用的密钥不同,则这些文件将被重新加密以使用新的 id。