Я пытаюсь создать зашифрованное соединение SSL между простым производителем кафки и брокером.
Я настроил брокеров точно так, как описано в официальной документации: https://kafka.apache.org/documentation/#security
Для производителя я использую kafka- python, а его конструктор настроен так:
self.producer = KafkaProducer(bootstrap_servers=broker,
request_timeout_ms=request_timeout,
security_protocol='SSL',
ssl_check_hostname=True,
ssl_cafile='ssl/CARoot.pem',
ssl_certfile='ssl/certificate.pem',
ssl_keyfile='ssl/key.pem')
Вот что происходит:
- Если
ssl_check_hostname
установлен на False
соединение установлено правильно. В качестве доказательства я попытался прослушать пакеты с помощью wireshark и ничего не вижу, вместо этого с помощью PLAINTEXT wireshark может получить все пакеты и легко прочитать все содержимое. - Если для
ssl_check_hostname
установлено значение True
система получила следующую ошибку: [SSL: CERTIFICATE_VERIFY_FAILED] проверка сертификата не удалась: несоответствие IP-адреса, сертификат недействителен для [IP_address]
Поиск по inte rnet Я обнаружил, что эта проблема связана с SAN, вставленным во время конфигурации server.keystore:
keytool -keystore server.keystore.jks -alias localhost -validity 365000 -genkey -keyalg RSA -ext SAN = DNS: {fqdn}
Я пытался использовать:
- SAN = DNS: localhost (где locahost - это вывод
hostname --fqdn
команда - SAN = DNS: XXXX (где XXXX - IP-адрес брокера)
- SAN = IP: XXXX (где XXXX - IP-адрес брокера)
- SAN = IP: YYYY (где YYYY - это IP-адрес пользователя ducer) В этом случае при попытке подключения я получил следующую ошибку:
[SSL: CERTIFICATE_VERIFY_FAILED] не удалось проверить сертификат: самоподписанный сертификат в цепочке сертификатов
Как я могу решить эту проблему?
Спасибо.