Шифрование паролей в конфигурациях#
В общем случае пароль задается в конфигурационных файлах для keystore и truststore.
Для Kafka:
ssl.keystore.password=зашифрованный_пароль
ssl.truststore.password=зашифрованный_пароль
ssl.quorum.keystore.password=зашифрованный_пароль
ssl.quorum.truststore.password=зашифрованный_пароль
Для ZooKeeper добавляется суффикс encrypted:
ssl.keystore.password.encrypted=зашифрованный_пароль
ssl.truststore.password.encrypted=зашифрованный_пароль
ssl.quorum.keystore.password.encrypted=зашифрованный_пароль
ssl.quorum.truststore.password.encrypted=зашифрованный_пароль
Обратите внимание, что зашифрованный_пароль может задаваться в виде строки с паролем либо в виде ${имя_провайдера:зашифрованный_пароль} в случае использования ConfigProvider.
Чтобы расшифровать пароль в конфигурации задается способ расшифровки. Есть два основных способа с использованием ConfigProvider и без.
Шифрование без использования ConfigProvider#
В параметрах security.encoding задайте ключ шифрования, класс декодер пароля, класс соль провайдера.
security.encoding.key=<Ключ шифрования>
security.encoding.class=ru.sbt.ss.password.decoder.SimpleTextPasswordDecoder
security.encoding.salt=ru.sbt.ss.password.salt.SbtSaltProvider
В примере указаны классы которые входят в дистрибутив Corax.
Шифрование с использованием ConfigProvider#
Конфигурация позволяет одновременно использовать пароли зашифрованные разными ключами шифрования, для этого нужно задать ConfigProvider.
Настройте следующим образом:
config.providers=имя_провайдера_1,имя_провайдера_2
config.providers.имя_провайдера_1.class=ru.sbt.ss.kafka.DecryptionConfigProvider
config.providers.имя_провайдера_1.param.security.encoding.class=ru.sbt.ss.password.decoder.SimpleTextPasswordDecoder
config.providers.имя_провайдера_1.param.security.encoding.key=ключ_шифрования_1
config.providers.имя_провайдера_1.param.security.encoding.salt=ru.sbt.ss.password.salt.SbtSaltProvider
config.providers.имя_провайдера_2.class=ru.sbt.ss.kafka.DecryptionConfigProvider
config.providers.имя_провайдера_2.param.security.encoding.class=ru.sbt.ss.password.decoder.SimpleTextPasswordDecoder
config.providers.имя_провайдера_2.param.security.encoding.key=ключ_шифрования_2
config.providers.имя_провайдера_2.param.security.encoding.salt=ru.sbt.ss.password.salt.SbtSaltProvider
При использовании пароля также нужно задать имя провайдера.
Для Kafka:
ssl.keystore.password=${имя_провайдера_1:зашифрованный_пароль}
ssl.truststore.password=${имя_провайдера_1:зашифрованный_пароль}
ssl.quorum.keystore.password=${имя_провайдера_2:зашифрованный_пароль}
ssl.quorum.truststore.password=${имя_провайдера_2:зашифрованный_пароль}
Для ZooKeeper:
ssl.keystore.password.encrypted=${имя_провайдера_1:зашифрованный_пароль}
ssl.truststore.password.encrypted=${имя_провайдера_1:зашифрованный_пароль}
ssl.quorum.keystore.password.encrypted=${имя_провайдера_2:зашифрованный_пароль}
ssl.quorum.truststore.password.encrypted=${имя_провайдера_2:зашифрованный_пароль}
Зашифрованный пароль может, например, иметь вид: "j8XC2+gHIqoI82tXuisgyQ==", "bM6GTIr3BpIuWrlM9+3uTA==".
Хранить пароли в открытом виде небезопасно. Для обеспечения безопасной работы в Corax реализована поддержка зашифрованных паролей в конфигурационных файлах (расположены в каталоге config) с помощью утилит:
bin/crx-encoding.sh— на основе фразы и соли; соль берется из текстового файла.bin/crx-password-encrypt.sh— на основе библиотекиpassword-encrypt-cli-2.4.0.jar. Пароли хешируются по алгоритму PBKDF2WithHmacSHA1 с использованием одного из алгоритмов шифрования AES, CBC, PKCS5Padding с длиной ключа 256.
Утилита crx-encoding.sh#
Конфигурация утилиты происходит с помощью флагов, которые указываются при запуске утилиты crx-encoding.sh:
Флаг |
Определение |
Обязательность |
Значение по умолчанию |
|---|---|---|---|
|
Ключ шифрования |
Да |
Задается пользователем |
|
Пароль для шифрования |
Да |
Задается пользователем |
|
Абсолютный путь к файлу с солью |
Да |
Задается пользователем |
Внимание!
Файл с солью должен содержать строку не менее 16 Байт (символов).
Запуск:
/KAFKA_DIR/bin/crx-encoding.sh --phrase <Ключ шифрования> --password <Пароль для шифрования> --salt <Абсолютный путь к файлу с солью>
Пример запуска утилиты шифрования с солью kafka.se.security.salt из файла salt.txt:
/KAFKA_DIR/bin/crx-encoding.sh --phrase KEY_1 --password qwe123 --salt /KAFKA_DIR/config/salt.txt
После успешного шифрования пароля в терминале появится сообщение вида:
Encoding password: gdiWQNuF/6Ja3DHbyqJroA==
Возможные ошибки#
Ошибка |
Пояснение |
|---|---|
|
Неверно указан путь к файлу с солью (с флагом |
|
Указан путь к пустому файлу или соль меньше 16 байт (с флагом |
Утилита crx-password-encrypt.sh#
Утилита шифрования пароля с помощью библиотеки password-encrypt-cli-2.4.0.jar.
Пример команды:
Пример команды:
с ключом:
./bin/crx-password-encrypt.sh <Пароль для шифрования> <Ключ>без ключа:
./bin/crx-password-encrypt.sh <Пароль для шифрования>
Указанный в команде пароль будет выведен в терминал в зашифрованном виде. Пароль при этом не сохраняется в файл ни в каком виде.
Дешифрование пароля#
Дешифрование пароля не поддерживается.
Настройки по умолчанию в инсталляторе#
По умолчанию в инсталяторе используются:
имя_провайдера="decode";ключ_шифрования="QXBhY2hlS2Fma2FTZWN1cmUK";незашифрованный_пароль="qwe123".