Аутентификация по сертификату в веб консоль ActiveMQ Artemis
Блоги
Навигационные полоски
В мире SSH аутентификация по открытому ключу используется очень широко. Напротив, для веб приложений такое решение применяется редко, но иногда бывает востребованно. В этой статье рассмотрим настройку веб консоли ActiveMQ Artemis для аутентификации пользователей по сертификату.
Начнём, пожалуй...
Скачиваем и распаковываем artemis.
(https://activemq.apache.org/components/artemis/download/)
Переходим в apache-artemis-x.x.x/bin и создаём новый экземпляр брокера:
artemis create broker01 --require-login --user entaxy --password entaxy --http-port 8443 --ssl-key ${artemis.instance}/etc/server.p12 --ssl-key-password server1234 --use-client-auth --ssl-trust ${artemis.instance}/etc/server.p12 --ssl-trust-password server1234
(для удобства поддержки/бэкапирования промышленной или любой серверной установке удобнее создавать брокер рядом с инсталлятором командой: artemis create ../../broker01
и далее остальные параметры)
Далее переходим в apache-artemis-x.x.x/bin/broker01/etc и все дальнейшие манипуляции производим в этой директории.
Если экземпляр брокера у Вас уже есть, то надо в конфиге включить поддержку HTTPS и клиентской аутентификации.
Для этого открываем bootstrap.xml
и добавляем настройку HTTPS с указанием хранилища ключей, доверенного хранилища сертификатов и включенной аутентификацией клиента:
<web bind="https://localhost:8443" path="web" keyStorePath="${artemis.instance}/etc/server.p12" keyStorePassword="server1234" trustStorePath="${artemis.instance}/etc/server.p12" trustStorePassword="server1234" clientAuth="true"> <app url="activemq-branding" war="activemq-branding.war"/>
<app url="artemis-plugin" war="artemis-plugin.war"/>
<app url="console" war="console.war"/>
</web>
Далее необходимо создать пары ключей для сервера и для клиента.
Создаём хранилище ключей для сервера:
keytool -genkeypair -keyalg RSA -keysize 2048 -validity 3650 -alias serverKey -storepass server1234 -keypass server1234 -keystore server.p12 -deststoretype pkcs12 -dname "CN=artemis" -ext "SAN:c=DNS:localhost,IP:127.0.0.1"
Создаём хранилище ключей для клиента (в нашем случае для браузера):
keytool -genkeypair -keyalg RSA -keysize 2048 -validity 3650 -alias clientkey -storepass client1234 -keypass client1234 -keystore client.p12 -deststoretype pkcs12 -dname "CN=admin, OU=integration, O=emdev, C=ru"
Выгружаем публичный ключ клиента в отдельный файл:
keytool -export -rfc -keystore client.p12 -storepass client1234 -alias clientkey -file client.cer
И сохраняем этот ключ в доверенном хранилище сервера (в нашем случае это то же хранилище ключей - server.p12, но может быть и в отдельном хранилище):
keytool -import -trustcacerts -keystore server.p12 -storepass server1234 -alias clientkey -file client.cer
Проверяем DN клиентского сертификата:
keytool -printcert -file client.cer
Из вывода копируем значение поля Owner: CN=admin, OU=integration, O=emdev, C=ru
Открываем файл artemis-users.properties
и меняем строчку entaxy = ENC(...)
на
entaxy = CN=admin, OU=integration, O=emdev, C=ru
Открываем файл login.config
, заменяем
activemq {
org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule required
debug=false
reload=true
org.apache.activemq.jaas.properties.user="artemis-users.properties"
org.apache.activemq.jaas.properties.role="artemis-roles.properties";
};
на
activemq {
org.apache.activemq.artemis.spi.core.security.jaas.TextFileCertificateLoginModule required
debug=true
reload=true
org.apache.activemq.jaas.textfiledn.user="cert-users.properties"
org.apache.activemq.jaas.textfiledn.role="cert-roles.properties";
};
Можем запускать брокер
../bin/artemis run
..\bin\artemis run (для windows)
Остаётся загрузить клиентское хранилище ключей в браузер и перейти по адресу https://localhost:8443/console
Проверено на версии 2.19.1 и 2.32.0
Два модуля аутентификации.
При желании можно оставить PropertiesLoginModule
и не менять пользователей в artemis-users.properties
.
Для этого создаём новый файл cert-users.properties
и вставляем туда произвольное имя и DN из сертификата:
entaxy = CN=admin, OU=integration, O=emdev, C=ru
Создаём файл cert-roles.properties
и вставляем роль и имя из файла cert-users.properties
:
amq = entaxy
Открываем файл login.config
, заменяем required
на sufficient
для PropertiesLoginModule
и добавляем новый модуль TextFileCertificateLoginModule
:
activemq {
org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule sufficient
debug=false
reload=true
org.apache.activemq.jaas.properties.user="artemis-users.properties"
org.apache.activemq.jaas.properties.role="artemis-roles.properties";
org.apache.activemq.artemis.spi.core.security.jaas.TextFileCertificateLoginModule sufficient
debug=true
reload=true
org.apache.activemq.jaas.textfiledn.user="cert-users.properties"
org.apache.activemq.jaas.textfiledn.role="cert-roles.properties";
};
Альтернативно можно в файле login.config
создать новый realm
(activemq-cert
) с модулем TextFileCertificateLoginModule
activemq {
org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule required
debug=false
reload=true
org.apache.activemq.jaas.properties.user="artemis-users.properties"
org.apache.activemq.jaas.properties.role="artemis-roles.properties";
};
activemq-cert {
org.apache.activemq.artemis.spi.core.security.jaas.TextFileCertificateLoginModule required
debug=true
reload=true
org.apache.activemq.jaas.textfiledn.user="cert-users.properties"
org.apache.activemq.jaas.textfiledn.role="cert-roles.properties";
};
И указать его имя в атрибуте certificate-domain
тега jaas-security
в файле bootstrap.xml
:
<jaas-security domain="activemq" certificate-domain="activemq-cert"/>
Или в файле artemis.profile.cmd
переопределить realm
с -Dhawtio.realm=activemq
на -Dhawtio.realm=activemq-cert
- 6.2 (12)
- 7.0 (12)
- activiti (14)
- apache camel (6)
- camel (11)
- devcon (6)
- devops (5)
- emdev (9)
- emdev limited (9)
- entaxy (13)
- esb (10)
- fuse (5)
- gartner (7)
- google apps (6)
- jboss (5)
- liferay (143)
- liferay 7.1 (11)
- liferay dxp (11)
- liferay7 (12)
- openshift (8)
- osgi (5)
- redhat (15)
- rest (6)
- wso2 (70)
- wso2 api-m (10)
- wso2 ei (8)
- wso2ei (5)
- wso2esb (7)
- wso2is (8)
- емдев (11)
Сайт использует файлы cookie. Они позволяют узнавать вас и получать информацию о вашем пользовательском опыте. Это нужно, чтобы улучшать сайт. Посещая страницы сайта и предоставляя свои данные, вы позволяете нам предоставлять их сторонним партнерам. Если вы согласны, продолжайте пользоваться сайтом. Если нет – установите специальные настройки в браузере или обратитесь в техподдержку.