#!/bin/bash # install-ca-cert.sh – Скачать корневой сертификат CA и довериться ему в системе # Использование: sudo ./install-ca-cert.sh [CA_URL] # По умолчанию CA_URL: https://ca.int.kodyffy.ru/roots.pem set -euo pipefail # Адрес CA (можно переопределить первым аргументом) CA_URL="${1:-https://ca.int.kodyffy.ru/roots.pem}" CERT_DIR="/opt/certs" CERT_FILE="${CERT_DIR}/root_ca.crt" TMP_FILE="/tmp/root_ca.crt" echo "=== Установка корневого сертификата CA из ${CA_URL} ===" # Создаём директорию /opt/certs, если её нет if [[ ! -d "$CERT_DIR" ]]; then echo "Создаём директорию ${CERT_DIR}" sudo mkdir -p "$CERT_DIR" fi # Скачиваем сертификат (игнорируем проверку, так как CA ещё не доверен) if command -v curl &>/dev/null; then curl -s -k -o "$TMP_FILE" "$CA_URL" elif command -v wget &>/dev/null; then wget --no-check-certificate -q -O "$TMP_FILE" "$CA_URL" else echo "ОШИБКА: Не найден ни curl, ни wget. Установите один из них." >&2 exit 1 fi if [[ ! -s "$TMP_FILE" ]]; then echo "ОШИБКА: Не удалось скачать сертификат из ${CA_URL}" >&2 exit 1 fi # Копируем в /opt/certs для постоянного хранения sudo cp "$TMP_FILE" "$CERT_FILE" sudo chmod 644 "$CERT_FILE" echo "Сертификат сохранён в ${CERT_FILE}" # Определяем дистрибутив и устанавливаем сертификат в системное хранилище if [[ -f /etc/os-release ]]; then . /etc/os-release DISTRO="${ID:-unknown}" else DISTRO="unknown" fi case "${DISTRO}" in ubuntu|debian) sudo cp "$CERT_FILE" /usr/local/share/ca-certificates/root_ca.crt sudo update-ca-certificates --verbose ;; rhel|centos|fedora|amzn|rocky|almalinux) sudo cp "$CERT_FILE" /etc/pki/ca-trust/source/anchors/root_ca.crt sudo update-ca-trust extract ;; opensuse*|suse) sudo cp "$CERT_FILE" /etc/pki/trust/anchors/root_ca.crt sudo update-ca-certificates ;; alpine) sudo cp "$CERT_FILE" /usr/local/share/ca-certificates/root_ca.crt sudo update-ca-certificates ;; *) # Попробуем стандартные пути if [[ -d /usr/local/share/ca-certificates ]]; then sudo cp "$CERT_FILE" /usr/local/share/ca-certificates/root_ca.crt sudo update-ca-certificates 2>/dev/null || echo "update-ca-certificates не найден, пропускаем" elif [[ -d /etc/pki/ca-trust/source/anchors ]]; then sudo cp "$CERT_FILE" /etc/pki/ca-trust/source/anchors/root_ca.crt sudo update-ca-trust extract 2>/dev/null || echo "update-ca-trust не найден, пропускаем" else echo "ПРЕДУПРЕЖДЕНИЕ: Не удалось определить способ установки. Установите сертификат вручную." fi ;; esac # Удаляем временный файл rm -f "$TMP_FILE" echo "=== Проверка установки ===" openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt "$CERT_FILE" 2>/dev/null && echo "Сертификат доверен." || echo "Проверка сертификата не удалась. Проверьте установку вручную." # Перезапускаем Caddy, если он запущен (необязательно) if systemctl is-active --quiet caddy 2>/dev/null; then echo "Перезапускаем Caddy..." sudo systemctl restart caddy fi echo "Готово. Корневой сертификат CA установлен и доверен системе."