552 Words

Истечения срока действия ключа для Linux пакета

🔍 Суть проблемы

1. Система подписей Debian пакетов

Debian использует GPG-подписи для обеспечения:

  • Аутентичности - пакеты действительно от Debian
  • Целостности - пакеты не были изменены
  • Свежести - пакеты актуальные
Release файл → Подписан GPG ключом → Содержит хеши пакетов

2. Ключевые компоненты

  • Release.gpg - подпись Release файла
  • InRelease - Release файл со встроенной подписью
  • Ключи пакетов - хранятся в /etc/apt/trusted.gpg.d/
  • Ключи архива - подписывают Release файлы

3. Что происходит при apt-get update

1. Скачивает Release/InRelease файлы
2. Проверяет GPG подпись (Release.gpg)
3. Если подпись верна → доверяет хешам в Release
4. Скачивает пакеты и проверяет их хеши

💥 Конкретная проблема с Stretch

Причины ошибки:

W: GPG error: http://archive.debian.org/debian stretch Release:
The following signatures were invalid:
EXPKEYSIG 04EE7237B7D453EC Debian Archive Automatic Signing Key (9/stretch)

EXPKEYSIG - ключ ИСТЕК (expired) NO_PUBKEY - ключ отсутствует в системе

Почему ключи истекли:

Ключ Назначение Статус
04EE7237B7D453EC Archive Automatic Signing Key Истек
EF0F382A1A7B6500 Debian Stable Release Key Истек
AA8E81B4331F7F50 Security Archive Signing Key Истек

Debian намеренно устанавливает срок действия ключей для безопасности, но для EOL-релизов это создает проблемы.

🛠️ Пошаговый алгоритм решения

Шаг 1: Диагностика

# Проверить ошибки
apt-get update

# Посмотреть какие ключи отсутствуют
apt-key list

# Проверить конкретный репозиторий
apt-get update -o Debug::Acquire::gpgv=true

Шаг 2: Анализ вариантов решения

Вариант A: [trusted=yes] в sources.list

deb [trusted=yes] http://archive.debian.org/debian/ stretch main
  • Плюсы: Просто, чисто, один раз настраивается
  • Минусы: Отключает всю проверку для репозитория

Вариант B: –allow-unauthenticated

apt-get install --allow-unauthenticated package-name
  • Плюсы: Точечное применение
  • Минусы: Нужно добавлять к каждой команде

Вариант C: Обновление ключей

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys KEYID
  • Плюсы: Восстанавливает безопасность
  • Минусы: Для EOS дистрибутивов может не работать

Шаг 3: Выбор стратегии по типу репозитория

Тип репозитория Рекомендуемое решение
Официальный архив EOL [trusted=yes]
Сторонний репозиторий Обновить ключи
Локальный репозиторий [trusted=yes]
Новый сторонний Скачать и добавить ключ

📋 Практические примеры для разных случаев

Случай 1: Ubuntu EOL релиз

# Для Ubuntu 16.04 Xenial
deb [trusted=yes] http://old-releases.ubuntu.com/ubuntu/ xenial main

Случай 2: CentOS/RHEL

# Для CentOS 6
sed -i 's/gpgcheck=1/gpgcheck=0/' /etc/yum.repos.d/CentOS-Base.repo

Случай 3: Сторонний репозиторий с новым ключом

# Скачать новый ключ
wget -O - https://repo.example.com/KEY.gpg | apt-key add -

# Или добавить из keyserver
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1234567890ABCDEF

Случай 4: Локальные пакеты без подписи

# В sources.list
deb [trusted=yes] file:/path/to/local/repo ./

🔧 Расширенная диагностика

Полная проверка состояния apt:

# Проверить все репозитории
apt-cache policy

# Подробная информация о пакетах
apt-cache show package-name

# Проверить подписи
gpg --verify InRelease

Проверка конкретного пакета:

# Скачать и проверить пакет вручную
dpkg-sig --verify package.deb

# Посмотреть информацию о пакете
dpkg-deb -I package.deb

🛡️ Безопасность и риски

Когда безопасно использовать [trusted=yes]:

  1. Официальные архивы EOL дистрибутивов
  2. Локальные/корпоративные репозитории с другими механизмами безопасности
  3. Изолированные среды (Docker, тестовые стенды)

Когда НЕ безопасно:

  1. Активные репозитории с работающей системой подписей
  2. Сторонние репозитории без проверки источника
  3. Продакшен-системы с важными данными

🎯 Ваш случай - идеальный пример

Stretch (Debian 9) → EOL с июля 2022:

  • Ключи истекли намеренно
  • Репозитории перемещены в архив
  • Нет обновлений безопасности
  • [trusted=yes] - корректное решение

💡 Универсальный чек-лист решения

1. Определить тип репозитория (официальный/сторонний/EOL)
2. Проверить доступность ключей (apt-key list)
3. Попробовать обновить ключи (apt-key adv)
4. Если EOL → использовать [trusted=yes]
5. Если сторонний → найти актуальный ключ
6. Проверить работоспособность (apt-get update)
7. Задокументировать решение

Эта методология работает для любых дистрибутивов Linux и типов репозиториев!


Интересуют другие статьи по решению проблемы EOL дистрибутива? Читайте наши статьи.