2.5. 使用证书配置身份验证
您必须先配置双向 SSL,然后才能设置基于证书的身份验证。有关配置双向 SSL 的详情,请参考《如何配置服务器安全性指南 》的 Elytron Subsystem 部分,为应用启用双向 SSL/TLS。
配置
密钥存储域.
/subsystem=elytron/key-store-realm=ksRealm:add(key-store=twoWayTS)
您必须为这个域配置一个包含客户端证书的信任存储。身份验证过程使用客户端在双向 SSL 握手期间提供的相同证书。
创建解码器。
您需要创建一个
x500-attribute-principal-decoder
来解码您从证书中获得的主体。以下示例将根据第一个CN
值对主体进行解码。/subsystem=elytron/x500-attribute-principal-decoder=CNDecoder:add(oid="2.5.4.3",maximum-segments=1)
例如,如果完整
DN
为CN=client,CN=client=certificate,DC=example,DC=jboss,DC=org
,CNDecoder
会将该主体解码为客户端
。此解码主体用作别名
值,用于在ksRealm
中配置的信任存储中查找证书。重要已解码的主体 MUST 是您在服务器信任存储中为客户端证书设置的
别名
值。- 另外,您还可以使用主题替代名称扩展来配置一个证据解码器,以将主题替代名称用作主体。 如需更多信息,请参阅如何配置服务器安全指南中的 X.509 证书配置带有主题备用名称 扩展的 X.509 证书。
添加用于分配角色的
常量角色映射器
。例如,使用 constant
-role-mapper
将角色分配给ksRealm
中的主体,但也可以使用其他方法。/subsystem=elytron/constant-role-mapper=constantClientCertRole:add(roles=[Admin,Guest])
配置
安全域.
/subsystem=elytron/security-domain=exampleCertSD:add(realms=[{realm=ksRealm}],default-realm=ksRealm,permission-mapper=default-permission-mapper,principal-decoder=CNDecoder,role-mapper=constantClientCertRole)
在
undertow
子系统中配置application-security-domain
。/subsystem=undertow/application-security-domain=exampleApplicationDomain:add(security-domain=exampleCertSD)
注意可以通过导航到 Configuration
Subsystems Web(Under tow
)→ Application Security Domain,使用管理控制台配置 undertow 子系统中的application-security-domain
。更新
server-ssl-context.
/subsystem=elytron/server-ssl-context=twoWaySSC:write-attribute(name=security-domain,value=exampleCertSD) /subsystem=elytron/server-ssl-context=twoWaySSC:write-attribute(name=authentication-optional, value=true) reload
配置应用程序的
web.xml
和jboss-web.xml
。您的
web.xml
和jboss-web.xml
必须更新为使用您在 JBoss EAP 中配置的application-security-domain
。例如,将 Web 应用程序配置为使用 Elytron 或传统安全性进行身份验证。此外,您需要更新
web.xml
,以使用CLIENT-CERT
作为其身份验证方法。<login-config> <auth-method>CLIENT-CERT</auth-method> <realm-name>exampleApplicationDomain</realm-name> </login-config>