VaultSslContextBuilderPlugin#
Описание плагина#
Плагин позволяет получать сертификаты из HashiCorp Vault и формировать ssl-контекст. Плагин также поддерживает формирование ssl-контекста на основе хранилищ сертификатов-файлов.
Подключение плагина#
В classpath SMBX-брокера должны быть добавлен jar-файл плагина.
В файле конфигурации broker.xml в части настройки плагинов необходимо добавить следующие настройки:
<broker-plugins>
...
<broker-plugin class-name="ru.sbt.ss.artemis.ssl.context.factory.plugin.VaultSslContextPlugin">
<property key="CONFIGURATION_FILE_LOCATION" value="path_to_config_file"/> - путь до конфигурационного файла с настройками для подключения к HashiCorp Vault и создания ssl-context
<property key="FACTORY_PRIORITY" value="12"/> - необязательный параметр, устанавливает приоритетность фабрики из плагина. Стандартное значение: 20
<property key="WEB_CONSOLE_PORT" value="1234"/> - необязательный параметр, определяет на каком порту будет развернута web-консоль SMBX. Если настройка не указана, то значение по умолчанию — 8161
<property key="WEB_CONSOLE_CLIENT_AUTH" value="false"/> - необязательный параметр, значение по умолчанию — true
</broker-plugin>
...
</broker-plugins>
В конфигурационном файле должны быть прописаны настройки, указанные в таблицах ниже.
В настройке аксептора необходимо обязательно явно указать параметр
keyStorePath, который должен совпадать со значением, указанным в настройкеssl.keystore.location, находящейся в конфигурационном файле данного плагина.
<acceptors>
<acceptor name="acceptorName">tcp://host:port?
...
sslEnabled=true;
enabledProtocols=TLSv1.2,TLSv1.3;
keyStorePath=path_to_keystore_vault.jks;
verifyHost=false;
needClientAuth=true;
...
</acceptor>
</acceptors>
<connectors>
<connector name="connectorName">tcp://host:port?...sslEnabled=true;enabledProtocols=TLSv1.2,TLSv1.3;verifyHost=false</connector>
</connectors>
Параметры для формирования ssl-контекста c использованием HashiCorp Vault#
Имя |
Описание |
Значение по умолчанию |
|---|---|---|
ssl.keystore.location |
Расположение хранилища сертификатов, полученных из Vault |
|
ssl.keystore.type |
Тип хранилища сертификатов, полученных из Vault |
JKS |
ssl.keystore.mode |
Права доступа к файлу хранилища сертификатов в POSIX формате, "644" или "w-r–r–" |
|
ssl.truststore.location |
Расположение хранилища доверенных сертификатов, полученных из Vault |
|
ssl.truststore.type |
Тип хранилища доверенных сертификатов, полученных из Vault |
JKS |
ssl.truststore.mode |
Права доступа к файлу хранилища доверенных сертификатов в POSIX формате, "644" или "w-r–r–" |
|
ssl.protocol |
Версия протокола TLS |
TLSv1.2 |
ssl.endpoint.identification.algorithm |
Алгоритм проверки хоста подключения |
https |
ssl.conscrypt |
Использование библиотеки Conscrypt |
false |
ssl.allowed.dn |
Белый список доверенных DN |
|
ssl.allowed.dn.file |
Путь до файла с белым списком доверенных сертификатов |
|
ssl.keystore.certificate.chain.location |
Расположение сертификата, полученного из Vault |
|
ssl.keystore.key.location |
Расположение приватного ключа сертификата, полученного из Vault |
|
ssl.truststore.certificates.location |
Расположение файла с доверенными сертификатами, полученными из Vault |
|
ssl.keystore.certificate.chain.mode |
Права доступа к файлу сертификата в POSIX формате, "644" или "w-r–r–" |
|
ssl.keystore.key.mode |
Права доступа к файлу приватного ключа сертификата в POSIX формате, "644" или "w-r–r–" |
|
ssl.truststore.certificates.mode |
Права доступа к файлу с доверенными сертификатами в POSIX формате, "644" или "w-r–r–" |
|
security.encoding.class |
Класс для расшифровки паролей |
ru.sbt.ss.password.BaseEncryptor |
security.encoding.key |
Ключ для расшифровки паролей конфигурации |
|
ssl.vault.address |
Адрес подключения к Vault, обязательный параметр |
|
ssl.vault.auth.type |
Тип алгоритма аутентификации в Vault: approle, token, password, certificate, kubernetes |
approle |
ssl.vault.auth.mount |
Путь до API аутентификации в Vault |
|
ssl.vault.auth.role.id |
Идентификатор роли приложения при ssl.vault.auth.type=approle |
|
ssl.vault.auth.secret.id |
Секрет роли приложения при ssl.vault.auth.type=approle |
|
ssl.vault.auth.token |
Токен для подключения к Vault при ssl.vault.auth.type=token |
|
ssl.vault.auth.username |
Имя пользователя для подключения к Vault при ssl.vault.auth.type=password |
|
ssl.vault.auth.password |
Пароль пользователя для подключения к Vault при ssl.vault.auth.type=password |
|
ssl.vault.auth.rolename |
Роль для подключения к Vault при ssl.vault.auth.type=kubernetes |
|
ssl.vault.auth.jwt |
Service account jwt для подключения к Vault при ssl.vault.auth.type=kubernetes. Значение с префиксом "env:" - будет браться из переменных среды, с префиксом "file:" - будет браться из файла |
|
ssl.vault.tls.enable |
Включение протокола TLS при подключении к Vault |
true |
ssl.vault.tls.<параметр SSLContextBuilder> |
Параметры для создания SSLContext при подключении по HTTPS к Vault |
|
ssl.vault.namespace |
Пространство имен в Vault |
|
ssl.vault.pki.mode |
Режим выпуска сертификатов: pki, kv |
pki |
ssl.vault.pki.mount |
Путь до API движка выпуска сертификатов в Vault |
pki |
ssl.vault.pki.role.name |
Имя роли в движке выпуска сертификатов в Vault, обязательный параметр |
|
ssl.vault.pki.common.name |
Значение поля CN в выпускаемом сертификате |
|
ssl.vault.pki.email |
Электронный адрес владельца сертификата, задается при использовании Secret Manager |
|
ssl.vault.pki.alt.names |
Список хостов через запятую для поля SAN сертификата |
|
ssl.vault.pki.alt.ip |
Список IP адресов через запятую для поля SAN сертификата |
|
ssl.vault.pki.ttl |
Параметр TTL для выпускаемого сертификата |
|
ssl.vault.pki.csr |
Запрос на сертификат в формате PEM |
|
ssl.vault.pki.csr.path |
Путь до файла с запросом на выпуск нового сертификата |
|
ssl.vault.pki.trust.only |
Признак формирования SSLContext только с использованием хранилища доверенных сертификатов |
|
ssl.vault.pki.max.wait.time |
Максимальное время ожидания момента валидности полученного сертификата в миллисекундах |
10000 |
ssl.vault.pki.crl.enable |
Включение проверки попадания сертификата в список отозванных |
true |
ssl.vault.secret.path |
Путь до Key-Value секрета с пароля для хранилищ сертификатов ssl.keystore.location и ssl.truststore.location |
|
ssl.vault.secret.key |
Имя поля с паролем от ключа |
|
ssl.vault.secret.keystore |
Имя поля с паролем от хранилища сертификатов ssl.keystore.location |
|
ssl.vault.pem.path |
Путь до Key-Value c pem сертификатом и приватным ключем для него |
|
ssl.vault.pem.name |
Имя поля pem сертификата |
|
ssl.vault.pem.key |
Имя поля приватного ключа |
|
ssl.vault.secret.truststore |
Имя поля с паролем от хранилища сертификатов ssl.truststore.location |
|
ssl.vault.before.expire |
Промежуток времени до истечения сертификата для его перевыпуска в формате java.time.Duration |
PT0S |
ssl.vault.alias.ca |
Префикс идентификатора сертификата CA Vault - при нескольких сертификатах идентификатор будет формироваться объединением префикса и номера сертификата в цепочке |
ca |
ssl.vault.alias.key |
Идентификатор ключа и сертификата, выпущенных Vault |
key |
ssl.vault.engine.version |
Версия Key-Value хранилища секретов |
2 |
ssl.vault.retries |
Количество попыток подключения к Vault |
5 |
ssl.vault.retry.interval |
Интервал между попыток подключения к Vault в миллисекундах |
500 |
ssl.vault.timeout |
Таймаут запроса к Vault в секундах |
3 |
Параметры для формирования ssl-контекста на основе хранилищ сертификатов-файлов (без использования HashiCorp Vault)#
Имя |
Описание |
Значение по умолчанию |
|---|---|---|
ssl.key.password |
Пароль от ключа |
|
ssl.keystore.location |
Расположение хранилища сертификатов |
|
ssl.keystore.password |
Пароль от хранилища сертификатов |
|
ssl.keystore.type |
Тип хранилища сертификатов |
JKS |
ssl.truststore.location |
Расположение хранилища доверенных сертификатов |
|
ssl.truststore.password |
Пароль от хранилища доверенных сертификатов |
|
ssl.truststore.type |
Тип хранилища доверенных сертификатов |
JKS |
ssl.protocol |
Версия протокола TLS |
TLSv1.2 |
ssl.endpoint.identification.algorithm |
Алгоритм проверки host подключения |
https |
ssl.conscrypt |
Использование библиотеки Conscrypt |
false |
ssl.allowed.dn |
Белый список доверенных DN |
|
ssl.allowed.dn.file |
Путь до файла с белым списком доверенных сертификатов |
|
security.encoding.class |
Класс для расшифровки паролей |
ru.sbt.ss.password.DefaultEncoder |
security.encoding.key |
Ключ для расшифровки паролей конфигурации |
|
ssl.keystore.certificate.chain.location |
Расположение сертификата, полученного из Vault |
|
ssl.keystore.key.location |
Расположение приватного ключа сертификата, полученного из Vault |
|
ssl.truststore.certificates.location |
Расположение файла с доверенными сертификатами, полученными из Vault |
Дополнительный параметр для получения cluster-password из HashiCorp Vault#
Имя |
Описание |
Значение по умолчанию |
|---|---|---|
secret.artemis.cluster.password |
Пароль от Artemis-кластера |
– |
Использование
secret.artemis.cluster.passwordсовместно с настройками для формирования ssl-контекста с использованиемHashiCorp Vault:secret.artemis.cluster.password=vault:keyPath:keySecret, гдеvault— обязательный префикс,keyPath— путь до секрета,keySecret— имя поля с кластерным паролем.
Признаком формирования ssl-контекста без использования HashiCorp Vault является отсутствие настроек с префиксом ssl.vault (достаточно отсутствие настройки ssl.vault.address).
Если пароль от кластера задается в настройках данного плагина, то настройка <cluster-password>...</cluster-password>, находящаяся в broker.xml, должна быть представлена в следующем виде:
<cluster-password>vault:secret.artemis.cluster.password</cluster-password>
Особенности применения#
При использовании данного плагина необходимо удалять настройку c тэгом <web>...</web> в файле bootstrap.xml.