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

如何强制 gpg2 使用过期密钥?
$ gpg -ear XXXXXXX
gpg: XXXXXXXX: skipped: unusable public key

$ gpg --debug-ignore-expiration -ear XXXXXXXX
gpg: Invalid option "--debug-ignore-expiration"

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

是否有一些--just-do-that-I-want选项可以允许执行此操作而无需更改 GPG 的源代码?

答案1

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

gpg2 --faked-system-time 20100101T000000 -e -r keyid

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

答案2

正如@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-----
...

旧答案:

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

答案3

重置硬件和系统时钟:

sudo hwclock --set --date "12/31/2017 23:59:59" && \
sudo hwclock --hctosys && \
gpg --sign-with $keyid --clearsign --armor < $file

之后(我希望您已启用 NTP)使用以下命令修复硬件时钟:

sudo hwclock --systohc

相关内容