From 536c88a62ac6fa6ef43ab632195c7ac6add5c049 Mon Sep 17 00:00:00 2001 From: KodyFFy Date: Thu, 6 Aug 2026 21:34:25 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20auto=5Fca.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auto_ca.sh | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 auto_ca.sh diff --git a/auto_ca.sh b/auto_ca.sh new file mode 100644 index 0000000..c9b9285 --- /dev/null +++ b/auto_ca.sh @@ -0,0 +1,94 @@ +#!/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 установлен и доверен системе." \ No newline at end of file