mnemo_cards/mnemo_cards_backend/certs/generate_https_server_cert.sh
2025-11-16 14:25:27 +03:00

85 lines
3.6 KiB
Bash
Executable file
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Скрипт для генерации SSL сертификатов для HTTPS сервера
# Отдельно от certificate pinning сертификатов для мобильного приложения
DOMAIN="1592725-cf88967.twc1.net"
CERT_DIR="certs/https_server"
echo "Генерируем SSL сертификаты для HTTPS сервера домена: $DOMAIN"
echo "ВНИМАНИЕ: Эти сертификаты НЕ для certificate pinning в мобильном приложении!"
echo ""
# Создаем директорию для HTTPS серверных сертификатов
mkdir -p $CERT_DIR
# Генерируем RSA приватный ключ для CA
openssl genrsa -out $CERT_DIR/ca.key 2048
# Создаем самоподписанный CA сертификат
openssl req -new -x509 -key $CERT_DIR/ca.key -out $CERT_DIR/ca.crt -days 3650 \
-subj "/C=RU/ST=Moscow/L=Moscow/O=MnemoCards/OU=IT/CN=MnemoCards-HTTPS-CA"
# Генерируем RSA приватный ключ для сервера
openssl genrsa -out $CERT_DIR/server.key 2048
# Создаем запрос на сертификат для сервера
openssl req -new -key $CERT_DIR/server.key -out $CERT_DIR/server.csr \
-subj "/C=RU/ST=Moscow/L=Moscow/O=MnemoCards/OU=IT/CN=$DOMAIN"
# Создаем конфигурационный файл для SAN (Subject Alternative Name)
cat > $CERT_DIR/server.conf << EOF
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = RU
ST = Moscow
L = Moscow
O = MnemoCards
OU = IT
CN = $DOMAIN
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = $DOMAIN
DNS.2 = localhost
DNS.3 = 127.0.0.1
IP.1 = 127.0.0.1
IP.2 = 0.0.0.0
EOF
# Генерируем сертификат сервера с SAN
openssl x509 -req -in $CERT_DIR/server.csr -CA $CERT_DIR/ca.crt -CAkey $CERT_DIR/ca.key \
-CAcreateserial -out $CERT_DIR/server.crt -days 3650 -sha256 \
-extensions v3_req -extfile $CERT_DIR/server.conf
# Генерируем клиентский сертификат (опционально, для мобильных приложений)
openssl genrsa -out $CERT_DIR/client.key 2048
openssl req -new -key $CERT_DIR/client.key -out $CERT_DIR/client.csr \
-subj "/C=RU/ST=Moscow/L=Moscow/O=MnemoCards/OU=IT/CN=MnemoCards-HTTPS-Client"
openssl x509 -req -in $CERT_DIR/client.csr -CA $CERT_DIR/ca.crt -CAkey $CERT_DIR/ca.key \
-CAcreateserial -out $CERT_DIR/client.crt -days 3650 -sha256
echo ""
echo "HTTPS серверные SSL сертификаты успешно созданы в директории: $CERT_DIR"
echo "Файлы:"
echo " - ca.crt (корневой сертификат для HTTPS сервера)"
echo " - server.crt (сертификат HTTPS сервера)"
echo " - server.key (приватный ключ HTTPS сервера)"
echo " - client.crt (клиентский сертификат)"
echo " - client.key (приватный ключ клиента)"
echo ""
echo "Для запуска HTTPS сервера используйте:"
echo "dart run lib/main.dart --certs $(pwd)/$CERT_DIR -a 0.0.0.0 -p 443"
echo ""
echo "ВНИМАНИЕ:"
echo " - Эти сертификаты ТОЛЬКО для HTTPS сервера"
echo " - Certificate pinning сертификаты остаются в certs/ (не трогаем)"
echo " - Для продакшена используйте сертификаты от доверенного CA (Let's Encrypt, etc.)"