我有一个正在签署的许可证:
gpg --default-sig-expire "2024-02-14" --sign licence
这导致:
$ gpg --verify licence.gpg
gpg: Signature made Tue 13 Feb 2024 08:18:39 AM CET
gpg: using RSA key 1234567890ABCDEF1234567890ABCDEF
gpg: issuer "[email protected]"
gpg: Good signature from "Stewart <[email protected]>" [ultimate]
gpg: Signature expires Wed 14 Feb 2024 12:00:00 PM CET
这12:00:00 PM CET
是我的问题。我通常那个时候去吃午饭。我不想在午餐时接到有关系统离线的电话。可以指定时间吗?我宁愿它过期于13:00:00 PM CET
。
--ask-sig-expire
仅提示您输入天数/周数/年数:
$ gpg --ask-sig-expire --sign licence
Please specify how long the signature should be valid.
0 = signature does not expire
<n> = signature expires in n days
<n>w = signature expires in n weeks
<n>m = signature expires in n months
<n>y = signature expires in n years
Signature is valid for? (0)
ISO 8601 似乎不受支持:
$ gpg --default-sig-expore "2024-02-14T13:00:00+02:00" --sign licence
gpg: '2024-02-14T13:00:00+02:00' is not a valid signature expiration
该man systemd.time
规范似乎不受支持
$ gpg --default-sig-expire "2024-02-14 13:00:00" --sign licence
gpg: '2024-02-14 13:00:00' is not a valid signature expiration
手册页也没有表明可能的时间:
--default-sig-expire
The default expiration time to use for signature expiration. Valid values
are "0" for no expiration, a number followed by the letter d (for days),
w (for weeks), m (for months), or y (for years) (for example "2m" for two
months, or "5y" for five years), or an absolute date in the form
YYYY-MM-DD. Defaults to "0".
我找到的唯一解决方案是将系统的时区更改为我以西的下一个时区,然后签名,然后将系统的时区设置回原来的时间。
$ sudo mv /etc/localtime{,.backup}
$ sudo ln -s /usr/share/zoneinfo/Europe/London /etc/localtime
$ gpg --default-sig-expire "2024-02-14" --sign licence
$ sudo mv /etc/localtime{.backup,}
$ gpg --verify licence.gpg
gpg: Signature made Tue 13 Feb 2024 08:18:39 AM CET
gpg: using RSA key 1234567890ABCDEF1234567890ABCDEF
gpg: issuer "[email protected]"
gpg: Good signature from "Stewart <[email protected]>" [ultimate]
gpg: Signature expires Wed 14 Feb 2024 01:00:05 PM CET
答案1
--default-sig-expire
时间规范接受的唯一格式是YYYYMMddTHHmmss[Z]
:
gpg --default-sig-expire 20240214T130000 --sign license
任何时区说明符都会被忽略,夏令时也会被忽略;因此目前在欧洲,这会产生比指定时间晚一小时的到期时间。处理时间也会影响签名的最终有效期;例如,如果gpg
提示任何内容(例如以确认覆盖现有签名文件),所产生的延迟会推迟到期时间。
要检查这一点,请查找定义--default-sig-expire
,然后确定使用解析选项的值parse_expire_string
,它知道多种格式。唯一接受绝对时间戳(包括小时、分钟和秒)的是isotime2epoch
(及其 64 位time_t
变体),并带有注释指定
唯一支持的格式是“yyyymmddThhmmss[Z]”,由空格、nul、冒号或逗号分隔。