В предыдущей статье мы подготовили все необходимое для настройки 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, а также пароль к хранилищу.
Итак, настройки:
Тут все более-менее ясно.
- ssl.keystore.location — путь к хранилищу с сертификатом и приватном ключом на сервере
- 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.