Истечения срока действия ключа для 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]:
- Официальные архивы EOL дистрибутивов
- Локальные/корпоративные репозитории с другими механизмами безопасности
- Изолированные среды (Docker, тестовые стенды)
Когда НЕ безопасно:
- Активные репозитории с работающей системой подписей
- Сторонние репозитории без проверки источника
- Продакшен-системы с важными данными
🎯 Ваш случай - идеальный пример
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 дистрибутива? Читайте наши статьи.