SensusInfra/postgres-ssl/generate-ssl.sh
Sergey Antropoff 4db3e01513 feat: Add PostgreSQL SSL support with sslmode=require
- Add SSL configuration to PostgreSQL in docker-compose.yml
- Create PostgreSQL SSL certificate generation script
- Add PostgreSQL SSL environment variables to env.example and .env
- Update Makefile with PostgreSQL SSL commands (ssl-generate, ssl-clean, ssl-info)
- Update .gitignore to exclude PostgreSQL SSL certificates
- Update documentation in README.md and QUICKSTART.md
- Test PostgreSQL SSL certificate generation

Features:
- PostgreSQL SSL mode: require (mandatory encryption)
- Self-signed certificates for development
- Automatic certificate generation via make ssl-generate
- SSL certificate management via Makefile commands

Author: Сергей Антропов
Site: https://devops.org.ru
2025-09-10 11:36:31 +03:00

85 lines
2.9 KiB
Bash
Executable File
Raw 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 сертификатов для PostgreSQL
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
set -e
echo "🔐 Генерация SSL сертификатов для PostgreSQL..."
# Создаем директорию для сертификатов
mkdir -p postgres-ssl
# Переходим в директорию с сертификатами
cd postgres-ssl
# Генерируем приватный ключ для CA
echo "📝 Генерация CA ключа..."
openssl genrsa -out ca.key 4096
# Генерируем самоподписанный сертификат CA
echo "📝 Генерация CA сертификата..."
openssl req -new -x509 -days 365 -key ca.key -out ca.crt \
-subj "/C=RU/ST=Moscow/L=Moscow/O=Sensus/OU=IT/CN=ca.sensus.io"
# Генерируем приватный ключ для сервера
echo "📝 Генерация серверного ключа..."
openssl genrsa -out server.key 4096
# Генерируем запрос на сертификат для сервера
echo "📝 Генерация запроса на сертификат сервера..."
openssl req -new -key server.key -out server.csr \
-subj "/C=RU/ST=Moscow/L=Moscow/O=Sensus/OU=IT/CN=postgres.sensus.io"
# Создаем конфигурационный файл для расширений
cat > 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 = Sensus
OU = IT
CN = postgres.sensus.io
[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = postgres.sensus.io
DNS.2 = localhost
DNS.3 = postgres
IP.1 = 127.0.0.1
IP.2 = 10.99.0.90
EOF
# Подписываем сертификат сервера с помощью CA
echo "📝 Подписание серверного сертификата..."
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key \
-CAcreateserial -out server.crt -days 365 \
-extensions v3_req -extfile server.conf
# Устанавливаем правильные права доступа
echo "🔒 Установка прав доступа..."
chmod 600 server.key ca.key
chmod 644 server.crt ca.crt
# Удаляем временные файлы
rm -f server.csr server.conf
echo "✅ SSL сертификаты для PostgreSQL успешно сгенерированы!"
echo ""
echo "📁 Созданные файлы:"
echo " - ca.crt (сертификат CA)"
echo " - ca.key (приватный ключ CA)"
echo " - server.crt (сертификат сервера)"
echo " - server.key (приватный ключ сервера)"
echo ""
echo "🔐 Сертификаты готовы для использования в PostgreSQL с SSL режимом 'require'"