无法延长 GPG key 的有效期限?

按照 GNU ELPA - gnu-elpa-keyring-update 提供的方法延长旧 key 的有效期限失败,提示 “xxx 不是一个 fingerprint”:


$ gpg --homedir ~/.emacs.d/28.1/elpa/gnupg \
      --quick-set-expire 474F05837FBDEF9B 1y
gpg: "474F05837FBDEF9B" is not a fingerprint

下边列出来的不是有 474F05837FBDEF9B 吗?



$ gpg --homedir ~/.emacs.d/28.1/elpa/gnupg --fingerprint
/Users/~/.emacs.d/28.1/elpa/gnupg/pubring.kbx
-----------------------------------------------
pub   dsa2048 2014-09-24 [SC] [expired: 2019-09-23]
      CA44 2C00 F917 74F1 7F59  D9B0 474F 0583 7FBD EF9B
uid           [ expired] GNU ELPA Signing Agent (2014) 
uid           [ expired] GNU ELPA Signing Agent 

pub   rsa3072 2019-04-23 [SC] [expires: 2024-04-21]
      C433 5547 66D3 DDC6 4221  BFAA 066D AFCB 81E4 2C40
uid           [ unknown] GNU ELPA Signing Agent (2019) 

环境:

  • macOS 10.13.6
  • gpg (GnuPG) 2.2.33

因为新版本的 GPG2 认为这种 “short key id” 不安全,不再作为一些“高危操作”的参数支持了,你得用完整的 finger print 来匹配。

1 个赞
$ gpg --homedir ~/.emacs.d/28.1/elpa/gnupg \
      --quick-set-expire CA442C00F91774F17F59D9B0474F05837FBDEF9B 1y
gpg: signing failed: No secret key
gpg: make_keysig_packet failed: No secret key

$ gpg --homedir ~/.emacs.d/28.1/elpa/gnupg --list-secret-keys | wc -l
0

secret key 去哪儿找啊?这是不是无解了?

你需要把自己的 gpg key import 到 elpa 这个 keyring 里面。没有的话网上随便整个教程创建一个。

讲真只是 elpa 被卡住,没必要改这个 gpg key,在 emacs 里面把验证签名关了还容易点。

竟然随便创建一个key就可以,这样不会有风险?我还以为要当初签名的那个。

我的确关了签名验证。关了又觉得即然有这么个东西,弃之可惜😅

用户签名了代表签名的用户愿意担保有效性,给自己用就是信任自己的签名,表示自己愿意承担风险,签完发别人就是看别人有多相信你的签名。

正常设置下,签名需要输入设置的password的,极端情况可以在另一台电脑上用私钥签完,使用的电脑上只有用户自己的公钥。

GPG “真正”的用法是通过线下活动扩大信任链,不然其实最多只能用来验证是不是同一个钥匙签的名。

我粗略看了一下 gpg 签名验证过程。好像在报告 expired 之前,就已经完成了文件的校验(不知道这个观察对不对):


$ ./g10/gpg --homedir ~/.emacs.d/28.1/elpa/gnupg ~/Downloads/queue-0.2.el.sig
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
gpg: assuming signed data in '/Users/*/Downloads/queue-0.2.el'
gpg: [DEBUG][check_sig_and_print] enter
gpg: Signature made Thu Aug 17 05:10:01 2017 CST
gpg:                using DSA key CA442C00F91774F17F59D9B0474F05837FBDEF9B
gpg: [DEBUG][do_check_sig] enter
gpg: [DEBUG][check_signature2] enter
gpg: [DEBUG][check_signature_end] enter
gpg: [DEBUG][check_signature_end_simple] enter
gpg: [DEBUG][pk_verify] enter
gpg: [DEBUG][pk_verify] return: 0
gpg: [DEBUG][get_validity] enter
gpg: [DEBUG][get_validity] keyid_cmp(\x05OG\x7f\x05OG\x7fD, \x05OG\x7f\x05OG\x7fD,);
gpg: Good signature from "GNU ELPA Signing Agent (2014) " [expired]
gpg:                 aka "GNU ELPA Signing Agent "
gpg: [DEBUG][get_validity] enter
gpg: [DEBUG][get_validity] keyid_cmp(\x05OG\x7f\x05OG\x7fD, \x05OG\x7f\x05OG\x7fD,); [expired]
gpg: [DEBUG][check_signatures_trust] enter
gpg: [DEBUG][get_validity] enter
gpg: Note: This key has expired!
Primary key fingerprint: CA44 2C00 F917 74F1 7F59  D9B0 474F 0583 7FBD EF9B

既然文件签名校验过了,过不过期也就无所谓了吧,毕竟 Emacs 原本也允许一些例外的状况:

延长 key 的有效期聊以自慰?

是的,GPG key 过期是不影响验证和解密的(毕竟比如有以前的老文件不可能不给解密)