#!/bin/bash # Определяем путь к файлу .env (в той же папке, что и скрипт) ENV_FILE="$(dirname "$0")/.env" # Проверяем, существует ли файл .env, и загружаем его if [ -f "$ENV_FILE" ]; then source "$ENV_FILE" else echo "Ошибка: Файл конфигурации $ENV_FILE не найден!" exit 1 fi # 1. Проверяем, существуют ли файлы Root CA, необходимые для подписи if [ ! -f "root_ca.crt" ] || [ ! -f "root_ca.key" ]; then echo "Ошибка: Не найдены файлы root_ca.crt или root_ca.key!" echo "Сначала запустите скрипт build-root-cert.sh" exit 1 fi # 2. ПРОВЕРКА НАЛИЧИЯ УЖЕ ГОТОВОГО ПРОМЕЖУТОЧНОГО СЕРТИФИКАТА if [ -f "intermediate_ca.key" ] || [ -f "intermediate_ca.crt" ]; then echo "Внимание: Файлы промежуточного сертификата (intermediate_ca.key/crt) УЖЕ СУЩЕСТВУЮТ!" echo "⚠️ ПЕРЕЗАПИСЬ ЭТИХ ФАЙЛОВ ПРИВЕДЕТ К ТОМУ, ЧТО ВСЕ ВЫПУЩЕННЫЕ РАНЕЕ СЕРТИФИКАТЫ САЙТОВ ПЕРЕСТАНУТ РАБОТАТЬ!" echo "" read -p "Вы уверены, что хотите перевыпустить Промежуточный ЦС? [y/N]: " overwrite_response overwrite_response=$(echo "$overwrite_response" | tr '[:upper:]' '[:lower:]') # По умолчанию (если просто нажат Enter) или если ответ не "y"/"yes" — отменяем выполнение if [[ ! "$overwrite_response" =~ ^(y|yes)$ ]]; then echo "Генерация отменена во избежание порчи действующих сертификатов." exit 0 fi echo "Продолжаем генерацию и перезапись файлов..." fi echo "Генерация ключа и CSR для Промежуточного ЦС..." # Создаем ключ и запрос (CSR) для промежуточного ЦС openssl req -new -nodes -newkey rsa:4096 \ -keyout intermediate_ca.key -out intermediate_ca.csr \ -subj "/C=${CERT_COUNTRY}/L=${CERT_LOCALITY}/O=${CERT_ORG}/CN=${INT_CN}" echo "Подпись промежуточного сертификата с помощью Root CA..." # Подписываем промежуточный сертификат с помощью Root CA openssl x509 -req -sha512 -days "$INT_DAYS" \ -extfile intermediate_ca.ini -extensions "$INT_EXT_SECTION" \ -CA root_ca.crt -CAkey root_ca.key -CAcreateserial \ -in intermediate_ca.csr \ -out intermediate_ca.crt echo "" # Запрашиваем подтверждение у пользователя (Y - да, n - нет) read -p "Хотите установить промежуточный сертификат в систему как доверенный? [Y/n]: " response # Переводим ответ в нижний регистр response=$(echo "$response" | tr '[:upper:]' '[:lower:]') # Если пользователь нажал Enter или ввел y/yes if [[ -z "$response" || "$response" =~ ^(y|yes)$ ]]; then echo "Установка промежуточного сертификата..." if [ "$EUID" -ne 0 ]; then sudo cp intermediate_ca.crt /usr/local/share/ca-certificates/intermediate_ca.crt sudo update-ca-certificates else cp intermediate_ca.crt /usr/local/share/ca-certificates/intermediate_ca.crt update-ca-certificates fi echo "Промежуточный сертификат успешно установлен!" else echo "Установка отменена." fi