VaultSslContextBuilderPlugin#
Плагин позволяет получать сертификаты из HashiCorp Vault или из хранилищ на файловой системе и формировать ssl-контекст. Так же поддерживается расширение клиента kafka для интеграции с HashiCorp Vault.
Подключение#
Добавить актуальную версию плагина в зависимости проекта.
Использовать необходимые классы для построения SSLContext.
Построение контекста из хранилищ из файлов#
Используется класс ru.sbt.ss.ssl.context.builder.SSLContextBuilder.
SSLContext context = SSLContextBuilder.builder()
.withProtocol("TLSv1.2")
.withConscrypt()
.withKeyPassword("123".toCharArray())
.withKeyStorePassword("456".toCharArray())
.withTrustStorePassword("456".toCharArray())
.withStoreType("JKS")
.withKeyStoreLocation(storeLocation)
.withTrustStoreLocation(storeLocation)
.withDnList("CN=test,OU=FPSS,O=SBT,ST=Moscow,C=RU")
.withEndpointVerificationAlgorithm("dn")
.build();
Параметры SSLContextBuilder#
Имя | Описание | Значение по умолчанию |
|---|---|---|
| Пароль от ключа | |
| Расположение хранилища сертификатов | |
| Пароль от хранилища сертификатов | |
| Тип хранилища сертификатов | JKS |
| Расположение хранилища доверенных сертификатов | |
| Пароль от хранилища доверенных сертификатов | |
| Тип хранилища доверенных сертификатов | JKS |
| Версия протокола TLS | TLSv1.2 |
| Алгоритм проверки хоста подключения | https |
| Использование библиотеки Conscrypt |
|
| Белый список доверенных DN | |
| Путь до файла с белым списком доверенных сертификатов | |
| Класс для расшифровки паролей | ru.sbt.ss.password.BaseEncryptor |
| Ключ для расшифровки паролей конфигурации | |
| Расположение сертификата, полученного из Vault | |
| Расположение приватного ключа сертификата, полученного из Vault | |
| Расположение файла с доверенными сертификатами, полученными из Vault | |
| Позволяет использовать билдер без параметров |
|
Построение контекста из HashiCorp Vault#
Используется класс ru.sbt.ss.ssl.context.builder.VaultContextBuilder.
// SSLContext для подключения к Vault
SSLContextBuilder builder = SSLContextBuilder.builder()
.withTrustStoreLocation("/Users/sbt-navalikhin-an/workspace/apps/vault/vaultclient.jks")
.withTrustStorePassword("qwe123".toCharArray())
.withProtocol("TLSv1.2");
SSLContext context = VaultContextBuilder.builder()
.withVaultSSLContextBuilder(builder)
.withAuth(new PasswordAuth("test", "qwe123".toCharArray(), "userpass"))
.withKeyStoreLocation("client.jks")
.withKeyAlias("test-1")
.withTrustStoreLocation("client.jks")
.withVaultAddress("https://vault:8200/")
.withCommonName("TestCert")
.withAltNames(Collections.singletonList("localhost"))
.withIpSans(Collections.singletonList("127.0.0.1"))
.withSecretPath("kv1/certstore")
.withKeySecret("key")
.withKeyStoreSecret("keystore")
.withTrustStoreSecret("truststore")
.withIssueRoleName("test1")
.withEngineVersion(1)
.withProtocol("TLSv1.2").build();
Получение сертификатов из консоли#
Скачать ssl-context-builder-*-fatjar.jar.
Создать файл vault.properties с параметрами подключения к HashiCorp Vault.
Выполнить команду:
java -jar ssl-context-builder-*-fatjar.jar vault.properties
Сертификаты будут расположены в хранилищах из параметров
ssl.keystore.locationиssl.truststore.location.
Параметры VaultContextBuilder#
Имя | Описание | Значение по умолчанию |
|---|---|---|
| Расположение хранилища сертификатов, полученных из Vault | |
| Тип хранилища сертификатов, полученных из Vault | JKS |
| Права доступа к файлу хранилища сертификатов в POSIX формате, "644" или "w-r–r–" | |
| Расположение хранилища доверенных сертификатов, полученных из Vault | |
| Тип хранилища доверенных сертификатов, полученных из Vault | JKS |
| Права доступа к файлу хранилища доверенных сертификатов в POSIX формате, "644" или "w-r–r–" | |
| Версия протокола TLS | TLSv1.2 |
| Алгоритм проверки хоста подключения | https |
| Использование библиотеки Conscrypt | false |
| Белый список доверенных DN | |
| Путь до файла с белым списком доверенных сертификатов | |
| Расположение сертификата, полученного из Vault | |
| Расположение приватного ключа сертификата, полученного из Vault | |
| Расположение файла с доверенными сертификатами, полученными из Vault | |
| Права доступа к файлу сертификата в POSIX формате, "644" или "w-r–r–" | |
| Права доступа к файлу приватного ключа сертификата в POSIX формате, "644" или "w-r–r–" | |
| Права доступа к файлу с доверенными сертификатами в POSIX формате, "644" или "w-r–r–" | |
| Класс для расшифровки паролей | ru.sbt.ss.password.BaseEncryptor |
| Ключ для расшифровки паролей конфигурации | |
| Адрес подключения к Vault, обязательный параметр | |
| Тип алгоритма аутентификации в Vault: approle, token, password, certificate, kubernetes | approle |
| Путь до API аутентификации в Vault | |
| Идентификатор роли приложения при | |
| Секрет роли приложения при | |
| Токен для подключения к Vault при | |
| Имя пользователя для подключения к Vault при | |
| Пароль пользователя для подключения к Vault при | |
| Роль для подключения к Vault при | |
| Service account jwt для подключения к Vault при | |
| Включение протокола TLS при подключении к Vault |
|
| Параметры для создания SSLContext при подключении по HTTPS к Vault | |
| Пространство имен в Vault | |
| Режим выпуска сертификатов: pki, kv | pki |
| Путь до API движка выпуска сертификатов в Vault | pki |
| Имя роли в движке выпуска сертификатов в Vault, обязательный параметр | |
| Значение поля CN в выпускаемом сертификате | |
| Электронный адрес владельца сертификата, задается при использовании Secret Manager | |
| Список хостов через запятую для поля SAN сертификата | |
| Список IP адресов через запятую для поля SAN сертификата | |
| Параметр TTL для выпускаемого сертификата | |
| Запрос на сертификат в формате PEM | |
| Путь до файла с запросом на выпуск нового сертификата | |
| Признак формирования SSLContext только с использованием хранилища доверенных сертификатов | |
| Максимальное время ожидания момента валидности полученного сертификата в миллисекундах | 10000 |
| Включение проверки попадания сертификата в список отозванных |
|
| Путь до Key-Value секрета с пароля для хранилищ сертификатов | |
| Имя поля с паролем от ключа | |
| Имя поля с паролем от хранилища сертификатов | |
| Имя поля с паролем от хранилища сертификатов | |
| Путь до Key-Value c pem сертификатом и приватным ключем для него | |
| Имя поля pem сертификата | |
| Имя поля приватного ключа | |
| Путь до Key-Value секрета c доверенными сертификатами в формате PEM | |
| Список ключей в секрете, содержимое которых необходимо загрузить в хранилище доверенных сертификатов, разделитель запятая | |
| Промежуток времени до истечения сертификата для его перевыпуска в формате java.time.Duration | PT0S |
| Префикс идентификатора сертификата CA Vault - при нескольких сертификатах идентификатор будет формироваться объединением префикса и номера сертификата в цепочке | ca |
| Идентификатор ключа и сертификата, выпущенных Vault | key |
| Версия Key-Value хранилища секретов | 2 |
| Количество попыток подключения к Vault | 5 |
| Интервал между попыток подключения к Vault в миллисекундах | 500 |
| Таймаут запроса к Vault в секундах | 3 |
Пример конфигурации с загрузкой параметров из файла#
Любые настройки можно загрузить из файла (в данном примере config/vault.properties):
# 1) Путь до файла с параметрами
ssl.vault.properties.file = config/vault.properties
# 2) ОПЦИОНАЛЬНО Переопределить любые настройки, загруженные из файла конфигурации
# Common name сертификата (CN)
ssl.vault.pki.common.name = OVERRIDE-TEST
# Пути до хранилищ сертификатов, сгенерированных vault
ssl.keystore.location = override-vault-keystore.jks
ssl.truststore.location = override-vault-truststore.jks