#!/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