Как заставить 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?
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
Использовать --faked-system-time
опция:
gpg2 --faked-system-time 20100101T000000 -e -r keyid
Я бы предпочел опцию, которая заставляла бы шифрование с истекшим ключом, в то же время записывая правильное время (особенно при подписании).
Сброс аппаратных и системных часов:
sudo hwclock --set --date "12/31/2017 23:59:59" && \
sudo hwclock --hctosys && \
gpg --sign-with $keyid --clearsign --armor < $file
После этого (надеюсь, у вас включен NTP) исправьте ваши аппаратные часы с помощью:
sudo hwclock --systohc