3.4. 配置安全域以使用基于证书的身份验证


JBoss EAP 让您能够通过安全域使用基于证书的身份验证来保护 Web 应用或 Jakarta 企业 Beans。

重要

在配置基于证书的身份验证之前,您需要启用并配置 用于应用的双Way SSL/TLS,这需要为 JBoss EAP 实例以及访问 Web 应用或安全域保护的 Jakarta Enterprise Beans 配置 X509 证书。

在配置了证书、信任存储和双向 SSL/TLS 后,您可以继续配置使用基于证书的身份验证的安全域,配置应用使用该安全域,并将客户端配置为使用客户端证书。

3.4.1. 使用基于证书的身份验证创建安全域

要创建使用基于证书的身份验证的安全域,您需要指定信任存储以及 证书 登录模块或其子类。

truststore 必须包含用于身份验证的任何可信客户端证书,或者必须包含用于为客户端的证书签名的证书颁发机构的证书。login 模块用于利用已配置的信任存储来验证客户端提供的证书。整个安全域还必须提供一种方式,在角色通过身份验证后将角色映射到主体。证书登录模块本身不会将任何角色信息映射到主体,但也可与另一个登录模块结合使用。另外,证书登录模块的两个子类( CertificateRolesDatabaseCertificate )提供了在角色验证后将角色映射到主体的方法。以下示例演示了如何使用 CertificateRoles 登录模块为安全域配置基于证书的身份验证。

警告

在进行身份验证时,安全域将使用客户端在建立双向 SSL/TLS 时提供的相同证书。因此,客户端必须使用相同的 BOTH 双向 SSL/TLS 证书,并使用应用程序或 Jakarta Enterprise Beans 进行基于证书的身份验证。

使用基于证书的身份验证的安全域示例

/subsystem=security/security-domain=cert-roles-domain:add

/subsystem=security/security-domain=cert-roles-domain/jsse=classic:add(truststore={password=secret, url="/path/to/server.truststore.jks"}, keystore={password=secret, url="/path/to/server.keystore.jks"}, client-auth=true)

/subsystem=security/security-domain=cert-roles-domain/authentication=classic:add

/subsystem=security/security-domain=cert-roles-domain/authentication=classic/login-module=CertificateRoles:add(code=CertificateRoles, flag=required, module-options=[ securityDomain="cert-roles-domain", rolesProperties="${jboss.server.config.dir}/cert-roles.properties",password-stacking="useFirstPass", verifier="org.jboss.security.auth.certs.AnyCertVerifier"])

注意

上例使用 CertificateRoles login 模块来处理身份验证并将角色映射到经过身份验证的主体。它通过使用 rolesProperties 属性引用属性文件。此文件使用以下格式列出了用户名和角色:

user1=roleA
user2=roleB,roleC
user3=

由于提供的证书中的用户名作为 DN 显示,例如 CN=valid-client、OU=JBoss、O=红帽、L=Raleigh、ST=NC、C=US,您必须在使用属性文件时转义特殊字符,如 = 和空格:

角色属性文件示例

CN\=valid-client,\ OU\=JBoss,\ O\=Red\ Hat,\ L\=Raleigh,\ ST\=NC,\ C\=US=Admin

要查看证书的 DN:

$ keytool -printcert -file valid-client.crt
Owner: CN=valid-client, OU=JBoss, O=Red Hat, L=Raleigh, ST=NC, C=US
...

与将应用配置为使用其他形式身份验证的安全域类似,您需要同时正确配置 jboss-web.xmlweb.xml 文件。

对于 jboss-web.xml,添加对您为基于证书的身份验证配置的安全域的引用。

jboss-web.xml 示例

<jboss-web>
  <security-domain>cert-roles-domain</security-domain>
</jboss-web>

对于 web.xml,将 < login-config> 中的 <auth-method > 属性设置为 CLIENT-CERT。您还需要定义 <security-constraint> 和 <security-roles>

web.xml 示例

<web-app>
  <!-- URL for secured portion of application-->
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>secure</web-resource-name>
      <url-pattern>/secure/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>All</role-name>
    </auth-constraint>
  </security-constraint>

  <!-- Security roles referenced by this web application -->
  <security-role>
    <description>The role that is required to log in to the application</description>
    <role-name>All</role-name>
  </security-role>

  <login-config>
    <auth-method>CLIENT-CERT</auth-method>
    <realm-name>cert-roles-domain</realm-name>
  </login-config>
</web-app>

3.4.3. 配置客户端

客户端若要针对通过基于证书的身份验证保护的应用进行身份验证,客户端需要访问 JBoss EAP 实例的信任存储中包含的客户端证书。例如,如果使用浏览器访问应用,客户端需要将可信证书导入到浏览器的信任存储中。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部