如何强制 gpg2 使用过期的密钥?

Vi.*_*Vi. 18 cryptography expired-key gnupg

$ gpg -ear XXXXXXX
gpg: XXXXXXXX: skipped: unusable public key

$ gpg --debug-ignore-expiration -ear XXXXXXXX
gpg: Invalid option "--debug-ignore-expiration"
Run Code Online (Sandbox Code Playgroud)

如何加密?密钥服务器没有可用的密钥更新。如果用户仍然拥有过期的密钥或根本没有看到消息,则应该看到消息。

是否有一些--just-do-that-I-want选项可以在不更改 GPG 源代码的情况下执行此操作?

Vi.*_*Vi. 14

正如@rob 在评论中建议的那样,libfaketime处理得很好:

$ gpg  -v -v -v --batch --trust-model always -ear D5B9D38C <<< "qweqe"
gpg: using character set 'utf-8'
gpg: Note: signature key 077EA269D5B9D38C expired Sun 09 Nov 2014 12:57:25 PM +03
gpg: D5B9D38C: skipped: Unusable public key
gpg: [stdin]: encryption failed: Unusable public key

$ faketime  '2012-12-24 08:15:42'  gpg  -v -v -v --batch --trust-model always -ear D5B9D38C <<< "qweqe"
gpg: using character set 'utf-8'
gpg: using subkey 85231B396B9569ED instead of primary key 077EA269D5B9D38C
gpg: No trust check due to '--trust-model always' option
gpg: reading from '[stdin]'
gpg: writing to stdout
gpg: RSA/AES256 encrypted for: "..."
-----BEGIN PGP MESSAGE-----
...
Run Code Online (Sandbox Code Playgroud)

旧答案:

  1. 启动 UML(用户模式 ​​linux)
  2. 将 UML 中的日期设置为可接受的范围。
  3. 在 UML 中加密消息

  • 真的没有 --force 选项,所以只有日期黑客才能做到吗?米( (3认同)

小智 8

使用--faked-system-time选项:

gpg2 --faked-system-time 20100101T000000 -e -r keyid
Run Code Online (Sandbox Code Playgroud)

我更喜欢一个选项,它可以强制加密过期的密钥,同时记录正确的时间(尤其是在签名时)。