Взаимная SSL-аутентификация с несколькими доменами безопасности в WildFly 10 - PullRequest
0 голосов
/ 07 февраля 2019

Идея заключается в том, чтобы настроить различные приложения на одном сервере WildFly, при этом каждое приложение имеет свой собственный домен безопасности для аутентификации.

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

Однако я не уверен, возможно ли это.Учитывая, что в подсистеме undertow имеется только один https-listener, это относится к одному security-realm.Эта область безопасности, по-видимому, обеспечивает идентификацию сервера, независимо от того, что настроено в домене безопасности приложения.

У меня есть защита на основе ролей, но хранилище ключей и доверенных сертификатов, кажется, ненастроен правильно на security-domain, только на уровне security-realm.Авторизация на основе ролей работает, но ссылка на область безопасности кажется странной для настройки домена безопасности.

Можно ли установить взаимную аутентификацию SSL с различными хранилищами ключей и доверенных сертификатов для различных доменов безопасности?


У меня идет следующая установка:

У меня есть https-listener, который указывает на ApplicationRealm.

<https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/>

ApplicationRealm имеет свойИдентификатор ssl настроен и требует аутентификации для использования в домене безопасности.

<security-realm name="ApplicationRealm">
    <server-identities>
        <ssl>
            <keystore path="ssl/server.jks" relative-to="jboss.server.config.dir" keystore-password="secret" alias="server" key-password="secret"/>
        </ssl>
    </server-identities>
    <authentication>
        <truststore path="/cert-auth/server/ServerTruststore.jks" relative-to="jboss.server.config.dir" keystore-password="secret"/>
        <local default-user="$local" allowed-users="*" skip-group-loading="true"/>
        <properties path="application-users.properties" relative-to="jboss.server.config.dir"/>
    </authentication>
</security-realm>

Домен безопасности затем настраивается на использование CertificateRoles и добавляет роль по умолчанию, чтобы разрешить доступ к конечным точкам, которые ненужна определенная роль.

<security-domain name="client_cert_domain" cache-type="default">
    <authentication>
        <login-module code="CertificateRoles" flag="required">
            <module-option name="password-stacking" value="useFirstPass"/>
            <module-option name="verifier" value="org.jboss.security.auth.certs.AnyCertVerifier"/>
            <module-option name="securityDomain" value="client_cert_domain"/>
            <module-option name="rolesProperties" value="file:${jboss.server.config.dir}/application-roles.properties"/>
        </login-module>
        <login-module code="Identity" flag="required">
            <module-option name="password-stacking" value="useFirstPass"/>
            <module-option name="roles" value="default"/>
        </login-module>
    </authentication>
    <jsse keystore-password="secret" keystore-url="file:${jboss.server.config.dir}/cert-auth/server/ServerKeystore.jks" truststore-password="secret" truststore-url="file:${jboss.server.config.dir}/cert-auth/server/ServerTruststore.jks" client-auth="true"/>
</security-domain>

Я ожидаю, что настроенное jsse хранилище ключей и доверенных сертификатов вступит в силу в домене безопасности.Но, похоже, это мало что делает, и все это происходит в сфере безопасности?

Наконец приложение настроено с простыми jboss-web.xml и web.xml.

jboss-web.xml

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web version="10.0"
           xmlns="http://www.jboss.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_10_0.xsd">
    <context-root>cert-auth</context-root>
    <security-domain>client_cert_domain</security-domain>
</jboss-web>

web.xml

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <security-constraint>
        <display-name>SSL Authentication Constraint</display-name>
        <web-resource-collection>
            <web-resource-name>all</web-resource-name>
            <url-pattern>/secured/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>default</role-name>
        </auth-constraint>
    </security-constraint>

    <security-role>
        <role-name>default</role-name>
    </security-role>

    <login-config>
        <auth-method>CLIENT-CERT</auth-method>
        <realm-name>client_cert_domain</realm-name>
    </login-config>


    <servlet-mapping>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>
...