добавить ключ
При добавлении стороннего репозитория, в целях безопасности в ОС Debian и Ubuntu, принято добавлять ключ репозитория.
Очень часто на сайтах и
блогах выкладывают ссылки на репозитории, но ссылка на ключ не приводится.
Из-за чего возникают некрасивые надписи и различные ошибки в конце процесса обновления пакетов.
Если после обновления у Вас на экране возникает ошибка примерно следующего содержания:
Ошибка: http://wine.budgetdedicated.com jaunty Release: Следующие подписи не могут быть проверены, так как недоступен открытый ключ: NO_PUBKEY 58403026387EE263
Вы можете запустить 'apt-get update' для исправления этих ошибок
В данном примере не найден открытый ключ репозитория Wine. Адрес репозитория http://wine.budgetdedicated.com, публичный ключ 58403026387EE263. В вашем случае адрес и код ключа могут отличаться.
Для решения сложившейся проблемы нам потребуется:
1. Проверить упоминание ключа на официальных серверах. Это требуется для подтверждения подлинности репозитория.
Серверы расположены в порядке значимости, поэтому нахождение ключа хотя бы на одном сервере является положительным результатом.
# gpg --keyserver keyserver.ubuntu.com --recv 58403026387EE263
# gpg --keyserver pgp.mit.edu --recv 58403026387EE263
# gpg --keyserver keyserver.pgp.com --recv 58403026387EE263
В ответ на экране должно отобразиться следующее:
gpg: запрашиваю ключ 387EE263 с hkp сервера keyserver.ubuntu.com
gpg: ключ 387EE263: "Scott Ritchie " не изменен
gpg: Всего обработано: 1
gpg: неизмененных: 1
Эти строки говорят , что ключ найден и подлинность репозитория подтверждена. В общем случае, информация выведенная на экран в дальнейшем не пригодится.
Об особых случаях будет рассказано ниже.
2. Следующим этапом добавляем недостающий ключ репозитория:
# gpg --export --armor 58403026387EE263 | sudo apt-key add -
В особых случаях добавить ключ репозитория в операционную систему будет эффективнее командой:
# sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 387EE263
где используется имя key-сервера нашедшего ключ и число отмеченное в пункте №1.
В результате всех вышеизложенных действий проблема поиска недостающего ключа репозитория исчезнет навсегда.
вот ещё вариант того же самого:
gpg --keyserver subkeys.pgp.net --recv-keys 07DC563D1F41B907
gpg --export 07DC563D1F41B907 | apt-key add -
или
gpg --keyserver subkeys.pgp.net --recv-keys 07DC563D1F41B907 && gpg --export 07DC563D1F41B907 | apt-key add -
в случае если есть ссылка на ключ:
wget -O - http://deb.opera.com/archive.key | apt-key add -
(trinity kde3 )
apt-key adv --keyserver keyserver.quickbuild.pearsoncomputing.net --recv-keys 2B8638D0
(python 2.4 и 2.5)
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5BB92C09DB82666C
добавить недостающие ключи
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com `sudo aptitude update 2>&1 | grep -o '[0-9A-Z]\{16\}$' | xargs`
раблта с ключами
Содержание папки ~/.gnupg
openpgp-revocs.d/
Хранит ревокационные сертификаты — файлы, которые позволяют отозвать ключ, если ты потеряешь доступ к закрытому ключу.
Здесь GPG хранит отзывные (revocation) сертификаты — они нужны, чтобы отозвать ключ, если ты потерял доступ к закрытому ключу или считаешь его скомпрометированным.
Почему только один файл?
Ревокация всегда делается только для основного ключа (primary key). Подключи автоматически считаются отозванными, если отозван основной.
Файл имеет имя вроде:
1A95AEC441F587EFCF0E01C2470F283D2ED5D036.rev
Обрати внимание, что в конце хеша файла rev тот же ID, что и у основного ключа 470F283D2ED5D036.
private-keys-v1.d/
Здесь хранятся закрытые ключи в зашифрованном виде, каждый в виде отдельного файла.
Каждый файл представляет собой один криптографический ключ (ключевой материал), например:
Основной (primary) ключ (обычно используется для подписи и сертификации)
Подключи (subkeys), например для шифрования или подписи
Можно узнать, кто есть кто:
gpg --list-secret-keys --keyid-format LONG
Пример вывода:
sec — основной секретный ключ ([SC] — может Sign и Certify)
ssb — подчинённый ключ ([E] — может Encrypt)
Идентификаторы 470F283D2ED5D036 и 842EF49E соответствуют хэшам имён файлов в private-keys-v1.d.
Тип ключа Хранится в private-keys-v1.d/ Ревокационный сертификат
Основной ✅ (по Keygrip) ✅ (по fingerprint)
Подключ ✅ (по Keygrip) ❌ (отзывается через основной ключ)
pubring.kbx и pubring.kbx~
Это ключевые кольца, содержащие открытые ключи (твой и других, которых ты импортировал). Файл с ~ — резервная копия.
trustdb.gpg
База данных уровня доверия ключам (насколько ты доверяешь владельцам других ключей).
добавить ключ
sudo apt-key add repo.asc
В Ubuntu 20.04+ команда apt-key устарела и не рекомендуется к использованию
sudo mkdir -p /etc/apt/keyrings
curl -fsSL http://адрес_репы/название_репы/repo.gpg | sudo tee /etc/apt/keyrings/repo.gpg > /dev/null
/etc/apt/sources.list.d/build-system.list:
deb [signed-by=/etc/apt/keyrings/repo.gpg] http://адрес_репы/название_репы/repo название_репы main
проверить ключ в repo.gpg:
gpg --show-keys /etc/apt/keyrings/repo.gpg
удалить ключ
находим ключ
sudo apt-key list | grep -A 1 "My Repo"
удаляем пробелы из fingerprint:
ABCD1234567890EF1234567890EFABCD12345678
берём последние 8 символов:
12345678
удаляем ключ:
sudo apt-key del 12345678
конвертировать ключ
gpg --dearmor < repo.asc > repo.gpg
конвертировать обратно
gpg --no-default-keyring --keyring ./temp-keyring.gpg --import repo.gpg
gpg --no-default-keyring --keyring ./temp-keyring.gpg --armor --export > repo.asc
Проверить наличие ключей:
gpg --list-keys --keyid-format short
gpg --list-secret-keys --keyid-format=long
gpg --list-secret-keys --with-keygrip
Если нужен именно полный идентификатор (полный fingerprint) для точного экспорта и доверия
gpg --list-keys --with-fingerprint
Пример:
Здесь:
ABCD1234567890EF1234567890EFABCD12345678 — отпечаток (используется для точной идентификации).
Для экспорта лучше использовать его:
gpg --armor --export ABCD1234567890EF1234567890EFABCD12345678 > repo.asc
Создайть новый ключ:
gpg --full-generate-key
Импортировать ключ
gpg --import <файл с ключом>
gpg --batch --import /папка/ключ.gpg
gpg --batch --allow-secret-key-import --import /папка/ключ.gpg
Указать ключ для использования:
git config --global user.signingkey <keyid>
Подписать репу ключём
gpg --batch --yes --pinentry-mode loopback --passphrase пароль -abs --cipher-algo AES --digest-algo SHA512 -o Release.gpg Release
gpg --batch --yes --pinentry-mode loopback --passphrase пароль -abs --cipher-algo AES --digest-algo SHA512 -o Packages.gpg Packages
Создать ключ репы
gpg --export идентификатор > repo.gpg # например почта, полный fingerprint или последние 8 символов
gpg --armor --export идентификатор > repo.asc
Создать резервную копию ключей
Сохраним публичный и секретный ключи в ASCII-файлы.
gpg --armor --export your_email@example.com > public_key_backup.asc
# Закрытый (секретный) ключ
gpg --armor --export-secret-keys your_email@example.com > private_key_backup.asc
Важно: файл private_key_backup.asc должен храниться в зашифрованном архиве или на офлайн-носителе.
получить из закрытого открытый ключ
есть файл ключа
-----BEGIN PGP PRIVATE KEY BLOCK-----
...
-----END PGP PRIVATE KEY BLOCK-----
импортировать закрытый ключ
gpg --import private.key
Если ключ защищён паролем, GPG запросит его. После импорта закрытого ключа GPG автоматически добавит соответствующий открытый ключ в ваше ключевой кольцо.
gpg --list-secret-keys
Вывод будет примерно таким:
Здесь 1234ABCD5678EFGH — это идентификатор ключа. Используйте его для экспорта открытого ключа в файл, например, public.key:
экспортировать публичный ключ
gpg --armor --export 1234ABCD5678EFGH > public.key
Флаг --armor обеспечивает экспорт ключа в текстовом формате (ASCII), который выглядит так:
-----BEGIN PGP PUBLIC KEY BLOCK-----
...
-----END PGP PUBLIC KEY BLOCK-----
Файл repo.asc обычно используется для хранения открытого ключа, который клиенты могут импортировать для проверки подписей репозитория. Просто переименуйте или скопируйте экспортированный открытый ключ в repo.asc:
cp public.key repo.asc
Опубликовать публичный ключ на ключевом сервере
Выбор сервера (рекомендуемые):
keyserver.ubuntu.com
keys.openpgp.org (лучше для email-верификации, но не показывает uid сразу)
Пример отправки:
# Ubuntu keyserver
gpg --send-keys --keyserver keyserver.ubuntu.com 470F283D2ED5D036
Проверь, что ключ опубликован:
gpg --keyserver keyserver.ubuntu.com --search-keys your_email@example.com
Отозвать ключ
Ревокационный сертификат есть (в openpgp-revocs.d), но можно сгенерировать новый в файл, чтобы использовать при необходимости:
gpg --output revoke_cert.asc --gen-revoke 470F283D2ED5D036
Чтобы реально отозвать ключ, просто импортируй этот файл:
gpg --import revoke_cert.asc
А затем при желании — заново отправь его на ключевой сервер:
gpg --keyserver keyserver.ubuntu.com --send-keys 470F283D2ED5D036
http://uzverss.livejournal.com/30439.html - Добавление ключей, когда другие способы не помогли
http://uzverss.livejournal.com/10514.html - добавление ppa репозитория в debian