- 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
85 lines
2.9 KiB
Bash
Executable File
85 lines
2.9 KiB
Bash
Executable File
#!/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'"
|