#!/bin/bash # Определяем путь к файлу .env и загружаем его ENV_FILE="$(dirname "$0")/.env" if [ -f "$ENV_FILE" ]; then source "$ENV_FILE" else echo "Ошибка: Файл конфигурации $ENV_FILE не найден!" exit 1 fi # Проверяем наличие Промежуточного ЦС для подписи if [ ! -f "intermediate_ca.crt" ] || [ ! -f "intermediate_ca.key" ]; then echo "Ошибка: Не найдены файлы intermediate_ca.crt или intermediate_ca.key!" echo "Сначала запустите скрипт build-intermediate-cert.sh" exit 1 fi # Проверяем наличие файла конфигурации SAN if [ ! -f "issuing_san.ini" ]; then echo "Ошибка: Файл конфигурации issuing_san.ini не найден!" exit 1 fi echo "Генерация универсального ключа и запроса (CSR) по файлу конфигурации..." # Создаем один общий запрос. В CN подставляем базовый домен из .env openssl req -new -nodes -newkey rsa:4096 \ -keyout issuing.key -out issuing.csr \ -subj "/C=${CERT_COUNTRY}/L=${CERT_LOCALITY}/O=${CERT_ORG}/CN=${DOMAIN_CN}" echo "Подпись мультидоменного сертификата через Intermediate CA (на $ISSUING_DAYS дн)..." # Подписываем, строго используя расширения SAN из файла issuing_san.ini openssl x509 -req -sha512 -days "$ISSUING_DAYS" \ -extfile issuing_san.ini -extensions "$ISSUING_EXT_SECTION" \ -CA intermediate_ca.crt -CAkey intermediate_ca.key -CAserial intermediate_ca.srl -CAcreateserial \ -in issuing.csr \ -out issuing.crt echo "" # Запрашиваем подтверждение сборки пакета для NPM read -p "Хотите собрать файлы privkey.pem и fullchain.pem? [Y/n]: " npm_response # Переводим ответ в нижний регистр npm_response=$(echo "$npm_response" | tr '[:upper:]' '[:lower:]') # Если пользователь нажал Enter или ввел y/yes if [[ -z "$npm_response" || "$npm_response" =~ ^(y|yes)$ ]]; then echo "Сборка универсальных файлов privkey.pem и fullchain.pem..." # Копируем приватный ключ cat issuing.key > privkey.pem # Объединяем доменный и промежуточный сертификаты в единую цепочку (Full Chain) cat issuing.crt > fullchain.pem cat intermediate_ca.crt >> fullchain.pem echo "Файлы сертификата (PEM-контейнеры) готовы в текущей папке:" echo " -> Приватный ключ: privkey.pem" echo " -> Цепочка сертификатов: fullchain.pem" fi echo "" echo "✅ Процесс выпуска сертификата успешно завершен!"