- 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
102 lines
5.7 KiB
Bash
Executable File
102 lines
5.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# Автор: Сергей Антропов, сайт: https://devops.org.ru
|
|
# Назначение: Генерация SSL сертификатов для Kafka
|
|
|
|
set -e
|
|
|
|
# Переменные
|
|
KEYSTORE_PASSWORD=${KAFKA_SSL_KEYSTORE_PASSWORD:-kafka123}
|
|
TRUSTSTORE_PASSWORD=${KAFKA_SSL_TRUSTSTORE_PASSWORD:-kafka123}
|
|
KEY_PASSWORD=${KAFKA_SSL_KEY_PASSWORD:-kafka123}
|
|
CERT_VALIDITY_DAYS=${CERT_VALIDITY_DAYS:-365}
|
|
|
|
# Создание директории для сертификатов
|
|
mkdir -p /tmp/kafka-ssl
|
|
cd /tmp/kafka-ssl
|
|
|
|
echo "🔐 Генерация SSL сертификатов для Kafka..."
|
|
|
|
# 1. Создание CA (Certificate Authority)
|
|
echo "📋 Создание CA сертификата..."
|
|
keytool -keystore kafka.server.truststore.jks -alias CARoot -import -file ca-cert -storepass $TRUSTSTORE_PASSWORD -keypass $KEY_PASSWORD -noprompt || true
|
|
|
|
# Создание CA ключа и сертификата
|
|
openssl req -new -x509 -keyout ca-key -out ca-cert -days $CERT_VALIDITY_DAYS -subj "/C=RU/ST=Moscow/L=Moscow/O=Sensus/OU=IT/CN=ca.sensus.local"
|
|
|
|
# 2. Создание keystore для сервера
|
|
echo "🔑 Создание keystore для сервера..."
|
|
keytool -keystore kafka.server.keystore.jks -alias localhost -validity $CERT_VALIDITY_DAYS -genkey -keyalg RSA -storepass $KEYSTORE_PASSWORD -keypass $KEY_PASSWORD -dname "CN=kafka.sensus.local, OU=IT, O=Sensus, L=Moscow, ST=Moscow, C=RU"
|
|
|
|
# 3. Создание Certificate Signing Request (CSR)
|
|
echo "📝 Создание CSR..."
|
|
keytool -keystore kafka.server.keystore.jks -alias localhost -certreq -file cert-file -storepass $KEYSTORE_PASSWORD -keypass $KEY_PASSWORD
|
|
|
|
# 4. Подписание сертификата CA
|
|
echo "✍️ Подписание сертификата CA..."
|
|
openssl x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out cert-signed -days $CERT_VALIDITY_DAYS -CAcreateserial -passin pass:$KEY_PASSWORD
|
|
|
|
# 5. Импорт CA сертификата в keystore
|
|
echo "📥 Импорт CA сертификата в keystore..."
|
|
keytool -keystore kafka.server.keystore.jks -alias CARoot -import -file ca-cert -storepass $KEYSTORE_PASSWORD -keypass $KEY_PASSWORD -noprompt
|
|
|
|
# 6. Импорт подписанного сертификата в keystore
|
|
echo "📥 Импорт подписанного сертификата в keystore..."
|
|
keytool -keystore kafka.server.keystore.jks -alias localhost -import -file cert-signed -storepass $KEYSTORE_PASSWORD -keypass $KEY_PASSWORD -noprompt
|
|
|
|
# 7. Создание truststore
|
|
echo "🛡️ Создание truststore..."
|
|
keytool -keystore kafka.server.truststore.jks -alias CARoot -import -file ca-cert -storepass $TRUSTSTORE_PASSWORD -keypass $KEY_PASSWORD -noprompt
|
|
|
|
# 8. Создание клиентского keystore (для клиентов)
|
|
echo "👤 Создание клиентского keystore..."
|
|
keytool -keystore kafka.client.keystore.jks -alias localhost -validity $CERT_VALIDITY_DAYS -genkey -keyalg RSA -storepass $KEYSTORE_PASSWORD -keypass $KEY_PASSWORD -dname "CN=client.sensus.local, OU=IT, O=Sensus, L=Moscow, ST=Moscow, C=RU"
|
|
|
|
# 9. Создание CSR для клиента
|
|
echo "📝 Создание CSR для клиента..."
|
|
keytool -keystore kafka.client.keystore.jks -alias localhost -certreq -file client-cert-file -storepass $KEYSTORE_PASSWORD -keypass $KEY_PASSWORD
|
|
|
|
# 10. Подписание клиентского сертификата
|
|
echo "✍️ Подписание клиентского сертификата..."
|
|
openssl x509 -req -CA ca-cert -CAkey ca-key -in client-cert-file -out client-cert-signed -days $CERT_VALIDITY_DAYS -CAcreateserial -passin pass:$KEY_PASSWORD
|
|
|
|
# 11. Импорт CA в клиентский keystore
|
|
echo "📥 Импорт CA в клиентский keystore..."
|
|
keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert -storepass $KEYSTORE_PASSWORD -keypass $KEY_PASSWORD -noprompt
|
|
|
|
# 12. Импорт подписанного клиентского сертификата
|
|
echo "📥 Импорт подписанного клиентского сертификата..."
|
|
keytool -keystore kafka.client.keystore.jks -alias localhost -import -file client-cert-signed -storepass $KEYSTORE_PASSWORD -keypass $KEY_PASSWORD -noprompt
|
|
|
|
# 13. Создание клиентского truststore
|
|
echo "🛡️ Создание клиентского truststore..."
|
|
keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass $TRUSTSTORE_PASSWORD -keypass $KEY_PASSWORD -noprompt
|
|
|
|
# 14. Копирование файлов в целевую директорию
|
|
echo "📁 Копирование сертификатов..."
|
|
cp kafka.server.keystore.jks /workspace/kafka-ssl/
|
|
cp kafka.server.truststore.jks /workspace/kafka-ssl/
|
|
cp kafka.client.keystore.jks /workspace/kafka-ssl/
|
|
cp kafka.client.truststore.jks /workspace/kafka-ssl/
|
|
cp ca-cert /workspace/kafka-ssl/
|
|
cp ca-key /workspace/kafka-ssl/
|
|
|
|
# 15. Установка правильных прав доступа
|
|
chmod 600 /workspace/kafka-ssl/*.jks
|
|
chmod 600 /workspace/kafka-ssl/ca-*
|
|
|
|
echo "✅ SSL сертификаты успешно созданы!"
|
|
echo "📋 Созданные файлы:"
|
|
echo " - kafka.server.keystore.jks (серверный keystore)"
|
|
echo " - kafka.server.truststore.jks (серверный truststore)"
|
|
echo " - kafka.client.keystore.jks (клиентский keystore)"
|
|
echo " - kafka.client.truststore.jks (клиентский truststore)"
|
|
echo " - ca-cert (CA сертификат)"
|
|
echo " - ca-key (CA ключ)"
|
|
echo ""
|
|
echo "🔐 Пароли:"
|
|
echo " - Keystore password: $KEYSTORE_PASSWORD"
|
|
echo " - Truststore password: $TRUSTSTORE_PASSWORD"
|
|
echo " - Key password: $KEY_PASSWORD"
|
|
echo ""
|
|
echo "⚠️ ВАЖНО: Измените пароли в production среде!"
|