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

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

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

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

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

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

 

Аутентификация по SSL

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

  1. Клиент получает сертификат от сервера
  2. Проверяет, что CN поле сертификата совпадает с адресом, по которому клиент подключается.
  3. Клиент проверяет, что сертификат есть в хранилище доверенных сертификатов (наш случай), либо проверяет, что сертификат подписан с помощью сертификата авторизованного центра.

Однако, под аутентификацией в контексте настройки сервера Kafka подразумевается именно аутентификация клиента на сервере. Поэтому добавлением этой аутентификации мы и займемся.

Аутентификация клиента на сервере будет работать почти точно также, как и сервера на клиенте. Только клиент и сервер поменяются ролями! И да, проверка сертификата будет только по наличию его в хранилище.

Поэтому, чтобы настроить аутентификацию клиента на сервере, нам нужно выполнить следующие шаги:

  1. Выпустить приватный ключ и сертификат для клиента
  2. Создать хранилище сертификатов клиента и поместить туда приватный ключ и сертификат клиента
  3. Положить в хранилище доверенных сертификатов сервера сертификат клиента
  4. Настроить клиент и сервер

Подготовка сертификатов и хранилищ

Для выпуска сертификата и приватного ключа клиента выполним такую же, как в этой статье, команду:

Вместо clientname подставьте имя, под которым хотите, чтобы Kafka аутентифицировал клиента. Поскольку мы будем проверять клиента по хранилищу доверенных сертификатов, то имя может быть любое.

После выполнения команды у нас появятся файлы сертификата client.pem и ключа client.key.

Создадим хранилище сертификатов и ключей клиента такой же, как в этой статье, командой:

Теперь у нас появилось хранилище сертификатов и приватных ключей клиента client.keystore.p12 и пароль к нему.

Не путайте хранилища сертификатов клиента client.keystore.p12 и хранилище доверенных сертификатов клиента client.truststore.p12, которое мы создавали ранее. В хранилище доверенных сертификатов хранятся сертификаты серверов, которым доверяет клиент.

Теперь создадим хранилище доверенных сертификатов для сервера:

Не забудьте заменить clientname на удобное Вам.

После выполнения команды появится файл с доверенными сертификатами сервера. Не забудьте сохранить к нему пароль.

Все готово для настройки клиента и сервера!

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

Поскольку мы добавляем аутентификацию к уже настроенному в предыдущей статье соединению SSL, укажем только те настройки, которые нужно добавить!

Итак, нам нужно добавить путь до хранилища доверенных сертификатов и пароль к этому хранилищу!

И еще добавим опцию:

Эта опция говорит о том, что у нас проверка сертификата клиента обязательна!

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

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

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

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

Для клиента нужно добавить путь до хранилища сертификата и приватного ключа клиента и пароль к хранилищу.

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

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

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

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

Резюме

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

В следующей статье мы настроим и запустим протокол SASL с механизмом аутентификации PLAIN и с защитой по  SSL.

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

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

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

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

 

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