Вопрос или проблема
Gpg перестал работать на моем Ubuntu 22.4.5 LTS, вероятно, после обновления. Он может перечислить мои ключи, которые использовались для подписи git commit с момента последнего обновления.
$ gpg --list-secret-keys --keyid-format=long
/home/g4b0/.gnupg/pubring.kbx
-----------------------------
sec rsa3072/WWWWWWWWWWWWWWWW 2024-06-03 [SC] [expires: 2026-06-03]
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid [ultimate] Foo Bar <[email protected]>
ssb rsa3072/AAAAAAAAAAAAAAAA 2024-06-03 [E] [expires: 2026-06-03]
sec rsa3072/ZZZZZZZZZZZZZZZZ 2024-06-04 [SC] [expires: 2026-06-04]
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
uid [ultimate] Bar Foo <[email protected]>
ssb rsa3072/BBBBBBBBBBBBBBBB 2024-06-04 [E] [expires: 2026-06-04]
Попытка использования приводит к ошибке Bad CA certificate
echo "test" | gpg -vv --clearsign
gpg: using pgp trust model
gpg: key WWWWWWWWWWWWWWWW: accepted as trusted key
gpg: key ZZZZZZZZZZZZZZZZ: accepted as trusted key
gpg: writing to stdout
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
test
gpg: pinentry launched (3 )
gpg: signing failed: Bad CA certificate
gpg: [stdin]: clear-sign failed: Bad CA certificate
Версия Ubuntu:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.5 LTS
Release: 22.04
Codename: jammy
Все обновлено. Как это исправить?
Это из-за ошибки или неправильной конфигурации в компоненте pinentry
, попробуйте использовать другую программу pinentry
, например pinentry-curses
Сначала установите ее: sudo apt install pinentry-curses
Затем создайте ~/.gnupg/gpg-agent.conf
или добавьте в конец файла
pinentry-program /usr/bin/pinentry-curses
Затем перезапустите
gpgconf --kill gpg-agent
Теперь это должно работать, попробуйте с echo "test" | gpg --clearsign
если это не сработает, вы можете попробовать включить режим pinentry
с обратной связью
в ~/.gnupg/gpg-agent.conf
добавьте строку allow-loopback-pinentry
, затем перезапустите и попробуйте снова с помощью
echo "test" | gpg --clearsign --pinentry-mode=loopback
После подсказки Saxtheowl я решил проблему, это была ошибка в JetBrains PhpStorm IDE, которая перезаписала ~/.gnupg/gpg-agent.conf
Я решил это следующим образом:
rm .gnupg/gpg-agent.conf
gpgconf --reload gpg-agent
Ссылка на ошибку: https://youtrack.jetbrains.com/issues?q=%7Bgpg%7D&preview=IJPL-173525
Ответ или решение
Теория
Ошибка "Bad CA certificate" при использовании GnuPG на Ubuntu 22.04.5 LTS связана с проблемами в цепочке доверия или конфигурации программного обеспечения, которое отвечает за ввод пароля, известного как pinentry
. GnuPG (GNU Privacy Guard) — это инструмент для безопасного шифрования и подписи данных и электронных сообщений. Он предоставляет средства для работы с криптографическими ключами и их управлением.
В вашей ситуации проблема возникает после обновления системы, что указывает на возможность изменения или повреждения конфигурации pinentry
. Это компонент, от которого зависит GnuPG для ввода пользовательского PIN-кода или пароля, и ошибки в его конфигурации могут препятствовать успешному выполнению операций подписи.
Пример
Вы воспроизводите проблему при попытке ясно подписать сообщение:
echo "test" | gpg -vv --clearsign
Вы получаете сообщение об ошибке:
gpg: signing failed: Bad CA certificate
gpg: [stdin]: clear-sign failed: Bad CA certificate
Этот сигнализирует о проблеме с интерфейсом, который обрабатывает запросы для ввода пароля, необходимого для подписания.
Применение
Чтобы устранить ошибку, нужно пройти несколько шагов, направленных на исправление возможной проблемы с компонентом pinentry
:
-
Установите альтернативное приложение
pinentry
:В вашем случае можно установить
pinentry-curses
, который является текстовым интерфейсом для ввода пароля и может обойти GUI-проблемы:sudo apt install pinentry-curses
-
Настройте использование
pinentry-curses
:Создайте или отредактируйте файл конфигурации
gpg-agent
:echo "pinentry-program /usr/bin/pinentry-curses" >> ~/.gnupg/gpg-agent.conf
-
Перезапустите
gpg-agent
:Перезапустите агент GnuPG, чтобы применить изменения:
gpgconf --kill gpg-agent
После этого повторите попытку подписать сообщение:
echo "test" | gpg --clearsign
-
Используйте режим
loopback
:Если смена
pinentry
не помогает, попробуйте включить режимloopback
, который позволяет вручную управлять вводом пароля:-
Добавьте следующую строку в
gpg-agent.conf
:echo "allow-loopback-pinentry" >> ~/.gnupg/gpg-agent.conf
-
Перезагрузите агент:
gpgconf --kill gpg-agent
-
Выполните команду подписания с использованием режима
loopback
:echo "test" | gpg --clearsign --pinentry-mode=loopback
-
-
Устранение специфических проблем:
Вы упомянули, что ошибка была вызвана багом в IDE JetBrains PhpStorm. Обходным решением оказалось удаление файла конфигурации
gpg-agent
и перезагрузка агента:rm ~/.gnupg/gpg-agent.conf gpgconf --reload gpg-agent
Ссылка на баг: JetBrains PhpStorm Issue Tracker.
Эти меры помогут разобраться и устранить проблему, возникающую во время работы с GnuPG, особенно в случае возникновений после обновлений системы или взаимодействия с другими программами, такими как IDE. Следите за обновлениями системы и исправлениями багов, чтобы минимизировать возникновение подобных проблем в будущем.