Kafka: Часть 5 — Защита канала по протоколу SSL без аутентификации

В предыдущей статье мы подготовили все необходимое для настройки SSL в Kafka. Теперь займемся непосредственно настройкой Kafka и попробуем наше защищенное соединение в действии!

В и первой и второй статьях мы узнали, что указание протокола как SSL в настройках — это выбор протокола аутентификации. Это не совсем так. Указание этого протокола говорит лишь о том, что будет использоваться SSL. А уже от настройки самого SSL зависит будет ли проводиться аутентификация или нет. Конкретно в этой статье мы рассмотрим только защиту канала с помощью SSL. А уже в следующей добавим и аутентификацию.

Также не стоит путать указание протокола SSL с указанием протокола SASL_SSL. Во втором случае SSL используется для защиты SASL механизмов.

Предыдущая статья.Следующая статья.

Полный список статей по теме тут.

Заходите в наш телеграмм канал — Enterprise Stack Helper! Делитесь опытом или задавайте вопросы, если что-то непонятно.

Репозитории с примерам из статей по способам аутентификаци и авторизации https://github.com/BlockWit/kafka-security-examples.

 

Настройки сервера

Изменим описание протокола на 9093 порту в listeners и advertised.listeners на SSL:

Не забывайте заменять localhost на свой

Теперь нам необходимо указать сами настройки SSL на сервере.

Для настройки SSL у Вас должен быть сертификат для сервера и приватный ключ, дабы этим приватным ключом сервер Kafka мог подписывать свои ответы. В предыдущей статье мы подготовили хранилища. Если Вы не читали предыдущую статью, то вкратце — Kafka по умолчанию поддерживает — JKS и PKCS12 форматы хранилища сертификатов и ключей. Поэтому подготовьте сертификат и приватный ключ к нему в виде файла-хранилища JSK или PKCS12, а также пароль к хранилищу.

Итак, настройки:

Тут все более-менее ясно.

  1. ssl.keystore.location  — путь к хранилищу с сертификатом и приватном ключом на сервере
  2. ssl.keystore.password — пароль к хранилищу

Важно — имя сервера или IP, которые указаны в listeners и advertise.listeners должны совпадать с SAN в сертификате или с hostanem в CN в сертификате, если нет SAN. Подробнее о порядке совпадения в предыдущей статье.

Все, конфигурация сервера готова! Приведем полную конфигурацию:

Убедитесь, что Kafka имеет права на чтение server.keystore.jks иначе получите ошибку:

Если Вы получили такую ошибку, то сделайте владельцем файла server.keystore.jks пользователя, под которым запускается Kafka. Например, вот так:

Настройки клиента

Как мы узнали из второй статьи, выбор протокола SSL для клиента задается настройками:

Также нам потребуется указать путь до хранилища доверенных сертификатов и пароль к этому хранилищу. В хранилище доверенных сертификатов клиента не должно быть приватного ключа! Как сформировать хранилище доверенных сертификатов для клиента — в предыдущей статье.

Думаю, тут все понятно!

Клиент будет работать даже с самоподписным сертификатом, поскольку мы заранее ему подсунули сертификат, которому нужно доверять в client.truststore.jks!

Теперь приведем пример кода запуска клиента.

Код самого клиента мы приводить тут и в следующих статьях не будем. Его можно посмотреть во второй статье. Приведем только код для запуска.

Не забывайте менять localhost на свой!

Запустите Kafka, а затем клиент!  Если все успешно, то клиент ознаменует успешный процесс отправки сообщений в топик следующим текстом:

Резюме

В этой статье мы узнали как настроить SSL без аутентификации и попробовали на практике.

В следующей статье мы добавим аутентификацию к нашей настройке  SSL.

Предыдущая статья. Следующая статья.

Полный список статей по теме тут.

Заходите в наш телеграмм канал — Enterprise Stack Helper! Делитесь опытом или задавайте вопросы, если что-то непонятно.

Репозитории с примерам из статей по способам аутентификаци и авторизации https://github.com/BlockWit/kafka-security-examples.

 

Добавить комментарий