Добавить auto_ca.sh
This commit is contained in:
+94
@@ -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 установлен и доверен системе."
|
||||
Reference in New Issue
Block a user