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 域控制器的证书导入到每个主机控制器密钥存储中。此外,将每个主机控制器证书导入到主域控制器密钥存储中。
流程
在 master 域控制器上添加用户。如果您重新使用基于文件的用户和组身份验证机制,请运行
EAP_HOME/bin/add-user.sh
脚本。提示时,添加用户名、密码和其他配置。注意管理用户的域的默认名称为
ManagementRealm
。当add-user
实用程序提示输入域名时,您必须接受默认域名;即,除非您切换到不同的域。注意您必须在主域控制器上添加用户,以便从控制器进行身份验证。
注意服务器将属性文件的内容缓存在内存中。但是,服务器会检查每个身份验证请求上属性文件修改的时间,并在更新时间时重新加载。因此,
add-user
实用程序的任何更改都会立即应用到任何正在运行的服务器。将主域控制器配置为使用 SSL 或 TLS。以下示例显示了为服务器密钥存储和信任存储配置域控制器
密钥
、key-manager
、trust-manager
和server-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 提供了PKIX
和SunX509
算法。在上一命令中,您可以指定
SunX509
作为密钥管理器算法属性,将PKIX
指定为信任管理器算法属性。此外,您需要确定您要支持的 HTTPS 协议。此流程中的示例使用
TLSv1.2
。您可以使用
cipher-suite-filter
指定密码套件,使用-cipher-suites-order
参数来遵循服务器密码套件顺序。use-cipher-suites-order
属性默认设置为true
。这与旧的security
子系统行为不同,它默认为遵循客户端密码套件顺序。在每个从属主机控制器上配置身份验证上下文和域控制器位置。以下示例配置显示了
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)
将每个从属主机控制器配置为使用 SSL 或 TLS。以下命令为服务器密钥存储和信任存储配置从属主机控制器
key-store
、key-manager
、trust-manager
、client-ssl-context
和authentication-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 提供了PKIX
和SunX509
算法。在上一命令中,您可以指定
SunX509
作为密钥管理器算法属性,将PKIX
指定为信任管理器算法属性。此外,您需要确定您要支持的 HTTPS 协议。此流程中的示例使用
TLSv1.2
。您可以使用
cipher-suite-filter
指定密码套件,使用-cipher-suites-order
参数来遵循服务器密码套件顺序。use-cipher-suites-order
属性默认设置为true
。这与旧的security
子系统行为不同,它默认为遵循客户端密码套件顺序。- 重新加载您受管域中的所有 JBoss EAP 主机。