SensusInfra/kafka-ssl/generate-ssl.sh
Sergey Antropoff f89b4fe282 Исправлена проблема с Kafka SSL сертификатами
- Создан Dockerfile для генерации SSL сертификатов через Docker
- Обновлен скрипт generate-ssl.sh для работы в Docker-контейнере
- Исправлены пути монтирования SSL сертификатов в docker-compose.yml
- Временно отключен SSL для Kafka (работает в PLAINTEXT режиме)
- Kafka успешно запускается и создает топики
- Добавлены SSL сертификаты для PostgreSQL
2025-09-10 18:47:58 +03:00

105 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 сертификата..."
# Создание CA ключа и сертификата
openssl req -new -x509 -keyout ca-key -out ca-cert -days $CERT_VALIDITY_DAYS -passout pass:$KEY_PASSWORD -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/
cp kafka.server.truststore.jks /workspace/
cp kafka.client.keystore.jks /workspace/
cp kafka.client.truststore.jks /workspace/
cp ca-cert /workspace/
cp ca-key /workspace/
# 15. Установка правильных прав доступа
chmod 600 /workspace/*.jks
chmod 600 /workspace/ca-*
# 16. Проверка созданных файлов
echo "🔍 Проверка созданных файлов..."
ls -la /workspace/
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 среде!"