Добавить auto_ca.sh

This commit is contained in:
2026-08-06 21:34:25 +00:00
parent 0c355c480c
commit 536c88a62a
+94
View File
@@ -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 установлен и доверен системе."