80 lines
3.6 KiB
Bash
80 lines
3.6 KiB
Bash
#!/bin/bash
|
|
|
|
# Определяем путь к файлу .env (в той же папке, что и скрипт)
|
|
ENV_FILE="$(dirname "$0")/.env"
|
|
|
|
# Проверяем, существует ли файл .env, и загружаем его
|
|
if [ -f "$ENV_FILE" ]; then
|
|
source "$ENV_FILE"
|
|
else
|
|
echo "Ошибка: Файл конфигурации $ENV_FILE не найден!"
|
|
exit 1
|
|
fi
|
|
|
|
# Флаг, управляющий запуском генерации OpenSSL
|
|
NEED_GENERATION=true
|
|
|
|
# ПРОВЕРКА НАЛИЧИЯ УЖЕ ГОТОВОГО КОРНЕВОГО СЕРТИФИКАТА
|
|
if [ -f "root_ca.key" ] || [ -f "root_ca.crt" ]; then
|
|
echo "Внимание: Файлы Корневого сертификата (root_ca.key/crt) УЖЕ СУЩЕСТВУЮТ!"
|
|
echo "⚠️ ПЕРЕЗАПИСЬ КОРНЯ СЛОМАЕТ ДОВЕРИЕ КО ВСЕМ ВЫПУЩЕННЫМ РАНЕЕ ПРОМЕЖУТОЧНЫМ И ДОМЕННЫМ СЕРТИФИКАТАМ!"
|
|
echo ""
|
|
read -p "Вы хотите ПЕРЕВЫПУСТИТЬ и перезаписать Корневой ЦС? [y/N]: " overwrite_response
|
|
|
|
overwrite_response=$(echo "$overwrite_response" | tr '[:upper:]' '[:lower:]')
|
|
|
|
# Если пользователь ввел y или yes — генерируем заново
|
|
if [[ "$overwrite_response" =~ ^(y|yes)$ ]]; then
|
|
echo "Продолжаем генерацию и перезапись Корневого ЦС..."
|
|
NEED_GENERATION=true
|
|
else
|
|
# Во всех остальных случаях (включая Enter) — ПРОПУСКАЕМ генерацию, но не выходим из скрипта
|
|
echo "Генерация пропущена. Используются существующие файлы сертификата."
|
|
NEED_GENERATION=false
|
|
fi
|
|
fi
|
|
|
|
# Root certificate (Root CA)
|
|
if [ "$NEED_GENERATION" = true ]; then
|
|
echo "Запуск OpenSSL для создания Корневого ЦС..."
|
|
openssl req -x509 -nodes -new -sha512 -days "$CERT_DAYS" \
|
|
-newkey rsa:4096 -keyout root_ca.key -out root_ca.crt \
|
|
-extfile root_ca.ini -extensions "$ROOT_EXT_SECTION" \
|
|
-subj "/C=${CERT_COUNTRY}/L=${CERT_LOCALITY}/O=${CERT_ORG}/CN=${ROOT_CN}"
|
|
fi
|
|
|
|
|
|
echo ""
|
|
read -p "Хотите установить сертификат в систему как доверенный? [Y/n]: " response
|
|
|
|
# Переводим ответ в нижний регистр для надежности
|
|
response=$(echo "$response" | tr '[:upper:]' '[:lower:]')
|
|
|
|
# Если пользователь нажал Enter или ввел y/yes
|
|
if [[ -z "$response" || "$response" =~ ^(y|yes)$ ]]; then
|
|
echo "Установка сертификата..."
|
|
|
|
# Проверяем, есть ли вообще утилита update-ca-certificates в вашей Linux-системе
|
|
if ! command -v update-ca-certificates &> /dev/null; then
|
|
echo "❌ Ошибка: Утилита update-ca-certificates не найдена в этой системе!"
|
|
exit 1
|
|
fi
|
|
|
|
TARGET_DIR="/usr/local/share/ca-certificates"
|
|
|
|
# Проверяем, запущен ли скрипт от root, чтобы использовать sudo при создании папки и копировании
|
|
if [ "$EUID" -ne 0 ]; then
|
|
sudo mkdir -p "$TARGET_DIR"
|
|
sudo cp root_ca.crt "$TARGET_DIR/root_ca.crt"
|
|
sudo update-ca-certificates
|
|
else
|
|
mkdir -p "$TARGET_DIR"
|
|
cp root_ca.crt "$TARGET_DIR/root_ca.crt"
|
|
update-ca-certificates
|
|
fi
|
|
|
|
echo "✅ Сертификат успешно установлен в локальное Linux-окружение!"
|
|
else
|
|
echo "Установка отменена."
|
|
fi
|