94 lines
3.9 KiB
Bash
94 lines
3.9 KiB
Bash
#!/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 установлен и доверен системе." |