uz
KA
июня 23, 2025
Обновлено июня 23, 2025

Траблшутинг GPG error

Linux Windows

При взаимодействии с программным обеспечением, будь то в Linux или в Windows среде, для подтверждения подлинности программного пакета используется цифровая подпись. Она представляет собой хешированное сообщение полезной нагрузки, которое дополнительно во втором этапе подготовки шифруется закрытым ключом. Тем самым закрытый ключ обеспечивает подлинность, а хеш целостность передаваемого сообщения. Но бывает такое, что в работе любого ПО возникают ошибки, рассмотрим возможные на примере GPG крипто-пакета.

Как починить ошибку GPG error “NO_PUBKEY”?

Достаточно частая проблема, при обновлении репозитория, когда после команды пакетного менеджера с функцией update выпадает подобная проблема:

Ошибка репозитория
Скриншот №1 — Ошибка репозитория

В нашем случае, ошибка гласит, что для репозитория mongodb-org не был найден соответствующий ему публичный ключ 160D26BB1785BA38, который используется для проверки цифровой подписи поставленной на пакетах этого репозитория. По умолчанию, Linux дистрибутивы не дают установить пакеты без соответствующего ключа.

При создании облачного сервера от Serverspace, у каждого из стандартных репозиториев задан ключ. Для выполнения тестов, вы можете использовать изолированную среду VPS сервера, на любой из двух платформ vStack cloud или же VMware cloud. Нажмем на кнопку Создать сервер и выберем конфигурацию, подходящую под наши задачи, затем нажмем кнопку Создать.

Создание сервера
Скриншот №2 — Создание сервера

Потребуется некоторое время для развертывания серверных мощностей. После чего вы можете подключиться любым из удобных способов. Вернемся к открытому терминалу и найдем решение ошибке.

Так как Linux дистрибутивы не дают возможности установить пакеты без публичного ключа, соответственно необходимо его добавить. Существует два пути: найти файл с публичным ключом на сайте компании или воспользоваться сервером ключей. Для первого способа найдем ключ на сайте компании.

Решение проблемы
Скриншот №3 — Решение проблемы

Предложено скачать ключ через HTTPS, что может быть безопасным решением, так как удостоверяющий центр подтверждает подлинность сайта за счет сертификата и TLS предоставляет конфиденциальный канал для передачи сообщения.

Данный этап считается самым уязвимым, при передаче публичного ключа, так как его подмена может позволить нарушителю подписывать своим ключом нелегитимные пакеты.

Если мы доверяем УЦ, соответственно данный способ удобен. Выполним команду по установке необходимого ПО:

apt install gnupg curl

А затем скачаем необходимый пакет конвертировав asc в gpg формат и сохранив его в папку /usr/share/keyrings/mongo.gpg. Для  этого выполним команду:

curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc \
| sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor

Или же данное действие можем выполнить, при помощи сервера ключей, зная идентификатор публичного ключа. В ошибке отображена последовательность 160D26BB1785BA38, которая и является идентификатором ключа. Обратимся к серверу командой:

sudo gpg --homedir /tmp --no-default-keyring --keyring /usr/share/keyrings/mongo.gpg --keyserver keyserver.ubuntu.com --recv-keys 160D26BB1785BA38
Второе решение
Скриншот №4 — Второе решение

В данном случае, мы запрашиваем ключи с официального сервера, который поставил на них свою подпись и подтвердил целостность ключей. Параметры в команде:

  • –no-default-keyring –keyring позволяют определить новую связку ключей, которая будет отдельна от основной;
  • –keyserver позволяет указать сервер, который будет использован для запроса ключа. Можете указать любой, которому доверяете;
  • –recv-keys указывает на идентификатор запрашиваемого ключа.

Теперь необходимо прописать путь к ключу в списке репозиториев, для связи с друг другом. Для этого перейдем к файлу:

echo "deb [ signed-by=/usr/share/keyrings/mongo.gpg ] http://repo.mongodb.org/apt/debian bookworm/mongodb-org/7.0 main"  > /etc/apt/sources.list.d/mongodb-server-7.0
Запись в репозиторий
Скриншот №5 — Запись в репозиторий

После чего необходимо обновить список репозиториев командой:

apt update
Результат
Скриншот №6 — Результат

Как видно на скриншоте произошел Hit для репозитория, соответственно теперь он доступен для скачивания пакетов. Однако, после добавления ключа может остаться предупреждение о опасности использования такого ключа.

GPG: There is no indication that the signature belongs to the owner.

Дело в том, что GPG использует политику похожую на удостоверяющие центры. Для того, чтобы ключ считался доверенным, его необходимо скачать с сервера ключей. Или тот же самый ключ должен быть подписан доверенным, что значит находится в базе trusted.gpg с уровнем доверия 4-5. Так что, при подписи подобные уведомления абсолютно нормальны, но необходимо повторно проверять владельцев, хеш-суммы. Они позволят убедиться в целостности переданных данных с серверов.

Вторая ошибка
Скриншот №7 — Вторая ошибка

Если вы уверены, в том что ключи легитимны необходимо прописать команду:

gpg --edit-key 160D26BB1785BA38

Где вместо 160D26BB1785BA38, будет указан ваш идентификатор ключа, после чего откроется меню взаимодействия с ключом. Необходимо прописать пункт trust и выбрать уровень доверия:

Доверие к ключу
Скриншот №8 — Доверие к ключу

После чего, при использовании ключа пакеты будут отображаться, как доверенные:

Результат изменения ключа
Скриншот №9 — Результат изменения ключа

Траблшутинг GPG ошибок – важный аспект обеспечения безопасности и стабильности операционных систем, особенно в мире Linux. Понимание причин и способов решения проблем с GPG помогает обеспечить целостность и аутентичность установленных программ и обновлений. Путем проверки ключей, обновления репозиториев и настройки конфигурационных файлов можно эффективно решать возникающие проблемы. Помните, что внимательный траблшутинг и следование рекомендациям сообщества специалистов помогут вам сохранить работоспособность вашей системы и обеспечить ее безопасность.

Оценка:
5 из 5
Аverage rating : 5
Оценок: 1
100029 Ташкент Улица Якка Чинар, дом 2/1
ООО «ИТГЛОБАЛКОМ ЛАБС»

Вам также может быть интересно...