1.4.2.2. 使用 Elytron 子系统为应用启用双向 SSL/TLS


  1. 获取或生成您的客户端密钥存储:

    $ keytool -genkeypair -alias client -keyalg RSA -keysize 1024 -validity 365 -keystore client.keystore.jks -dname "CN=client" -keypass secret -storepass secret
    Copy to Clipboard Toggle word wrap
  2. 导出客户端证书:

    keytool -exportcert  -keystore client.keystore.jks -alias client -keypass secret -storepass secret -file /path/to/client.cer
    Copy to Clipboard Toggle word wrap
  3. 为部署的应用程序启用双向 SSL/TLS。

    在 JBoss EAP 中,可以通过使用安全命令或使用 elytron 子系统命令,为已部署的应用启用双向 SSL/TLS。

    1. 使用安全命令.

      security enable-ssl-http-server 命令可用于为部署的应用启用双向 SSL/TLS。

      注意

      以下示例不会验证证书,因为不存在信任链。如果您使用可信证书,则可以无任何问题地验证客户端证书。

      示例:向导使用

      security enable-ssl-http-server --interactive
      
      Please provide required pieces of information to enable SSL:
      Key-store file name (default default-server.keystore): server.keystore.jks
      Password (blank generated): secret
      What is your first and last name? [Unknown]: localhost
      What is the name of your organizational unit? [Unknown]:
      What is the name of your organization? [Unknown]:
      What is the name of your City or Locality? [Unknown]:
      What is the name of your State or Province? [Unknown]:
      What is the two-letter country code for this unit? [Unknown]:
      Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct y/n [y]?
      Validity (in days, blank default): 365
      Alias (blank generated): localhost
      Enable SSL Mutual Authentication y/n (blank n): y
      Client certificate (path to pem file): /path/to/client.cer
      Validate certificate y/n (blank y): n
      Trust-store file name (management.truststore): server.truststore.jks
      Password (blank generated): secret
      
      SSL options:
      key store file: server.keystore.jks
      distinguished name: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
      password: secret
      validity: 365
      alias: localhost
      client certificate: /path/to/client.cer
      trust store file: server.trustore.jks
      trust store password: secret
      Server keystore file server.keystore.jks, certificate file server.pem and server.csr file will be generated in server configuration directory.
      Server truststore file server.trustore.jks will be generated in server configuration directory.
      Do you confirm y/n: y
      Copy to Clipboard Toggle word wrap

      注意

      执行命令后,管理 CLI 将重新加载服务器。

      要完成双向 SSL/TLS 身份验证,您需要将服务器证书导入到客户端信任存储中,并将客户端配置为显示客户端证书。

    2. 使用 elytron 子系统命令.

      在 JBoss EAP 中,您还可以使用 elytron 子系统和 undertow 子系统,为已部署的应用启用双向 SSL/TLS。

      1. 获取或生成密钥存储。

        在 JBoss EAP 中启用双向 SSL/TLS 之前,您必须获取或生成密钥存储、信任存储和您计划使用的证书。

        1. 创建服务器密钥存储:

          /subsystem=elytron/key-store=twoWayKS:add(path=/PATH/TO/server.keystore.jks,credential-reference={clear-text=secret},type=JKS)
          
          /subsystem=elytron/key-store=twoWayKS:generate-key-pair(alias=localhost,algorithm=RSA,key-size=1024,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost")
          
          /subsystem=elytron/key-store=twoWayKS:store()
          Copy to Clipboard Toggle word wrap
          注意

          以上命令使用密钥存储的绝对路径。或者,您可以使用 relative-to 属性指定基础目录变量,而 path 则指定相对路径。

          /subsystem=elytron/key-store=twoWayKS:add(path=server.keystore.jks,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=JKS)
          Copy to Clipboard Toggle word wrap
        2. 导出服务器证书:

          /subsystem=elytron/key-store=twoWayKS:export-certificate(alias=localhost,path=/path/to/server.cer,pem=true)
          Copy to Clipboard Toggle word wrap
      2. 为服务器信任存储创建密钥存储,并将客户端证书导入到服务器信任存储中。

        注意

        以下示例不会验证证书,因为不存在信任链。如果您使用可信证书,则可以无任何问题地验证客户端证书。

        /subsystem=elytron/key-store=twoWayTS:add(path=/path/to/server.truststore.jks,credential-reference={clear-text=secret},type=JKS)
        
        /subsystem=elytron/key-store=twoWayTS:import-certificate(alias=client,path=/path/to/client.cer,credential-reference={clear-text=secret},trust-cacerts=true,validate=false)
        
        /subsystem=elytron/key-store=twoWayTS:store()
        Copy to Clipboard Toggle word wrap
      3. 配置一个 key-manager,以引用您的密钥存储 密钥存储

        /subsystem=elytron/key-manager=twoWayKM:add(key-store=twoWayKS, algorithm="SunX509", credential-reference={clear-text=secret})
        Copy to Clipboard Toggle word wrap
        重要

        您需要了解您使用的 JDK 提供了哪些关键管理器算法。例如,使用 SunJSSE 的 JDK 提供 PKIXSunX509 算法。

        以下示例命令将 SunX509 用于密钥管理器算法。

      4. 配置 trust-manager,以引用您的 truststore 密钥存储

        /subsystem=elytron/trust-manager=twoWayTM:add(key-store=twoWayTS, algorithm="SunX509")
        Copy to Clipboard Toggle word wrap
        重要

        您需要了解您使用的 JDK 提供了哪些关键管理器算法。例如,使用 SunJSSE 的 JDK 提供 PKIXSunX509 算法。

        上面的示例命令将 SunX509 用于密钥管理器算法。

      5. 配置一个 server-ssl-context,以引用您的 key-managertrusted-manager 并启用客户端身份验证:

        /subsystem=elytron/server-ssl-context=twoWaySSC:add(key-manager=twoWayKM, protocols=["TLSv1.2"], trust-manager=twoWayTM, need-client-auth=true)
        Copy to Clipboard Toggle word wrap
        重要

        您需要确定您要支持的 SSL/TLS 协议。上面的示例命令使用 TLSv1.2。您可以使用 cipher-suite-filter 参数指定允许哪些密码套件,以及使用-cipher-suites-order 参数来执行服务器密码套件顺序。使用-cipher-suites-order 属性默认设置为 true。这与旧 的安全 子系统行为不同,后者默认为遵从客户端密码套件顺序。

        警告

        红帽建议显式禁用 SSLv2、SSLv3 和 TLSv1.0,以便在所有受影响的软件包中明确禁用 TLSv1.1 或 TLSv1.2。

      6. 检查并查看 https-listener 是否配置为使用传统安全域进行其 SSL 配置。

        /subsystem=undertow/server=default-server/https-listener=https:read-attribute(name=security-realm)
        {
            "outcome" => "success",
            "result" => "ApplicationRealm"
        }
        Copy to Clipboard Toggle word wrap

        以上命令显示 https-listener 已配置为使用 ApplicationRealm 传统安全域进行 SSL 配置。Undertow 无法同时引用 elytron 子系统中的传统安全域和 ssl-context。因此,您必须删除对旧安全域的引用。

        注意

        如果未定义 结果,则无需在下一步中移除对安全域的引用。

      7. 移除对传统安全域的引用,并将 https-listener 更新为从 Elytron 使用 ssl-context

        注意

        HTTPS-listener 必须始终配置 security-realm or ssl-context。在两种配置之间更改时,命令必须以单批形式执行,如下所示:

        batch
        /subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm)
        /subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context, value=twoWaySSC)
        run-batch
        Copy to Clipboard Toggle word wrap
      8. 重新加载服务器:

        reload
        Copy to Clipboard Toggle word wrap
        注意

        要完成双向 SSL/TLS 身份验证,您需要将服务器证书导入到客户端信任存储中,并将客户端配置为显示客户端证书。

        $ keytool -importcert -keystore client.truststore.jks -storepass secret -alias localhost -trustcacerts -file /path/to/server.cer
        Copy to Clipboard Toggle word wrap
      9. 将您的客户端配置为使用客户端证书。

        您需要将客户端配置为向服务器提供可信客户端证书,以完成双向 SSL/TLS 身份验证。例如,如果使用浏览器,您需要将可信证书导入到浏览器的信任存储中。

        此流程强制采用双向 SSL/TLS,但不更改应用的原始身份验证方法。

        如果要更改原始身份验证方法,请参阅如何为 JBoss EAP 配置身份管理中的通过证书配置身份验证

现在应用程序启用了双向 SSL/TLS。

注意

您可以使用 disable- ssl-http-server 命令为已部署的应用程序禁用 双向 SSL/TLS。

security disable-ssl-http-server
Copy to Clipboard Toggle word wrap

此命令不会删除 Elytron 资源。它将系统配置为使用 ApplicationRealm 传统安全域进行 SSL 配置。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat