#!/bin/bash # ============================================================================== # Скрипт для быстрого создания тестового самоподписанного SSL сертификата # Использует: openssl (альтернатива Python скрипту) # ============================================================================== set -e # Цвета RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Параметры по умолчанию DOMAIN="${1:-example.com}" WILDCARD="${2:-yes}" CERT_DIR="/etc/letsencrypt/live/${DOMAIN}" VALIDITY_DAYS=90 echo -e "${BLUE}╔════════════════════════════════════════════════════════════════╗${NC}" echo -e "${BLUE}║ Создание тестового самоподписанного SSL сертификата ║${NC}" echo -e "${BLUE}╚════════════════════════════════════════════════════════════════╝${NC}" echo "" echo -e "${YELLOW}Параметры:${NC}" echo -e " Домен: ${GREEN}${DOMAIN}${NC}" echo -e " Wildcard: ${GREEN}${WILDCARD}${NC}" echo -e " Срок действия: ${GREEN}${VALIDITY_DAYS} дней${NC}" echo -e " Директория: ${GREEN}${CERT_DIR}${NC}" echo "" echo -e "${YELLOW}⚠️ ВНИМАНИЕ: Это тестовый сертификат для разработки!${NC}" echo -e "${YELLOW} Браузеры будут показывать предупреждение безопасности.${NC}" echo "" # Проверка прав root if [ "$(id -u)" != "0" ]; then echo -e "${RED}✗ Требуются права root${NC}" echo -e "Запустите: sudo $0 $@" exit 1 fi # Создание директории echo -e "${YELLOW}→ Создание директории...${NC}" mkdir -p "${CERT_DIR}" cd "${CERT_DIR}" # Подготовка конфигурации для альтернативных имен (SAN) if [ "${WILDCARD}" = "yes" ]; then SAN="DNS:${DOMAIN},DNS:*.${DOMAIN}" else SAN="DNS:${DOMAIN}" fi # Создание конфигурации OpenSSL cat > openssl.cnf </dev/null chmod 600 privkey.pem echo -e "${GREEN}✓ Приватный ключ сохранен: ${CERT_DIR}/privkey.pem${NC}" # Генерация сертификата echo -e "${YELLOW}→ Генерация самоподписанного сертификата...${NC}" openssl req \ -new \ -x509 \ -key privkey.pem \ -out cert.pem \ -days ${VALIDITY_DAYS} \ -config openssl.cnf \ -extensions v3_req \ 2>/dev/null echo -e "${GREEN}✓ Сертификат сохранен: ${CERT_DIR}/cert.pem${NC}" # Создание fullchain (копия cert для самоподписанного) cp cert.pem fullchain.pem echo -e "${GREEN}✓ Fullchain сохранен: ${CERT_DIR}/fullchain.pem${NC}" # Создание пустого chain.pem touch chain.pem echo -e "${GREEN}✓ Chain файл создан: ${CERT_DIR}/chain.pem${NC}" # Удаление временного файла конфигурации rm -f openssl.cnf echo "" echo -e "${BLUE}╔════════════════════════════════════════════════════════════════╗${NC}" echo -e "${BLUE}║ Информация о сертификате ║${NC}" echo -e "${BLUE}╚════════════════════════════════════════════════════════════════╝${NC}" # Вывод информации о сертификате openssl x509 -in cert.pem -noout -subject -dates -ext subjectAltName echo "" echo -e "${GREEN}╔════════════════════════════════════════════════════════════════╗${NC}" echo -e "${GREEN}║ ✓ Тестовый сертификат успешно создан ║${NC}" echo -e "${GREEN}╚════════════════════════════════════════════════════════════════╝${NC}" echo "" echo -e "${YELLOW}📁 Файлы сертификата:${NC}" echo -e " • Приватный ключ: ${CERT_DIR}/privkey.pem" echo -e " • Сертификат: ${CERT_DIR}/cert.pem" echo -e " • Fullchain: ${CERT_DIR}/fullchain.pem" echo -e " • Chain: ${CERT_DIR}/chain.pem" echo "" echo -e "${YELLOW}⚠️ ВНИМАНИЕ:${NC}" echo -e " Это самоподписанный тестовый сертификат!" echo -e " Браузеры будут показывать предупреждение о безопасности." echo -e " Используйте ТОЛЬКО для тестирования и разработки!" echo "" echo -e "${YELLOW}Использование в Nginx:${NC}" echo -e " ssl_certificate ${CERT_DIR}/fullchain.pem;" echo -e " ssl_certificate_key ${CERT_DIR}/privkey.pem;" echo "" # Предложение загрузить в NPM echo -e "${YELLOW}Загрузить в Nginx Proxy Manager?${NC}" echo -e " Используйте Python скрипт с опцией --test-cert" echo -e " или загрузите вручную через веб-интерфейс NPM" echo ""