SensusInfra/kafka-ssl/generate-ssl.sh
Sergey Antropoff 7877590440 feat: Initial infrastructure setup for SensusAgent and SensusWorker
- Add Kafka with SSL support and KafkaUI with authentication
- Add PostgreSQL with initialization scripts
- Add ClickHouse cluster with 2 replicas and load balancer
- Add Nginx load balancer for ClickHouse
- Add comprehensive Makefile for infrastructure management
- Add SSL certificate generation for Kafka
- Add complete documentation and quickstart guide
- Add environment configuration with real values

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

102 lines
5.7 KiB
Bash

#!/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 среде!"