Debian/Devuan EOL и ca-certificates

Проблема, отраженная в заголовке наверняка вставала перед администраторами «зрелых корпоративных решений». Вроде бы есть backports, и есть доступный ELTS от Freexian, но в наборе пакетов от Freexian например для Debian 9 присутствует пакет той же версии, что и в backports, а именно ca-certificates_20200601_all.deb там присутствует, а хотелось бы ca-certificates_20260601_all.deb. На сколько я понял, причина такого положения вещей проста — в пакете ca-certificates_20200601_all.deb уязвимостей нет, а значит и обновлять его не нужно, чтобы не сломать совместимость. Ну а если пользователю нужно, то он сам как нибудь обновит, и если что-то и сломает, то тоже сам. В любом случае, и Devuan 2 («Ascii») и Debian 9 («Stretch») среди операторов зрелых корпоративных решений еще встречается, и сертификаты хочется иметь, а вот заиметь их без болтосвара и ручных решений не выходит, и просто установить из testing не выходит — начиная с Bullseye пакет ca-certificates зависит от Openssl 1.1.1.

Для себя я слепил такое вот решение. Оно не полностью отражает путь, но даёт нормальный результат. Ниже будет представлен код shell скрипта с комментариями:

#!/bin/bash
set -e

# === Проверка прав root / sudo ===
if [ "$EUID" -ne 0 ]; then
    echo "ОШИБКА: Этот скрипт должен быть запущен от имени пользователя root или через sudo!" >&2
    echo "Пример запуска: sudo $0" >&2
    exit 1
fi

# Ссылка на актуальный пакет из репозитория Debian
URL="https://cdimage.debian.org/debian/pool/main/c/ca-certificates/ca-certificates_20260601_all.deb"
# Рабочая папка
WORK_DIR="/tmp/ca_fix_build"

echo "=== Шаг 1: Скачивание и исправление зависимостей пакета ==="
mkdir -p "$WORK_DIR" && cd "$WORK_DIR"

# Скачиваем пакет (флаг --no-check-certificate нужен на случай, если старый SSL сервера совсем сломан)
wget --no-check-certificate -O ca-certificates.deb "$URL"

# Распаковываем deb-пакет для редактирования
dpkg-deb -x ./ca-certificates.deb tmp_package
dpkg-deb -e ./ca-certificates.deb tmp_package/DEBIAN

# Корректно удаляем ограничение версии OpenSSL вместе со скобками и запятой
sed -i 's/openssl ([^)]*), /openssl, /' tmp_package/DEBIAN/control

# Собираем исправленный пакет и устанавливаем его
dpkg-deb -b tmp_package ./ca-certificates_fixed.deb
dpkg -i ./ca-certificates_fixed.deb

echo "=== Шаг 2: Очистка старой конфигурации ==="
# Удаляем старый файл конфигурации, чтобы избежать варнингов "W: not found"
rm -f /etc/ca-certificates.conf

# Генерируем чистый конфиг без интерактивных вопросов (автовыбор параметров по умолчанию)
DEBIAN_FRONTEND=noninteractive dpkg-reconfigure ca-certificates

echo "=== Шаг 3: Исправление предупреждения rehash ==="
# Убираем баг c_rehash со сборным бандлом ca-certificates.crt с помощью относительной ссылки
if [ -f /etc/ssl/certs/ca-certificates.crt ] && [ ! -L /etc/ssl/certs/ca-certificates.crt ]; then
    mv /etc/ssl/certs/ca-certificates.crt /etc/ssl/ca-certificates.crt
    ln -sf /etc/ssl/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
fi

# Финальное чистое обновление хранилища
update-ca-certificates --fresh

echo "=== Шаг 4: Тестирование соединения через curl ==="
if curl -I https://letsencrypt.org 2>&1 | grep -q "200 OK"; then
    echo "УСПЕХ: Новые сертификаты применены! Система работает стабильно."
else
    echo "ВНИМАНИЕ: Проверка curl не прошла. Проверьте вывод команды вручную."
fi

# Полная очистка временных файлов за собой
rm -rf "$WORK_DIR"

Думаю, что делать с ca-certificates-java теперь понятно 🙂

Запись опубликована в рубрике Работа с метками , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *