Files
2026-08-06 21:34:25 +00:00

94 lines
3.9 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 установлен и доверен системе."