Сообщение об отзыве или недействительности ключа подписи пакета означает одно из двух: либо разработчик дистрибутива или вендора намеренно отозвал старый ключ и выпустил новый, либо система проверки целостности не может подтвердить подлинность пакетов. В обоих случаях правильная реакция одинаковая по логике: сначала выяснить источник проблемы и официальное решение, затем обновить доверенные ключи из проверенного канала и только после этого продолжать установку обновлений. Отключать проверку подписей ради «быстрого решения» нельзя — это открывает путь к подмене программного обеспечения.
Ниже разобрано, как устроена проверка подписей пакетов, почему ключи отзываются, как отличить плановую ротацию ключа от реальной атаки на канал поставки и какие шаги нужно выполнить в типичных ситуациях для Linux-дистрибутивов и сторонних репозиториев.
- Зачем нужен ключ подписи пакета
- Почему ключи вообще отзываются
- Шаг 1. Прочитайте ошибку целиком
- Шаг 2. Найдите официальное объявление
- Шаг 3. Обновите ключи из доверенного канала
- Debian, Ubuntu и производные (apt)
- RHEL, CentOS, Fedora и производные (dnf/yum)
- Другие менеджеры пакетов
- Чего делать нельзя
- Как проверить, что всё сделано правильно
- Особый случай: компрометация ключа
- Типичные ошибки и как их избежать
- Сценарии: что делать в зависимости от ситуации
- Как снизить риск в будущем
- Главное
Зачем нужен ключ подписи пакета
Менеджер пакетов (apt, dnf/yum, zypper, pacman) перед установкой проверяет цифровую подпись каждого пакета или метаданных репозитория. Подпись создаётся закрытым ключом разработчика, а проверка выполняется по открытому ключу, который хранится в локальном хранилище доверия вашей системы. Если подпись совпадает с ожидаемой, система делает два вывода:
- Подлинность. Пакет действительно выпущен владельцем ключа, а не подделан третьей стороной.
- Целостность. Содержимое пакета не изменилось после подписания — ни при передаче, ни на зеркале.
Когда ключ отзывают, цепочка доверия рвётся: система больше не может отличить легитимный пакет, подписанный старым ключом, от пакета, подписанного злоумышленником, который завладел этим ключом. Именно поэтому отзыв — это защитный механизм, а не сбой.
Почему ключи вообще отзываются
Причин несколько, и от причины зависит порядок действий.
- Плановая ротация. Ключи имеют срок действия. Организация заранее выпускает новый ключ, публикует его в официальных источниках и постепенно переводит репозитории на новую подпись. Старый ключ истекает или отзывается.
- Компрометация. Есть основания считать, что закрытый ключ утёк или был украден. Отзыв объявляется экстренно, часто вместе с рекомендацией немедленно обновить пакеты из доверенного источника.
- Смена инфраструктуры. Компания меняет систему сборки, юридическое лицо или домен и переходит на новые ключи.
- Локальная проблема. Ключ на самом деле не отозван: повреждено локальное хранилище, устарели метаданные, сбились часы системы (просроченные сертификаты часто выглядят как «отозванные»), либо вы подключены к неофициальному зеркалу со старыми данными.
Первое, что стоит сделать при появлении ошибки, — определить, к какой из этих категорий относится ваш случай. Для этого нужны два источника: текст самой ошибки и официальные объявления вендора или мейнтейнера репозитория.
Шаг 1. Прочитайте ошибку целиком
Типичные формулировки различаются, но смысл легко распознать:
- «The following signatures were invalid: KEYEXPIRED» — срок действия ключа истёк. Часто это просто забытая ротация у вендора или давно необновляемая система.
- «NO_PUBKEY» — нужного открытого ключа нет в локальном хранилище. Это не отзыв, а отсутствие ключа: репозиторий новый или ключ не импортирован.
- «REVKEYSIG», «key was revoked» — ключ явно помечен как отозванный. Требует осторожности: сначала убедитесь, что отзыв официальный.
- «Signature doesn’t match», «checksum mismatch» — подпись или контрольная сумма не совпали. Возможны повреждение загрузки, устаревшее зеркало или подмена данных.
Зафиксируйте идентификатор ключа (короткий или длинный отпечаток) из сообщения. Он понадобится, чтобы сверить его с официально опубликованным отпечатком — это ключевая проверка безопасности, о которой ниже.
Шаг 2. Найдите официальное объявление
Прежде чем что-либо менять в системе, выясните позицию того, кто подписывает пакеты:
- Проверьте сайт вендора или проекта, новостной раздел, блог и список рассылки (announce-рассылки дистрибутивов). Отзыв ключа — всегда публичное событие, особенно если речь о компрометации.
- Сверьте отпечаток ключа из сообщения об ошибке с отпечатком, опубликованным на официальном сайте. Совпадает — значит, речь о вашем ключе, и дальше действуйте по инструкции вендора.
- Если объявления нет, а ошибка появилась внезапно, проверьте дату и время на вашей машине. Расхождение системных часов на годы — частая причина ложных ошибок валидности подписей.
- Убедитесь, что используете официальное зеркало. Неофициальные зеркала могут отдавать устаревшие метаданные, подписанные уже отозванным ключом.
Если официального подтверждения отзыва нет, а сообщение настойчиво требует «отключить проверку» или скачать ключ по ссылке из непроверенного письма — остановитесь. Социальная инженерия через поддельные уведомления об отзыве ключей — известный сценарий атак на цепочку поставки.
Шаг 3. Обновите ключи из доверенного канала
Общий принцип одинаков для всех систем: новый ключ должен попасть в хранилище доверия из канала, которому вы уже доверяете, а не по ссылке из случайного сообщения. Ниже — типовые действия для распространённых случаев; точные команды уточняйте в документации вашего дистрибутива, так как они зависят от версии.
Debian, Ubuntu и производные (apt)
Ключи базовых репозиториев входят в пакет apt-инфраструктуры дистрибутива и обновляются вместе с системой. Поэтому первый шаг простой:
- Обновите списки пакетов и саму систему пакетов командами обновления индексов и апгрейда. Часто после этого ошибка исчезает, потому что ставится свежий набор ключей.
- Для сторонних репозиториев (PPA, репозитории вендоров ПО) ключ обычно поставляется отдельным пакетом или добавляется вручную. Ищите актуальную инструкцию подключения на официальном сайте вендора: она содержит и адрес репозитория, и способ импорта нового ключа.
- После импорта сверьте отпечаток добавленного ключа с опубликованным на сайте вендора. Команды просмотра ключей хранилища есть в документации apt/gpg.
- Удалите отозванный ключ из хранилища, если инструкция это предусматривает, чтобы он не мешал диагностике в будущем.
RHEL, CentOS, Fedora и производные (dnf/yum)
Здесь ключи привязаны к описанию репозитория через параметр gpgkey и файлы в каталоге ключей системы:
- Обновите систему: ключи дистрибутива приходят с обновлением соответствующих пакетов.
- Для стороннего репозитория переустановите его конфигурационный пакет (обычно называется вида «release» или «repo») — он несёт актуальный ключ и описание репозитория.
- Если ключ импортируется вручную, используйте файл ключа, загруженный с официального сайта по HTTPS, и проверьте его отпечаток до импорта.
Другие менеджеры пакетов
В openSUSE (zypper), Arch Linux (pacman) и других системах логика та же: обновить связку ключей средствами самого дистрибутива (в Arch, например, существует отдельный инструмент для синхронизации и обновления связки ключей), затем переимпортировать ключи сторонних репозиториев из официальных источников. Уточняйте команды в документации конкретной версии — они периодически меняются.
Чего делать нельзя
Ошибки при обработке отзыва ключа опаснее самой ошибки. Вот действия, которых следует избегать:
- Отключать проверку подписей (флаги вроде —no-gpg-checks, —allow-unauthenticated, снятие gpgcheck). Даже временно это превращает установку любого пакета из этого репозитория в лотерею.
- Импортировать ключ по ссылке из письма, чата или форума без сверки отпечатка с официальным сайтом вендора. Подмена ключа — классический способ внедрить вредоносный пакет.
- Игнорировать ошибку и продолжать обновляться в надежде, что «само пройдёт». Часть пакетов перестанет ставиться, часть — поставится со старой подписью, и вы потеряете контроль над состоянием системы.
- Удалять все ключи подряд, пытаясь «почистить хранилище». Можно сломать доверие к базовым репозиториям и получить систему, которая не сможет установить даже исправление безопасности.
Как проверить, что всё сделано правильно
После обновления ключей выполните короткую проверку:
- Обновите индексы/метаданные репозиториев и убедитесь, что предупреждения о подписях исчезли.
- Выполните пробную установку или симуляцию обновления (в большинстве менеджеров есть режим «только показать, что будет сделано») и посмотрите, что проверка подписей проходит без замечаний.
- Просмотрите список доверенных ключей и найдите там новый ключ с корректным отпечатком и сроком действия; старый отозванный ключ должен отсутствовать или быть помечен как отозванный.
- Проверьте, что системные часы синхронизированы — это убережёт от повторных ложных срабатываний.
Особый случай: компрометация ключа
Если вендор объявил, что ключ не просто сменился, а был скомпрометирован, порядок действий строже:
- Прочитайте официальное объявление полностью: там обычно указано, какие версии пакетов затронуты и какие действия рекомендованы.
- Обновите все пакеты, подписанные скомпрометированным ключом, из доверенного репозитория — новые версии будут подписаны новым ключом.
- Импортируйте новый ключ только после сверки отпечатка.
- Если вендор рекомендует дополнительные проверки целостности (сверку контрольных сумм отдельных файлов, повторную верификацию системы), выполните их, прежде чем считать проблему закрытой.
- Для критичной инфраструктуры рассмотрите аудит: какие пакеты были установлены за период возможной компрометации и из каких источников.
Самостоятельно оценивать «насколько вероятно, что мне достался вредоносный пакет» не стоит — следуйте инструкциям вендора, у него больше информации о масштабе инцидента.
Типичные ошибки и как их избежать
| Ошибка | Последствие | Правильное действие |
|---|---|---|
| Отключить проверку подписи, чтобы поставить пакет прямо сейчас | Система принимает любые пакеты из этого источника, включая подменённые | Обновить ключи из официального канала; при невозможности — дождаться исправления вендора |
| Скачать ключ по ссылке из уведомления об ошибке | Возможна подмена ключа и внедрение вредоносного ПО | Взять ключ с официального сайта и сверить отпечаток посимвольно |
| Продолжать пользоваться неофициальным зеркалом | Устаревшие метаданные, повторяющиеся ошибки подписей | Переключиться на официальное зеркало или зеркало, рекомендованное вендором |
| Не заметить расхождение системных часов | Ложные ошибки «ключ просрочен/отозван» | Настроить синхронизацию времени и повторить обновление |
| Удалить ключ, не убедившись, что новый уже работает | Разрыв доверия ко всем пакетам источника | Сначала импортировать и проверить новый ключ, затем удалять старый |
Сценарии: что делать в зависимости от ситуации
- Ошибка KEYEXPIRED на давно необновляемом сервере. Скорее всего, ключи дистрибутива просто устарели. Обновите связку ключей штатными средствами дистрибутива и повторите обновление. Если система настолько стара, что её репозитории переведены в архив, потребуется подключить архивный источник по инструкции дистрибутива.
- Ошибка появилась сразу после добавления нового стороннего репозитория. Вы пропустили импорт ключа или импортировали не тот. Вернитесь к официальной инструкции подключения репозитория и выполните её заново.
- Ошибка на всех машинах организации одновременно. Почти наверняка вендор провёл ротацию ключа. Проверьте объявления, подготовьте единый порядок обновления ключей и примените его централизованно, а не вручную на каждой машине.
- Ошибка только на одном узле. Сравните его состояние с рабочими машинами: версия менеджера пакетов, содержимое хранилища ключей, настройки времени, используемые зеркала. Локальная причина почти всегда находится этим сравнением.
- Вендор объявил компрометацию. Действуйте по разделу выше: обновление из доверенного источника, новый ключ после сверки отпечатка, дополнительные проверки по рекомендации вендора.
Как снизить риск в будущем
- Регулярно обновляйте системы: большинство проблем с ключами решается ещё до того, как вы их заметите, потому что новые ключи приходят с обновлениями.
- Храните отпечатки ключей важных сторонних репозиториев в внутренней документации и сверяйте их при каждом изменении конфигурации.
- Подключайте сторонние репозитории только по HTTPS и только с официальных сайтов вендоров.
- Следите за announce-каналами дистрибутивов и критичного ПО: сообщения о ротации и отзыве ключей публикуются там заранее или незамедлительно.
- Настройте мониторинг времени (NTP) на серверах — банальная причина множества ложных тревог.
Главное
Отзыв ключа подписи — это сигнал проверить цепочку доверия, а не повод её обходить. Алгоритм короткий: прочитать ошибку и зафиксировать отпечаток ключа, найти официальное объявление вендора, обновить ключи из доверенного канала, сверить отпечатки, удалить старый ключ и убедиться, что обновления снова проходят с проверкой подписей. Если объявление говорит о компрометации — дополнительно обновите затронутые пакеты и выполните рекомендованные вендором проверки. Единственный недопустимый вариант — отключение проверки подписей: оно экономит минуты сейчас и создаёт риск на месяцы вперёд.
Материал носит информационный характер. Конкретные команды, имена пакетов и порядок действий зависят от дистрибутива, его версии и политики вендора — сверяйтесь с официальной документацией вашего дистрибутива и объявлениями вендора на дату обращения, а при работе с критичной инфраструктурой привлекайте ответственного администратора или специалиста по информационной безопасности.
