2.3. 使用 Elytron 为域控制器配置 SSL 或 TLS

在受管域中配置 JBoss EAP 实例,以在 master 域控制器和主机控制器之间相互通信时,使用安全套接字层(SSL)或传输层(TLS)。

重要

当您将 SSL 或 TLS 配置为在受管域中 JBoss EAP 实例之间使用时,每个实例可以具有客户端或服务器角色,具体取决于交互。这包括所有主机控制器和域控制器。为获得最佳结果,请在端点之间设置双向 SSL 或 TLS。

先决条件

  • 生成并配置了所有必要的证书和密钥存储。要为管理接口启用双向 SSL/TLS,请参阅使用安全命令启用双向 SSL/TLS,或使用 Elytron 子系统命令启用双向 SSL/TLS

    注意

    要在端点之间设置双向 SSL 或 TLS,您需要为主域控制器和每一主机控制器生成和配置证书和密钥存储。

    另外,您必须将 master 域控制器的证书导入到每个主机控制器密钥存储中。此外,将每个主机控制器证书导入到主域控制器密钥存储中。

流程

  1. 在 master 域控制器上添加用户。如果您重新使用基于文件的用户和组身份验证机制,请运行 EAP_HOME/bin/add-user.sh 脚本。提示时,添加用户名、密码和其他配置。

    注意

    管理用户的域的默认名称为 ManagementRealm。当 add-user 实用程序提示输入域名时,您必须接受默认域名;即,除非您切换到不同的域。

    注意

    您必须在主域控制器上添加用户,以便从控制器进行身份验证。

    注意

    服务器将属性文件的内容缓存在内存中。但是,服务器会检查每个身份验证请求上属性文件修改的时间,并在更新时间时重新加载。因此,add-user 实用程序的任何更改都会立即应用到任何正在运行的服务器。

  2. 将主域控制器配置为使用 SSL 或 TLS。以下示例显示了为服务器密钥存储和信任存储配置域控制器 密钥key-managertrust-managerserver-ssl-context 的命令。

    /host=master/subsystem=elytron/key-store=twoWayKS:add(path=/path/to/server.keystore.jks,credential-reference={clear-text=secret},type=JKS)
    
    /host=master/subsystem=elytron/key-store=twoWayTS:add(path=/path/to/server.truststore.jks,credential-reference={clear-text=secret},type=JKS)
    
    /host=master/subsystem=elytron/key-manager=twoWayKM:add(key-store=twoWayKS,credential-reference={clear-text=secret})
    
    /host=master/subsystem=elytron/trust-manager=twoWayTM:add(key-store=twoWayTS)
    
    /host=master/subsystem=elytron/server-ssl-context=twoWaySSC:add(key-manager=twoWayKM,protocols=["TLSv1.2"],trust-manager=twoWayTM,want-client-auth=true,need-client-auth=true)
    
    /host=master/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=twoWaySSC)
    重要

    红帽没有在前面的命令中指定 algorithm 属性,因为 Elytron 子系统使用 KeyManagerFactory.getDefaultAlgorithm()TrustManagerFactory.getDefaultAlgorithm() 来确定算法。但是,您可以指定 algorithm 属性。要指定 algorithm 属性,您需要知道您使用的 JDK 提供了哪些关键管理器算法。例如,使用 SunJSSE 的 JDK 提供了 PKIXSunX509 算法。

    在上一命令中,您可以指定 SunX509 作为密钥管理器算法属性,将 PKIX 指定为信任管理器算法属性。

    此外,您需要确定您要支持的 HTTPS 协议。此流程中的示例使用 TLSv1.2

    您可以使用 cipher-suite-filter 指定密码套件,使用-cipher-suites-order 参数来遵循服务器密码套件顺序。use-cipher-suites-order 属性默认设置为 true。这与旧的 security 子系统行为不同,它默认为遵循客户端密码套件顺序。

  3. 在每个从属主机控制器上配置身份验证上下文和域控制器位置。以下示例配置显示了 localhost 上存在的域控制器。

    注意

    您必须为您的环境指定正确的管理用户、密码和域控制器位置。

    /host=slave1/subsystem=elytron/authentication-context=slaveHostSSLContext:add()
    
    /host=slave1/subsystem=elytron/authentication-configuration=slaveHostSSLConfiguration:add()
    
    /host=slave1/subsystem=elytron/authentication-configuration=slaveHostSSLConfiguration:write-attribute(name=sasl-mechanism-selector,value=DIGEST-MD5)
    
    /host=slave1/subsystem=elytron/authentication-configuration=slaveHostSSLConfiguration:write-attribute(name=authentication-name,value=slave)
    
    /host=slave1/subsystem=elytron/authentication-configuration=slaveHostSSLConfiguration:write-attribute(name=realm,value=ManagementRealm)
    
    /host=slave1/subsystem=elytron/authentication-configuration=slaveHostSSLConfiguration:write-attribute(name=credential-reference,value={clear-text=password1!})
    
    /host=slave1/subsystem=elytron/authentication-context=slaveHostSSLContext:write-attribute(name=match-rules,value=[{match-host=localhost,authentication-configuration=slaveHostSSLConfiguration}]
    
    /host=slave1:write-remote-domain-controller(host=localhost,port=9990,protocol=remote,authentication-context=slaveHostSSLContext)
  4. 将每个从属主机控制器配置为使用 SSL 或 TLS。以下命令为服务器密钥存储和信任存储配置从属主机控制器 key-storekey-managertrust-managerclient-ssl-contextauthentication-context。此外,示例中显示了一个在 localhost 上存在的域控制器。

    注意

    您必须为您的环境指定正确的域控制器位置。

    /host=slave1/subsystem=elytron/key-store=twoWayKS:add(path=/path/to/client.keystore.jks,credential-reference={clear-text=secret},type=JKS)
    
    /host=slave1/subsystem=elytron/key-store=twoWayTS:add(path=/path/to/client.truststore.jks,credential-reference={clear-text=secret},type=JKS)
    
    /host=slave1/subsystem=elytron/key-manager=twoWayKM:add(key-store=twoWayKS,credential-reference={clear-text=secret})
    
    /host=slave1/subsystem=elytron/trust-manager=twoWayTM:add(key-store=twoWayTS)
    
    /host=slave1/subsystem=elytron/client-ssl-context=twoWayCSC:add(key-manager=twoWayKM,protocols=["TLSv1.2"],trust-manager=twoWayTM)
    
    /host=slave1/subsystem=elytron/authentication-context=slaveHostSSLContext:write-attribute(name=match-rules,value=[{match-host=localhost,authentication-configuration=slaveHostSSLConfiguration,ssl-context=twoWayCSC}])
    重要

    红帽没有在前面的命令中指定 algorithm 属性,因为 Elytron 子系统使用 KeyManagerFactory.getDefaultAlgorithm()TrustManagerFactory.getDefaultAlgorithm() 来确定算法。但是,您可以指定 algorithm 属性。要指定 algorithm 属性,您需要知道您使用的 JDK 提供了哪些关键管理器算法。例如,使用 SunJSSE 的 JDK 提供了 PKIXSunX509 算法。

    在上一命令中,您可以指定 SunX509 作为密钥管理器算法属性,将 PKIX 指定为信任管理器算法属性。

    此外,您需要确定您要支持的 HTTPS 协议。此流程中的示例使用 TLSv1.2

    您可以使用 cipher-suite-filter 指定密码套件,使用-cipher-suites-order 参数来遵循服务器密码套件顺序。use-cipher-suites-order 属性默认设置为 true。这与旧的 security 子系统行为不同,它默认为遵循客户端密码套件顺序。

  5. 重新加载您受管域中的所有 JBoss EAP 主机。

其他资源

  • 有关受管域工作模式的概念和常规配置的详情,请参考 JBoss EAP 配置指南中的域管理 部分。
  • 有关管理用户的信息,请参阅 JBoss EAP 配置指南中的管理用户部分。