$ 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-----
...
旧答案:
- 启动UML(用户模式linux)
- 将 UML 内的日期设置为可接受的范围。
- 在 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