Я пытаюсь настроить связь SSL с межброкерскими и брокер-клиентскими коммуникациями в kafka, размещенном на windows.В производстве у нас есть несколько уже подписанных сертификатов для каждого сервера, однако, чтобы получить POC, я хочу смоделировать это, создав свои собственные сертификаты и подписав их локально с помощью CA, который я создаю сам.
Кажется, лучший способ проверить это - заставить его работать с двумя брокерами локально, у каждого из которых есть действительный подписанный сертификат (будет тот же сертификат, что и у той же машины), и подтвердить, что они говорят нормально.Повторите для связи клиент-сервер.Затем попробуйте заменить один из подписанных сертификатов неподписанным - как на брокере 2, так и на клиенте и подтвердите, что он запрещает доступ.
Похоже ли это на разумный подход?
Если да, у меня есть несколько вопросов
Я использую команду keytool для создания начальных сертификатов.На самом деле весь мой процесс выглядит следующим образом:
keytool -keystore server.keystore.jks -alias localhost -validity 10000 -genkey -keyalg RSA
openssl req -new -x509 -keyout ca-key -out ca-cert -days 365
keytool -keystore client.truststore.jks -alias CARoot -import -file ca-cert
keytool -keystore server.truststore.jks -alias CARoot -import -file ca-cert
keytool -keystore server.keystore.jks -alias localhost -certreq -file cert-file
openssl x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out cert-signed -days 10000 -CAcreateserial -passin pass:Kafkaflow1
keytool -keystore server.keystore.jks -alias CARoot -import -file ca-cert
keytool -keystore server.keystore.jks -alias localhost -import -file cert-signed
Мои вопросы
1) После первого шага по созданию хранилища ключей он запрашивает пароль, который подходит.Затем он запрашивает имя и фамилию, организационную единицу, организацию, местность, штат и код страны.Это означает
CN={}, OU={}, O={}
и т. Д.Насколько важна эта информация, это только информация или она должна точно соответствовать чему-то на моей машине, чтобы работать?С сертификатами prod они уже настроены с различными значениями, но локально, чтобы это работало, я могу что-нибудь здесь ввести?Единственный сертификат, который я могу найти в MMC, - это настроенный локальный пользователь, имеющий CN, OU и три заполненных DC.Но я не могу понять, как локальный пользовательский сертификат будет иметь какое-либо отношение к моему сгенерированному сертификату - поэтому я могу буквально поместить что-либо в эти значения, которые я хочу, - только для целей тестирования?под управлением обоих брокеров, как производителя, так и потребителя, на моей машине, я использую один и тот же ключ и хранилище доверенных сертификатов для всех четырех процессов?
3) Достаточно ли установки хранилища ключей для потребителя и хранилища доверенных сертификатов для посредникадля аутентификации?Имя моей машины входит в это где-нибудь?Я видел упоминание о параметре для keytool под названием SAN = DNS: ????но не уверен, если это необходимо для меня
4) При настройке брокера мои server.properties имеют значение
listeners=PLAINTEXT://localhost:9092,SSL://localhost:9093
ssl.client.auth=required
ssl.keystore.type=JKS
ssl.truststore.type=JKS
ssl.truststore.location=c:/kafka/kafka_2.12-2.1.1/kafka.server.truststore.jks
ssl.truststore.password=Kafkaflow1
ssl.keystore.location=c:/kafka/kafka_2.12-2.1.1/kafka.server.keystore.jks
ssl.keystore.password=Kafkaflow1
ssl.key.password=Kafkaflow1
Документы Apache по
https://kafka.apache.org/documentation/#security_ssl
Скажем, чтобы проверить ключ и доверенное хранилище, установленное с
openssl s_client -debug -connect localhost:9093 -tls1
В нем говорится, что вы должны увидеть выходные данные сертификата из этой команды, однако, когда я делаю это, я вижу
Загрузка «экрана» в случайное состояние - выполнено СОЕДИНЕНО (000001F4) запись в 0x784740 [0x78eb30] (92 байта => 92 (0x5C)) 0000 - 16 03 01 00 57 01 00 00-53 03 01 5c 87 7e 7d d2.... W ... S ... ~}.0010 - b4 e4 43 e0 fd 8d a3 96-4b 15 75 7d b8 5c 6c 6a ..C ..... Ku}. \ Lj 0020 - be b0 f8 f6 20 bf 52 d1-eb 3f 3c 00 00 26 0039 .... .R ..? <.. &. 9 0030 - 00 38 00 35 00 16 00 13-00 0a 00 33 00 32 00 2f .8.5 ....... 3.2./ 0040 - 0005 00 04 00 15 00 12-00 09 00 14 00 11 00 08 ................ 0050 - 00 06 00 03 01 00 00 04-00 23 ......... # 005c - чтение из 0x784740 [0x78a320] (5 байт => -1 (0xFFFFFFFF)) write: errno = 10053
Поэтому не уверен, что это проблема протокола или что-то в этоммои настройки я сделал неправильно.
Также, когда я пытаюсь запустить сервер только локально, без каких-либо потребителей или производителей, просто запустив брокер, он загружается нормально.Но когда я соединяюсь со своим потребителем / производителем - это не запрещает авторизацию, даже если я не установил SSL для потребителя / производителя.Я думал, что это будет отрицать?
Любая помощь будет принята с благодарностью