1.2. 如何保护管理接口
以下小节介绍了如何执行与保护 JBoss EAP 管理接口和相关子系统相关的各种操作。
显示的管理 CLI 命令假定您正在运行 JBoss EAP 单机服务器。有关为 JBoss EAP 受管域使用管理 CLI 的详情,请查看 JBoss EAP 管理 CLI 指南。
使用管理 CLI 集成 Elytron
可以使用来自 elytron
子系统的资源来保护管理界面,其方式与旧的安全域相同。
连接的 SSL 配置来自以下位置之一:
- 特定于 CLI 配置中的任何 SSL 配置。
- 自动提示用户接受服务器证书的默认 SSL 配置。
- java 系统属性。
可使用 wildfly-config.xml
文件修改客户端配置。
如果设置 -Dwildfly.config.url
属性,客户端都可以使用任何文件进行配置。
1.2.1. 配置联网和端口
根据主机的配置,可将 JBoss EAP 配置为使用各种网络接口和端口。这使得 JBoss EAP 能够处理不同的主机、网络和防火墙要求。
其他资源
- 有关 JBoss EAP 使用的联网和端口的更多信息,以及如何配置这些设置,请参阅 JBoss EAP 配置 指南中的网络和端口 配置 部分。
1.2.2. 禁用管理控制台
其他客户端(如 JBoss 运营网络)操作使用 HTTP 接口来管理 JBoss EAP。为了继续使用这些服务,可能只禁用基于 Web 的管理控制台本身。这可以通过将 console-enabled
属性设置为 false
来完成。
流程
在 JBoss EAP 中禁用基于 Web 的管理控制台:
/core-service=management/management-interface=http-interface/:write-attribute(name=console-enabled,value=false)
1.2.3. 禁用对 JMX 的远程访问
通过远程访问 jmx
子系统,可以远程触发 JDK 和应用程序管理操作。
流程
要在 JBoss EAP 中禁止远程访问 JMX,请删除
jmx
子系统中的补救连接器:/subsystem=jmx/remoting-connector=jmx/:remove
1.2.4. silent 身份验证
JBoss EAP 的默认安装包含本地管理 CLI 用户的内部身份验证方法。这允许本地用户在不进行用户名或密码身份验证的情况下访问管理 CLI。可以启用此功能,以便本地用户在不需要身份验证的情况下运行管理 CLI 脚本。它被视为一个有用的功能,因为访问本地配置通常也让用户能够添加他们自己的用户详情或者禁用安全检查。
可在需要更大的安全控制的情况下禁用静默身份验证。这可以通过删除配置文件的 security-realm
属性中的 local 元素来实现。这适用于独立实例和受管域。
只有在对 JBoss EAP 实例的影响及其配置被完全理解时,才应执行本地元素删除。
流程
使用
elytron
子系统时删除静默身份验证:[standalone@localhost:9990 /] /subsystem=elytron/sasl-authentication-factory=managenet-sasl-authentication:read-resource { "outcome" => "success", "result" => { "mechanism-configurations" => [ { "mechanism-name" => "JBOSS-LOCAL-USER", "realm-mapper" => "local" }, { "mechanism-name" => "DIGEST-MD5", "mechanism-realm-configurations" => [{"realm-name" => "ManagementRealm"}] } ], "sasl-server-factory" => "configured", "security-domain" => "ManagementDomain" } } [standalone@localhost:9990 /] /subsystem=elytron/sasl-authentication-factory=managenet-sasl-authentication:list-remove(name=mechanism-configurations, index=0) [standalone@localhost:9990 /] reload
使用旧安全域时移除静默身份验证:
/core-service=management/security-realm=<realm_name>/authentication=local:remove
1.2.5. 使用 Elytron 子系统进行管理接口的单向 SSL/TLS
在 JBoss EAP 中,您可以使用 JBoss EAP 管理 CLI 或管理控制台为管理接口启用单向 SSL/TLS。
在管理 CLI 中,可以通过两种方式启用单向 SSL/TLS:
- 使用安全命令.
-
使用
elytron
子系统命令。
在管理控制台中,可以启用单向 SSL/TLS,如下所示:
1.2.5.1. 使用安全命令启用单向 SSL/TLS
security enable-ssl-management
命令可以用来为管理接口启用单向 SSL/TLS。
流程
在 CLI 中输入
security enable-ssl-management --interactive
命令。示例
security enable-ssl-management --interactive Please provide required pieces of information to enable SSL: Key-store file name (default management.keystore): 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): n SSL options: key store file: keystore.jks distinguished name: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown password: secret validity: 365 alias: localhost Server keystore file keystore.jks, certificate file keystore.pem and keystore.csr file will be generated in server configuration directory. Do you confirm y/n :y
- 执行命令后,管理 CLI 将重新加载服务器并重新连接该服务器。
您可以使用
disable-ssl-management
命令为管理接口禁用单向 SSL/TLS。security disable-ssl-management
此命令不会删除 Elytron 资源。它将系统配置为使用
ApplicationRealm
legacy security realm 进行其 SSL 配置。
1.2.5.2. 使用 Elytron 子系统命令启用单向 SSL/TLS
您可以使用 elytron
子系统命令为管理接口启用单向 SSL/TLS。
流程
配置
密钥存储
。/subsystem=elytron/key-store=httpsKS:add(path=keystore.jks,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=JKS)
注意以上命令使用
relative-to
来引用密钥存储文件的位置。或者,您也可以指定路径中的
密钥存储的完整路径,省略relative-to
。如果密钥存储文件尚不存在,则可以使用下列命令来生成示例密钥对:
/subsystem=elytron/key-store=httpsKS: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=httpsKS:store()
创建
key-manager
和server-ssl-context
。/subsystem=elytron/key-manager=httpsKM:add(key-store=httpsKS,credential-reference={clear-text=secret}) /subsystem=elytron/server-ssl-context=httpsSSC:add(key-manager=httpsKM,protocols=["TLSv1.2"])
重要红帽没有指定上一命令中的 algorithm 属性,因为 Elytron 子系统使用
KeyManagerFactory.getDefaultAlgorithm()
来确定算法。但是,您可以指定 algorithm 属性。要指定 algorithm 属性,您需要知道您使用的 JDK 提供了哪些关键管理器算法。例如,使用 SunJSSE 的 JDK 提供了PKIX
和SunX509
算法。在上一命令中,您可以指定
SunX509
作为密钥管理器算法属性。您还需要确定您要支持的 HTTPS 协议。上面的示例命令使用
TLSv1.2
。您可以使用
cipher-suite-filter
指定密码套件,使用-cipher-suites-order
参数来遵循服务器密码套件顺序。use-cipher-suites-order
属性默认设置为true
。这与旧的security
子系统行为不同,它默认为遵循客户端密码套件顺序。在管理界面中启用 HTTPS。
/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=httpsSSC) /core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https)
重新加载 JBoss EAP 实例。
reload
现在为管理界面启用了单向 SSL/TLS。
如果您同时定义了 security-realm
和 ssl-context
,JBoss EAP 将使用 ssl-context
提供的 SSL/TLS 配置。
1.2.5.3. 使用管理控制台启用单向 SSL/TLS
您可以使用管理控制台中的 SSL 向导为管理控制台中使用的管理界面启用 SSL。
流程
- 访问管理控制台。有关更多信息,请参阅 JBoss EAP 配置指南中的管理控制台部分。
- 进入到 Runtime,单击适当的服务器名称。
- 点服务器名称旁边的 View。
- 点 HTTP Manageme… 以打开 HTTP Management Interface 配置页面。
点启用 SSL 以启动向导。
向导可以帮助您在以下场景中启用 SSL:
- 您需要创建证书存储并生成自签名证书。
- 您需要从 Let 的加密证书颁发机构获取证书。
- 您已将证书存储在文件系统中,但没有密钥存储配置。
- 您已经拥有使用有效证书存储的密钥存储配置。
使用向导,您可以选择性地为 mutual 验证创建信任存储。
1.2.6. 使用 Elytron 子系统进行管理接口的双向 SSL/TLS
在 JBoss EAP 中,可以使用安全命令或使用 elytron
子系统命令启用用于管理接口的双向 SSL/TLS。
要启用双向 SSL/TLS,首先您必须获取或生成客户端证书。您可以按照以下流程生成客户端证书:
然后您可以使用以下方法之一为管理接口启用双向 SSL/TLS:
1.2.6.1. 生成客户端证书
您可以在 CLI 中使用 keytool 命令生成客户端证书。
流程
生成客户端证书:
$ keytool -genkeypair -alias client -keyalg RSA -keysize 1024 -validity 365 -keystore client.keystore.jks -dname "CN=client" -keypass secret -storepass secret
导出客户端证书:
$ keytool -exportcert -keystore client.keystore.jks -alias client -keypass secret -storepass secret -file /path/to/client.cer
1.2.6.2. 使用安全命令启用双向 SSL/TLS
security enable-ssl-management
命令可以用来为管理接口启用双向 SSL/TLS。
以下示例没有信任链的验证证书。如果您使用可信证书,则在没有问题的情况下可以验证客户端证书。
先决条件
- 您已配置了客户端密钥存储。
您已导出了服务器信任存储的证书。
如需更多信息,请参阅生成客户端证书。
流程
在 CLI 中输入
security enable-ssl-management --interactive
命令。示例
security enable-ssl-management --interactive Please provide required pieces of information to enable SSL: Key-store file name (default management.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
注意执行命令后,管理 CLI 将重新加载服务器并尝试重新连接该服务器。
要完成双向 SSL/TLS 身份验证,您需要将服务器证书导入到客户端信任存储中,并将您的客户端配置为显示客户端证书。
您可以使用
disable-ssl-management
命令为管理接口禁用双向 SSL/TLS。security disable-ssl-management
此命令不会删除 Elytron 资源。它将系统配置为使用
ApplicationRealm
legacy security realm 进行其 SSL 配置。
1.2.6.3. 使用 Elytron 子系统命令启用双向 SSL/TLS
您可以使用 elytron
子系统命令为管理接口启用双向 SSL/TLS。
先决条件
您已导出了服务器信任存储的证书。
如需更多信息,请参阅生成客户端证书。
流程
获取或生成密钥存储。
在 JBoss EAP 中启用单向 SSL/TLS 之前,您必须获取或生成您计划使用的密钥存储、信任存储和证书。若要生成一组密钥存储、truststores 和证书的示例,可使用以下命令:
配置
密钥存储
。/subsystem=elytron/key-store=twoWayKS:add(path=server.keystore.jks,relative-to=jboss.server.config.dir,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()
注意以上命令使用
relative-to
来引用密钥存储文件的位置。或者,您也可以指定路径中的
密钥存储的完整路径,省略relative-to
。导出您的服务器证书。
/subsystem=elytron/key-store=twoWayKS:export-certificate(alias=localhost,path=/path/to/server.cer,pem=true)
为服务器信任
存储
创建一个密钥存储,并将客户端证书导入到服务器信任存储中。注意以下示例没有信任链的验证证书。如果您使用可信证书,则在没有问题的情况下可以验证客户端证书。
/subsystem=elytron/key-store=twoWayTS:add(path=server.truststore.jks,relative-to=jboss.server.config.dir,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()
为服务器密钥存储和 truststore 配置
key-manager
、trust-manager
和server-ssl-context
。/subsystem=elytron/key-manager=twoWayKM:add(key-store=twoWayKS,credential-reference={clear-text=secret}) /subsystem=elytron/trust-manager=twoWayTM:add(key-store=twoWayTS) /subsystem=elytron/server-ssl-context=twoWaySSC:add(key-manager=twoWayKM,protocols=["TLSv1.2"],trust-manager=twoWayTM,want-client-auth=true,need-client-auth=true)
重要红帽没有在前面的命令中指定 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
子系统行为不同,它默认为遵循客户端密码套件顺序。在管理界面中启用 HTTPS。
/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=twoWaySSC) /core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https)
重新加载 JBoss EAP 实例。
reload
注意要完成双向 SSL/TLS 身份验证,您需要将服务器证书导入到客户端信任存储中,并将您的客户端配置为显示客户端证书。
将您的客户端配置为使用客户端证书。
您需要将客户端配置为向服务器提供可信客户端证书,以完成双向 SSL/TLS 身份验证。例如,如果使用浏览器,您需要将可信证书导入到浏览器的信任存储中。
这会导致强制双向 SSL/TLS 身份验证,而不将原始身份验证改为服务器管理。
如果要更改原始身份验证方法,请参阅 JBoss EAP 的 How to Configure Identity Management 中的 Configure Authentication with Certificates 部分。
现在为管理界面启用了双向 SSL/TLS。
如果您同时定义了 security-realm
和 ssl-context
,JBoss EAP 将使用 ssl-context
提供的 SSL/TLS 配置。
1.2.7. 使用 CLI 安全性命令进行管理接口的 SASL 身份验证
您可以使用 CLI security
命令为管理界面启用和禁用 SASL 身份验证。您还可以使用命令对 SASL 机制重新排序。
启用 SASL 身份验证
在 JBoss EAP 中,使用 elytron SASL 身份验证程序(使用 elytron SASL 身份验证工厂)可使用 security enable-sasl-management
命令启用管理界面。此命令创建配置身份验证所需的所有非现有资源。默认情况下,此命令将包含的 SASL 工厂与 http-interface
相关联。
示例:启用 SASL 身份验证
security enable-sasl-management Server reloaded. Command success. Authentication configured for management http-interface sasl authentication-factory=management-sasl-authentication security-domain=ManagementDomain
执行命令后,管理 CLI 将重新加载服务器并重新连接该服务器。
如果 SASL 工厂已存在,则工厂将更新为使用 --mechanism
参数定义的机制。
如需参数列表,请参阅授权安全参数。
禁用 SASL 身份验证
要删除活动 SASL 身份验证工厂,请使用以下命令:
security disable-sasl-management
另外,要从活跃的 SASL 身份验证工厂中删除特定机制,请使用以下命令:
security disable-sasl-management --mechanism=MECHANISM
重新排序 SASL 机制
定义 SASL 机制的顺序规定服务器如何对请求进行身份验证,并提供第一个匹配机制发送到客户端。
您可以通过将逗号分隔传递给 安全 reorder-sasl-management
命令来改变这个顺序,例如:
security reorder-sasl-management --mechanisms-order=MECHANISM1,MECHANISM2,...
其他资源
1.2.8. 使用 CLI 安全性命令对管理接口进行 HTTP 身份验证
您可以使用 CLI security
命令为管理界面启用和禁用 HTTP 身份验证。
启用 HTTP 验证
在 JBoss EAP 中,可通过 安全性 enable-http-auth-management
命令,为管理接口启用 HTTP 身份验证。这个命令只能将 http-interface
作为目标,并且没有附加参数,其中包含的 HTTP 身份验证工厂将与此接口相关联。
示例:启用 HTTP 身份验证
security enable-http-auth-management Server reloaded. Command success. Authentication configured for management http-interface http authentication-factory=management-http-authentication security-domain=ManagementDomain
执行命令后,管理 CLI 将重新加载服务器并重新连接该服务器。
如果 HTTP 工厂已存在,则工厂将更新为使用 --mechanism
参数定义的机制。
如需参数列表,请参阅授权安全参数。
禁用 HTTP 身份验证
要删除活动的 HTTP 身份验证工厂,请使用以下命令。
security disable-http-auth-management
或者,您可以使用以下命令从活跃的 HTTP 验证工厂中删除特定机制。
security disable-http-auth-management --mechanism=MECHANISM
其他资源
1.2.9. 使用旧的内核管理验证为单向 SSL/TLS 配置管理接口
仅使用单向 SSL/TLS 为通信配置 JBoss EAP 管理接口可以提供更高的安全性。客户端和管理界面之间的所有网络流量都是加密的,这降低了安全攻击的风险,比如中间人攻击。
在此过程中,禁用与 JBoss EAP 实例的未加密通信。此流程适用于独立服务器和受管域配置。对于受管域,使用主机名称作为管理 CLI 命令前缀,例如: /host=master
。
在在管理界面中启用单向 SSL/TLS 的步骤时,除非明确指示,否则不要重新加载配置。这样做可能会导致您被锁定在管理界面中。
创建密钥存储来保护管理接口。
如需更多信息,请参阅创建密钥存储来保护管理界面。
确保管理接口绑定到 HTTPS。
如需更多信息,请参阅确保管理接口绑定到 HTTPS。
可选: 实施自定义
socket-binding-group
。如需更多信息,请参阅自定义 socket-binding-group。
创建新的安全域。
如需更多信息,请参阅创建新的安全域。
配置管理接口以使用新的安全域。
如需更多信息,请参阅配置管理界面以使用安全域。
配置管理接口以使用密钥存储。
如需更多信息,请参阅配置管理接口以使用密钥存储。
更新
jboss-cli.xml
。如需更多信息,请参阅更新 jboss-cli.xml 文件。
1.2.9.1. 创建密钥存储来保护管理接口
创建密钥存储来保护管理接口。
此密钥存储必须采用 JKS 格式,因为管理接口与 JCEKS 格式的密钥存储不兼容。
流程
使用以下 CLI 命令创建密钥存储:
将参数的示例值(如
别名
,keypass
,keystore
,storepass
和dname
)替换为环境的正确值。$ keytool -genkeypair -alias appserver -storetype jks -keyalg RSA -keysize 2048 -keypass password1 -keystore EAP_HOME/standalone/configuration/identity.jks -storepass password1 -dname "CN=appserver,OU=Sales,O=Systems Inc,L=Raleigh,ST=NC,C=US" -validity 730 -v
参数 validity
指定密钥有效的天数。730
等于两年。
1.2.9.2. 确保管理接口绑定到 HTTPS
配置 JBoss EAP 以确保管理界面绑定到 HTTPS。
流程
运行独立服务器时的配置
要确保管理接口绑定到 HTTPS,您必须添加
management-https
配置并移除management-http
配置。使用以下 CLI 命令,将管理接口绑定到 HTTPS:
/core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https) /core-service=management/management-interface=http-interface:undefine-attribute(name=socket-binding)
运行受管域时的配置
通过添加
secure-port
和删除端口配置来更改management-interface
属性中的 socket 元素。使用以下命令将管理接口绑定到 HTTPS:
/host=master/core-service=management/management-interface=http-interface:write-attribute(name=secure-port,value=9993) /host=master/core-service=management/management-interface=http-interface:undefine-attribute(name=port)
1.2.9.3. 自定义 socket-binding-group
如果要使用自定义 socket-binding-group
,您必须确保定义了 management-https
绑定,默认绑定到端口 9993
。您可以从服务器配置文件的 socket-binding-group
属性或使用管理 CLI 验证这一点:
/socket-binding-group=standard-sockets/socket-binding=management-https:read-resource(recursive=true) { "outcome" => "success", "result" => { "client-mappings" => undefined, "fixed-port" => false, "interface" => "management", "multicast-address" => undefined, "multicast-port" => undefined, "name" => "management-https", "port" => expression "${jboss.management.https.port:9993}" } }
1.2.9.4. 创建新的安全域
创建新的安全域。
在此过程中,使用 HTTPS(ManagementRealmHTTPS
)的新安全 realm 会使用位于 EAP_HOME/standalone/configuration/
目录中的名为 https-mgmt-users.properties
的属性文件来存储用户名和密码。
流程
创建用于存储用户名和密码的属性文件。
可以稍后向文件中添加用户名和密码,但现在您需要创建一个名为
https-mgmt-users.properties
的空文件,并将它保存到该位置。以下示例显示使用touch
命令,但也可以使用其他机制,如文本编辑器。示例:使用 touch 命令创建一个空文件
$ touch EAP_HOME/standalone/configuration/https-mgmt-users.properties
接下来,使用以下管理 CLI 命令创建名为
ManagementRealmHTTPS
的新安全域:/core-service=management/security-realm=ManagementRealmHTTPS:add /core-service=management/security-realm=ManagementRealmHTTPS/authentication=properties:add(path=https-mgmt-users.properties,relative-to=jboss.server.config.dir)
将用户添加到属性文件中。
此时,您已创建一个新的安全域,并将其配置为使用属性文件进行身份验证。现在,您必须使用
add-user
脚本将用户添加到属性文件,该文件位于EAP_HOME/bin/
目录中。在运行add-user
脚本时,您必须分别使用-up
和-r
选项指定属性文件和安全域。在那里,add-user
脚本将以互动方式提示您输入用户名和密码信息,以便存储在https-mgmt-users.properties
文件中。$ EAP_HOME/bin/add-user.sh -up EAP_HOME/standalone/configuration/https-mgmt-users.properties -r ManagementRealmHTTPS ... Enter the details of the new user to add. Using realm 'ManagementRealmHTTPS' as specified on the command line. ... Username : httpUser Password requirements are listed below. To modify these restrictions edit the add-user.properties configuration file. - The password must not be one of the following restricted values {root, admin, administrator} - The password must contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s) - The password must be different from the username ... Password : Re-enter Password : About to add user 'httpUser' for realm 'ManagementRealmHTTPS' ... Is this correct yes/no? yes .. Added user 'httpUser' to file 'EAP_HOME/configuration/https-mgmt-users.properties' ... Is this new user going to be used for one AS process to connect to another AS process? e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls. yes/no? no
重要在配置使用属性文件存储用户名和密码的安全域时,建议每个域都使用一个不与其他域共享的不同属性文件。
1.2.9.5. 配置管理接口以使用安全域
您可以使用管理 CLI 命令将管理接口配置为使用安全域。
流程
使用以下管理 CLI 命令:
/core-service=management/management-interface=http-interface:write-attribute(name=security-realm,value=ManagementRealmHTTPS)
1.2.9.6. 配置管理接口以使用密钥存储
利用管理 CLI 命令,将管理接口配置为使用密钥存储。
流程
使用以下管理 CLI 命令,将管理接口配置为使用密钥存储:
对于参数文件,密码和别名值必需是来自创建一个密钥存储来保护管理接口安全步骤。
/core-service=management/security-realm=ManagementRealmHTTPS/server-identity=ssl:add(keystore-path=identity.jks,keystore-relative-to=jboss.server.config.dir,keystore-password=password1, alias=appserver)
注意要更新密钥存储密码,请使用以下 CLI 命令:
/core-service=management/security-realm=ManagementRealmHTTPS/server-identity=ssl:write-attribute(name=keystore-password,value=newpassword)
重新载入服务器的配置:
reload
重新载入服务器配置后,日志应包含以下内容,只有在文本前显示启动的服务数量:
13:50:54,160 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0061: Http management interface listening on https://127.0.0.1:9993/management 13:50:54,162 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0052: Admin console listening on https://127.0.0.1:9993
管理接口现在侦听端口 9993
,这确认过程是否成功。
此时,CLI 将断开连接,并且因为端口绑定已更改后无法重新连接。
继续下一步,以更新 jboss-cli.xml
文件,以允许管理 CLI 重新连接。
1.2.9.7. 更新 jboss-cli.xml 文件
如果使用管理 CLI 执行管理操作,您必须更新 EAP_HOME/bin/jboss-cli.xml
文件。
流程
更新
EAP_HOME/bin/jboss-cli.xml
文件,如下所示:-
将
<default-protocol>
的值更新为https-remoting
。 -
在
<default-controller>
中,将<protocol>
的值更新为https-remoting
。 -
在
<default-controller>
中,将<port>
的值更新为9993
。
示例:
jboss-cli.xml
<jboss-cli xmlns="urn:jboss:cli:2.0"> <default-protocol use-legacy-override="true">https-remoting</default-protocol> <!-- The default controller to connect to when 'connect' command is executed w/o arguments --> <default-controller> <protocol>https-remoting</protocol> <host>localhost</host> <port>9993</port> </default-controller> ...
-
将
下次使用管理 CLI 连接到管理界面时,您必须接受服务器证书并根据 ManagementRealmHTTPS
安全域进行身份验证:
示例:接受服务器证书和身份验证
$ ./jboss-cli.sh -c Unable to connect due to unrecognised server certificate Subject - CN=appserver,OU=Sales,O=Systems Inc,L=Raleigh,ST=NC,C=US Issuer - CN=appserver, OU=Sales, O=Systems Inc, L=Raleigh, ST=NC, C=US Valid From - Tue Jun 28 13:38:48 CDT 2016 Valid To - Thu Jun 28 13:38:48 CDT 2018 MD5 : 76:f4:81:8b:7e:c3:be:6d:ee:63:c1:7a:b7:b8:f0:fb SHA1 : ea:e3:f1:eb:53:90:69:d0:c9:69:4a:5a:a3:20:8f:76:c1:e6:66:b6 Accept certificate? [N]o, [T]emporarily, [P]ermenantly : p Authenticating against security realm: ManagementRealmHTTPS Username: httpUser Password: [standalone@localhost:9993 /]
如果您同时定义了 security-realm
和 ssl-context
,JBoss EAP 将使用 ssl-context
提供的 SSL/TLS 配置。
1.2.10. 为使用旧核心管理身份验证的管理接口设置双向 SSL/TLS
双向 SSL/TLS 身份验证(也称为 客户端身份验证 )使用 SSL/TLS 证书验证客户端和服务器。这与 为单向 SSL/TLS 部分配置管理接口 不同,其中的客户端和服务器都有证书。这提供了保证,不仅显示它的服务器,而且客户端也表示它是什么。
本节使用以下惯例:
- HOST1
-
JBoss 服务器主机名。例如:
jboss.redhat.com
。 - HOST2
-
适合客户端的名称。例如:
myclient
。请注意,这不一定是实际的主机名。 - CA_HOST1
-
用于 HOST1 证书的 DN(区分名称)。例如:
cn=jboss,dc=redhat,dc=com
。 - CA_HOST2
-
用于 HOST2 证书的 DN(区分名称)。例如:
cn=myclient,dc=redhat,dc=com
。
如果使用了密码 vault 来存储密钥存储和信任存储密码,则应当已经创建密码 vault。有关密码库的更多信息,请参阅 Red Hat JBoss Enterprise Application Platform 7 安全架构指南中的 Password Vault 部分以及 Password Vault System 部分。
红帽建议显式禁用 SSLv2、SSLv3 和 TLSv1.0,以便在所有受影响的软件包中明确禁用 TLSv1.1 或 TLSv1.2。
流程
生成密钥存储。
$ keytool -genkeypair -alias HOST1_alias -keyalg RSA -keysize 1024 -validity 365 -keystore HOST1.keystore.jks -dname "CA_HOST1" -keypass secret -storepass secret $ keytool -genkeypair -alias HOST2_alias -keyalg RSA -keysize 1024 -validity 365 -keystore HOST2.keystore.jks -dname "CA_HOST2" -keypass secret -storepass secret
导出证书。
$ keytool -exportcert -keystore HOST1.keystore.jks -alias HOST1_alias -keypass secret -storepass secret -file HOST1.cer $ keytool -exportcert -keystore HOST2.keystore.jks -alias HOST2_alias -keypass secret -storepass secret -file HOST2.cer
将证书导入到而非信任存储中。
$ keytool -importcert -keystore HOST1.truststore.jks -storepass secret -alias HOST2_alias -trustcacerts -file HOST2.cer $ keytool -importcert -keystore HOST2.truststore.jks -storepass secret -alias HOST1_alias -trustcacerts -file HOST1.cer
定义证书。
在服务器(
host.xml
或standalone.xml
)的配置中定义 CertificateRealm,并将接口指向该服务器。这可以通过以下命令完成:/core-service=management/security-realm=CertificateRealm:add() /core-service=management/security-realm=CertificateRealm/server-identity=ssl:add(keystore-path=/path/to/HOST1.keystore.jks, keystore-password=secret,alias=HOST1_alias) /core-service=management/security-realm=CertificateRealm/authentication=truststore:add(keystore-path=/path/to/HOST1.truststore.jks,keystore-password=secret)
将
http-interface
的security-realm
更改为新的 CertificateRealm。/core-service=management/management-interface=http-interface:write-attribute(name=security-realm,value=CertificateRealm)
为 CLI 添加 SSL/TLS 配置。
重要除了添加双向 SSL/TLS 外,还必须将管理接口配置为绑定到 HTTPS。详情请参阅 在标题为使用旧核心管理身份验证的 单向 SSL/TLS 中配置管理接口部分的管理接口(如网络接口绑定)部分的 HTTPS。
为 CLI 添加 SSL/TLS 配置,该配置使用
EAP_HOME/bin/jboss-cli.xml
作为设置文件。要将密钥存储和信任存储密码以纯文本形式存储,请编辑
EAP_HOME/bin/jboss-cli.xml
并使用变量的适当值添加 SSL/TLS 配置:示例:jboss-cli.xml 存储密钥存储和 Truststore Passwords(明文形式)
<ssl> <alias>HOST2_alias</alias> <key-store>/path/to/HOST2.keystore.jks</key-store> <key-store-password>secret</key-store-password> <trust-store>/path/to/HOST2.truststore.jks</trust-store> <trust-store-password>secret</trust-store-password> <modify-trust-store>true</modify-trust-store> </ssl>
要使用存储在密码库中的密钥存储和信任存储密码,您需要将 vault 配置和适当的 vault 值添加到
EAP_HOME/bin/jboss-cli.xml
中:示例:jboss-cli.xmltoring Keystore 和 Truststore Passwords(明文形式)
<ssl> <vault> <vault-option name="KEYSTORE_URL" value="path-to/vault/vault.keystore"/> <vault-option name="KEYSTORE_PASSWORD" value="MASK-5WNXs8oEbrs"/> <vault-option name="KEYSTORE_ALIAS" value="vault"/> <vault-option name="SALT" value="12345678"/> <vault-option name="ITERATION_COUNT" value="50"/> <vault-option name="ENC_FILE_DIR" value="EAP_HOME/vault/"/> </vault> <alias>HOST2_alias</alias> <key-store>/path/to/HOST2.keystore.jks</key-store> <key-store-password>VAULT::VB::cli_pass::1</key-store-password> <key-password>VAULT::VB::cli_pass::1</key-password> <trust-store>/path/to/HOST2.truststore.jks</trust-store> <trust-store-password>VAULT::VB::cli_pass::1</trust-store-password> <modify-trust-store>true</modify-trust-store> </ssl>
如果您同时定义了 security-realm
和 ssl-context
,JBoss EAP 将使用 ssl-context
提供的 SSL/TLS 配置。
1.2.11. HTTPS Listener 参考
如需可用于 HTTPS 侦听器的属性的完整列表,请参阅 JBoss EAP 配置指南中的 Undertow 子系统属性 小节。
1.2.11.1. 关于 Cipher Suites
您可以配置允许的加密密码列表。对于 JSSE 语法,它必须用逗号分开的列表。对于 OpenSSL 语法,它必须是以冒号分隔的列表。确定只使用一个语法。默认为 JVM 默认。
使用弱密码是一个重大安全风险。有关加密套件的 NIST 建议,请参阅 NIST 指南。
有关可用 OpenSSL 密码列表,请查看 OpenSSL 文档。请注意,不支持以下内容:
- @SECLEVEL
- SUITEB128
- SUITEB128ONLY
- SUITEB192
有关 标准 JSSE 密码列表, 请参见 Java 文档。
要更新启用的密码套件的列表,请在 undertow
子系统中使用 HTTPS 侦听器的 enabled-cipher-suites 属性。
示例:更新 Enabled Cipher Suites 列表的管理 CLI 命令
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=enabled-cipher-suites,value="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA")
这个示例只列出两个可能的密码,但实际示例可能会使用更多。
1.2.12. 使用 OpenSSL 供应商启用对 TLS 1.3 协议的支持
您可以通过在 ssl-context
配置中配置 cipher-suite-names
属性,通过为 TLS 启用对 TLS 1.3 协议的支持。选择以下方法之一将 JBoss EAP 配置为使用 OpenSSL TLS 供应商:
- 将 Elytron 子系统配置为使用 OpenSSL TLS 供应商。
-
配置
server-ssl-context
组件的provider
属性,或将client-ssl-context
组件配置为使用 OpenSSL TLS 供应商。
与 TLS 1.2 相比,在使用 JDK 11 运行 TLS 1.3 时您可能会体验到较低的性能。当客户端向服务器发出大量 TLS 1.3 请求时会出现这种情况。系统升级到较新的 JDK 版本可以提高性能。在生产环境中启用前,使用 TLS 1.3 测试您的设置是否出现性能下降的问题。
先决条件
- 为应用程序启用单向 SSL/TLS 或双向 SSL/TLS。
流程
选择以下一种方法之一将 JBoss EAP 7.4 实例配置为使用 OpenSSL TLS 供应商:
将
elytron
子系统配置为使用 OpenSSL TLS 供应商。要做到这一点,删除默认的final-providers
配置,它会在所有全局注册的供应商后注册 OpenSSL TLS 供应商。/subsystem=elytron:undefine-attribute(name=final-providers) reload
接下来,在所有全局注册的供应商前注册 OpenSSL TLS 供应商。
/subsystem=elytron:write-attribute(name=initial-providers, value=combined-providers)
配置
server-ssl-context
或client-ssl-context
的providers
属性以使用 OpenSSL TLS 供应商。为名为
serverSSC
的现有server-ssl-context
设置providers
属性的示例。/subsystem=elytron/server-ssl-context=serverSSC:write-attribute(name=providers,value=openssl) reload
可选: 如果您将
ssl-context
配置为使用 TLS 1.3 协议以外的协议,您必须在ssl-context
中配置protocol
属性使其包含 TLS 1.3 协议:/subsystem=elytron/server-ssl-context=serverSSC:write-attribute(name=protocols,value=[TLSv1.3])
通过在
ssl-context
配置中配置 password-suite-names
属性,启用对 OpenSSL 供应商的 TLS 1.3 协议的支持。以下示例将TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
设置为 password-suite-names
属性的值:/subsystem=elytron/server-ssl-context=serverSSC:write-attribute(name=cipher-suite-names,value=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256)
重新载入 JBoss EAP 实例:
reload
可选: 测试您可以使用 TLS 1.3 协议和 TLS 1.3 密码套件成功与服务器建立 SSL 加密连接。使用
curl
等工具检查配置的输出:curl -v https://<ip_address>:<ssl_port>
显示
TLS_AES_256_GCM_SHA384
带有 TLS 1.3 协议来保护 SSL 连接的输出示例。SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN, server accepted to use h2 * Server certificate: * subject: C=Unknown; ST=Unknown; L=Unknown; O=Unknown; OU=Unknown; CN=localhost * start date: Oct 6 14:58:16 2020 GMT * expire date: Nov 5 15:58:16 2020 GMT * issuer: C=Unknown; ST=Unknown; L=Unknown; O=Unknown; OU=Unknown; CN=localhost * SSL certificate verify result: self signed certificate (18), continuing anyway.
其他资源
- 有关为应用程序启用单向 SSL/TLS 或双向 SSL/TLS 的信息,请参阅 使用 Elytron subsystem 为应用程序启用单向 SSL/TLS。
-
有关
client-ssl-context
的详情请参考 使用client-ssl-context
。 -
有关
server-ssl-context
的详情请参考 使用server-ssl-context
。
1.2.13. FIPS 140-2 Compliant Cryptography
可使用以下任一方法在 Red Hat Enterprise Linux 上配置 FIPS 140-2 兼容加密。
1.2.13.1. 在 Red Hat Enterprise Linux 7 及之后的版本中为 SSL/TLS 启用 FIPS 140-2 Cryptography
您可以将 Undertow 配置为将 FIPS 140-2 兼容加密用于 SSL/TLS。此配置示例的范围仅限于 Red Hat Enterprise Linux 7 及之后的版本,在 FIPS 模式中使用 Mozilla NSS 库。
安装的 Red Hat Enterprise Linux 必须已经配置为符合 FIPS 140-2。如需更多信息,请参阅标题为 How can make RHEL 6 或 RHEL 7 FIPS 140-2 的解决方案(在红帽客户门户网站中 )。
在以 FIPS 模式运行时使用 TLS 1.2 协议可能会导致 NoSuchAlgorithmException
。有关此问题的更多详细信息,请参阅标题为 NoSuchAlgorithmException: no such algorithm: SunTls12MasterSecret,它位于红帽客户门户网站。
因此,无法在 FIPS 模式中配置 HTTP/2,因为 HTTP/2 需要 TLS 1.2 协议。FIPS 模式(PKCS11)支持 TLS 1 和 TLS 1.1 协议,以便您可以使用:
- Oracle/OpenJDK:TLS 1.1
- IBM java:TLS 1
要将 Undertow 配置为对 SSL/TLS 使用 FIPS 140-2 兼容加密,您必须执行以下操作:
- 配置 NSS 数据库。
- 为 SSL/TLS 配置 FIPS 140-2 兼容加密的管理 CLI。
-
将
undertow
子系统配置为使用 Elytron 或 旧核心管理身份验证。
OpenSSL 供应商需要一个私钥,但无法从 PKCS11 存储中检索私钥。FIPS 不允许从 FIPS 兼容的加密模块导出未加密的密钥。因此,对于 elytron
子系统和旧的安全性,在 FIPS 模式中无法将 OpenSSL 供应商用于 TLS。
配置 NSS 数据库
创建由适当用户拥有的目录,以存放 NSS 数据库。
创建 NSS 数据库目录的命令示例
$ mkdir -p /usr/share/jboss-as/nssdb $ chown jboss /usr/share/jboss-as/nssdb $ modutil -create -dbdir /usr/share/jboss-as/nssdb
注意- DBM 文件格式,RHEL 7 及更早版本的默认数据库格式已被弃用。NSS 现在默认使用 SQL。
- jboss 用户只是一个示例。使用操作系统上的活跃用户替换它来运行 JBoss EAP。
创建 NSS 配置文件:
/usr/share/jboss-as/nss_pkcsll_fips.cfg
。它必须指定:
- 一个名称
- NSS 库所在的目录
上一步中创建的 NSS 数据库的目录
示例:
nss_pkcsll_fips.cfg
name = nss-fips nssLibraryDirectory=/usr/lib64 nssSecmodDirectory=/usr/share/jboss-as/nssdb nssDbMode = readOnly nssModule = fips
注意如果您没有运行 64 位版本的 Red Hat Enterprise Linux 6,那么
nss1028Directory
设为/usr/lib
,而不是/usr/lib64
。
编辑 Java 安全配置文件。此配置文件会影响整个 JVM,并可使用以下任一方式进行定义。
-
JDK 中提供了默认配置文件
java.security
。如果没有指定其他安全配置文件,则使用此文件。有关此文件的位置,请查看 JDK 供应商的文档。 定义自定义 Java 安全配置文件,并使用
-Djava.security.properties=/path/to/java.security.properties
来引用。以这种方式引用时,它会覆盖默认安全文件中的设置。在需要不同安全设置的同一主机上运行的多个 JVM 时,此选项很有用。在您的 Java 安全配置文件中添加以下行:
示例:
java.security
security.provider.1=sun.security.pkcs11.SunPKCS11 /usr/share/jboss-as/nss_pkcsll_fips.cfg
注意上述行中指定的
nss_pkcsll_fips.cfg
配置文件是上一步中创建的文件。您还需要从以下位置更新配置文件中的以下链接:
security.provider.5=com.sun.net.ssl.internal.ssl.Provider
至
security.provider.5=com.sun.net.ssl.internal.ssl.Provider SunPKCS11-nss-fips
重要此文件中的任何其他
security.provider.X
行(如security.provider.2
)都必须增加其 X 的值,以确保此 provider 具有优先权。
-
JDK 中提供了默认配置文件
在您在上一步中创建的 NSS 数据库目录上运行
modutil
命令以启用 FIPS 模式。modutil -fips true -dbdir /usr/share/jboss-as/nssdb
注意此时您可能会收到一个安全库错误,要求您为某些 NSS 共享对象重新生成库签名。
在 FIPS 令牌中设置密码。
令牌的名称必须是 NSS FIPS 140-2 Certificate DB。
modutil -changepw "NSS FIPS 140-2 Certificate DB" -dbdir /usr/share/jboss-as/nssdb
重要用于 FIPS 令牌的密码必须是 FIPS 兼容密码。如果密码不够强,您可能会收到错误: ERROR: Unable to change password on token "NSS FIPS 140-2 Certificate DB"。
使用 NSS 工具创建证书。
示例命令
$ certutil -S -k rsa -n undertow -t "u,u,u" -x -s "CN=localhost, OU=MYOU, O=MYORG, L=MYCITY, ST=MYSTATE, C=MY" -d /usr/share/jboss-as/nssdb
运行以下命令,验证 JVM 是否可以从 PKCS11 密钥存储读取私钥:
$ keytool -list -storetype pkcs11
启用 FIPS 后,您可能会在启动 JBoss EAP 时看到以下错误:
10:16:13,993 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC000001: Failed to start service jboss.server.controller.management.security_realm.ApplicationRealm.key-manager: org.jboss.msc.service.StartException in service jboss.server.controller.management.security_realm.ApplicationRealm.key-manager: WFLYDM0018: Unable to start service at org.jboss.as.domain.management.security.AbstractKeyManagerService.start(AbstractKeyManagerService.java:85) at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1963) at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1896) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.security.KeyStoreException: FIPS mode: KeyStore must be from provider SunPKCS11-nss-fips at sun.security.ssl.KeyManagerFactoryImpl$SunX509.engineInit(KeyManagerFactoryImpl.java:67) at javax.net.ssl.KeyManagerFactory.init(KeyManagerFactory.java:256) at org.jboss.as.domain.management.security.AbstractKeyManagerService.createKeyManagers(AbstractKeyManagerService.java:130) at org.jboss.as.domain.management.security.AbstractKeyManagerService.start(AbstractKeyManagerService.java:83) ... 5 more
如果您已配置了任何现有的密钥管理器,如旧核心管理身份验证中的默认密钥管理器(不使用 FIPS 140-2 加密),则将显示此消息。
为 FIPS 140-2 Compliant Cryptography 配置管理 CLI
您必须将 JBoss EAP 管理 CLI 配置为在启用了 SSL/TLS 的 FIPS 140-2 兼容加密的环境中工作。默认情况下,如果您尝试在此类环境中使用管理 CLI,则会抛出以下异常: org.jboss.as.cli.CliProcessException: java.security.KeyManagementException: FIPS 模式: 只能使用 SunJSSE TrustManagers
。
如果您使用传统的
security
子系统:更新
jboss-cli.sh
文件中的javax.net.ssl.keyStore
和javax.net.ssl.trustStore
系统属性,如下所示:JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStore=NONE -Djavax.net.ssl.trustStoreType=PKCS11" JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.keyStore=NONE -Djavax.net.ssl.keyStoreType=PKCS11 -Djavax.net.ssl.keyStorePassword=P@ssword123"
如果您使用
elytron
子系统:使用以下内容为管理 CLI 创建 XML 配置文件:
示例:
cli-wildfly-config.xml
<configuration> <authentication-client xmlns="urn:elytron:client:1.2"> <key-stores> <key-store name="truststore" type="PKCS11"> <key-store-clear-password password="P@ssword123"/> </key-store> </key-stores> <ssl-contexts> <ssl-context name="client-cli-context"> <trust-store key-store-name="truststore"/> <cipher-suite selector="${cipher.suite.filter}"/> <protocol names="TLSv1.1"/> </ssl-context> </ssl-contexts> <ssl-context-rules> <rule use-ssl-context="client-cli-context"/> </ssl-context-rules> </authentication-client> </configuration>
注意如果使用 IBM JDK,请参阅 IBM 管理 CLI 配置示例 以了解所需的具体配置。
启动管理 CLI 时,使用
-Dwildfly.config.url
属性将配置文件传递给管理 CLI 脚本。例如:$ jboss-cli.sh -Dwildfly.config.url=cli-wildfly-config.xml
配置 Elytron 和 Undertow 子系统
添加 FIPS 140-2 兼容加密密钥
存储
、key-manager
和ssl-context
。/subsystem=elytron/key-store=fipsKS:add(type=PKCS11,provider-name="SunPKCS11-nss-fips",credential-reference={clear-text="P@ssword123"}) /subsystem=elytron/key-manager=fipsKM:add(key-store=fipsKS,algorithm="SunX509",provider-name=SunPKCS11-nss-fips,credential-reference={clear-text="P@ssword123"}) /subsystem=elytron/server-ssl-context=fipsSSC:add(key-manager=fipsKM,protocols=["TLSv1.1"])
更新
undertow
子系统,以使用新的ssl-context
。注意https-listener
需要始终配置了security-realm
或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=fipsSSC) run-batch reload
在 elytron
子系统中,OpenJDK 和 Oracle JDK(在 FIPS 模式中)会限制任何基于提供自定义 KeyManager
或 TrustManager
实现的高级功能的使用。以下配置属性无法在服务器上工作:
-
server-ssl-context.security-domain
-
trust-manager.certificate-revocation-list
使用传统核心管理身份验证配置 Undertow
另外,您仍然可以使用传统的核心管理身份验证而不是 elytron
子系统完成对 SSL/TLS 的 FIPS 140-2 兼容加密设置:
配置 Undertow 以使用 SSL/TLS。
注意以下命令必须在批处理模式下运行,或者在添加 ssl 服务器身份后重新加载服务器。下例中使用了批处理模式。
batch /core-service=management/security-realm=HTTPSRealm:add /core-service=management/security-realm=HTTPSRealm/server-identity=ssl:add(keystore-provider=PKCS11, keystore-password="strongP@ssword1") /subsystem=undertow/server=default-server/https-listener=https:add(socket-binding=https, security-realm=HTTPSRealm, enabled-protocols="TLSv1.1") run-batch
为应用设置 SSL/TLS部分介绍了将 Undertow 配置为 SSL/TLS 的基本信息。
配置 Undertow 使用的加密套件。
配置了 SSL/TLS 后,您需要将 https 侦听程序和安全域配置为启用了特定的密码套件:
所需的加密套件
SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_anon_WITH_AES_128_CBC_SHA, TLS_ECDH_anon_WITH_AES_256_CBC_SHA
关于为 https 侦听程序启用加密套件的基础知识,请参阅关于加密套件。在 https 监听器上启用密码套件:
在 Https Listener 上启用 Cipher Suites 的命令示例
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=enabled-cipher-suites,value="SSL_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_anon_WITH_AES_128_CBC_SHA,TLS_ECDH_anon_WITH_AES_256_CBC_SHA")
在安全域中启用密码套件。
在 Security Realm 上启用 Cipher Suites 的命令示例
/core-service=management/security-realm=HTTPSRealm/server-identity=ssl:write-attribute(name=enabled-cipher-suites, value=[SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_anon_WITH_AES_128_CBC_SHA, TLS_ECDH_anon_WITH_AES_256_CBC_SHA])
1.2.13.2. 使用 Bouncy Castle 启用 FIPS 140-2 Cryptography for SSL/TLS
您可以将 Undertow 配置为将 FIPS 140-2 兼容加密用于 SSL/TLS。此配置示例的范围仅限于 Red Hat Enterprise Linux 7 及更新的版本。红帽不提供 Bouncy Castle JARs,它必须直接从 Bouncy Castle 获取。
先决条件
-
确保您的环境 已配置为使用
BouncyCastle
提供商。 服务器上必须存在 Bouncy Castle 密钥存储。如果不存在,您可以使用以下命令创建。
$ keytool -genkeypair -alias ALIAS -keyalg RSA -keysize 2048 -keypass PASSWORD -keystore KEYSTORE -storetype BCFKS -storepass STORE_PASSWORD
使用 Elytron 为 FIPS 140-2 Cryptography 配置管理 CLI
您必须将 JBoss EAP 管理 CLI 配置为在启用了 SSL/TLS 的 FIPS 140-2 兼容加密的环境中工作。
使用以下内容为管理 CLI 创建 XML 配置文件:
示例:
cli-wildfly-config.xml
<configuration> <authentication-client xmlns="urn:elytron:client:1.2"> <key-stores> <key-store name="truststore" type="BCFKS"> <file name="${truststore.location}" /> <key-store-clear-password password="${password}" /> </key-store> <key-store name="keystore" type="BCFKS"> <file name="${keystore.location}" /> <key-store-clear-password password="${password}" /> </key-store> </key-stores> <ssl-contexts> <ssl-context name="client-cli-context"> <key-store-ssl-certificate algorithm="PKIX" key-store-name="keystore"> <key-store-clear-password password="${password"} /> </key-store-ssl-certificate> <trust-store key-store-name="truststore"/> <trust-manager algorithm="PKIX"> </trust-manager> <cipher-suite selector="TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CCM,TLS_RSA_WITH_AES_128_CCM"/> <protocol names="TLSv1.2"/> </ssl-context> </ssl-contexts> <ssl-context-rules> <rule use-ssl-context="client-cli-context"/> </ssl-context-rules> </authentication-client> </configuration>
启动管理 CLI 时,使用
-Dwildfly.config.url
属性将配置文件传递给管理 CLI 脚本。例如:$ jboss-cli.sh -Dwildfly.config.url=cli-wildfly-config.xml
配置 Elytron 和 Undertow 子系统
添加 FIPS 140-2 兼容加密密钥
存储
、key-manager
和ssl-context
。在定义密钥存储时,类型必须是BCFKS
。/subsystem=elytron/key-store=fipsKS:add(path=KEYSTORE,relative-to=jboss.server.config.dir,credential-reference={clear-text=STORE_PASSWORD},type="BCFKS") /subsystem=elytron/key-manager=fipsKM:add(key-store=fipsKS,algorithm="PKIX",credential-reference={clear-text=PASSWORD}) /subsystem=elytron/server-ssl-context=fipsSSC:add(key-manager=fipsKM,protocols=["TLSv1.2"],cipher-suite-filter="TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CCM,TLS_RSA_WITH_AES_128_CCM")
更新
undertow
子系统,以使用新的ssl-context
。注意https-listener
需要始终配置了security-realm
或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=fipsSSC) run-batch reload
1.2.14. IBM JDK 上的 FIPS 140-2 Compliant Cryptography
在 IBM JDK 上,IBM Java Cryptographic Extension(JCE)IBMJCEFIPS 供应商和 IBM Java Secure Sockets Extension(JSSE) FIPS 140-2 Cryptographic 模块(IBMJSSE2)提供 FIPS 140-2 兼容加密。
有关 IBMJCEFIPS 供应商的更多信息,请参阅 IBM Documentation for IBM JCEFIPS 和 NIST IBMJCEFIPS – Security Policy。有关 IBMJSSE2 的更多信息,请参阅在 FIPS 模式中运行 IBMJSSE2。
1.2.14.1. 密钥存储
IBM JCE 不提供密钥存储。密钥存储在计算机上,不会离开其物理边界。如果密钥在必须加密的计算机间移动。
要在 FIPS 兼容模式下运行 keytool
,在每个命令中使用 -providerClass
选项,如下所示:
keytool -list -storetype JCEKS -keystore mystore.jck -storepass mystorepass -providerClass com.ibm.crypto.fips.provider.IBMJCEFIPS
1.2.14.2. 管理 CLI 配置
要在 IBM JDK 上为 FIPS 140-2 兼容加密配置管理 CLI,您必须使用专门用于 IBM JDK 的管理 CLI 配置文件,如下所示:
示例: cli-wildfly-config-ibm.xml
<configuration> <authentication-client xmlns="urn:elytron:client:1.2"> <key-stores> <key-store name="truststore" type="JKS"> <file name="/path/to/truststore"/> <key-store-clear-password password="P@ssword123"/> </key-store> </key-stores> <ssl-contexts> <ssl-context name="client-cli-context"> <trust-store key-store-name="truststore"/> <cipher-suite selector="${cipher.suite.filter}"/> <protocol names="TLSv1"/> </ssl-context> </ssl-contexts> <ssl-context-rules> <rule use-ssl-context="client-cli-context"/> </ssl-context-rules> </authentication-client> </configuration>
1.2.14.3. 检查 FIPS 提供者信息
要检查服务器使用的 IBMJCEFIPS 的信息,请通过将 -Djavax.net.debug=true
添加到 standalone.conf
或 domain.conf
文件来启用调试级别日志。有关 FIPS 供应商的信息记录到 server.log
文件,例如:
04:22:45,685 INFO [stdout] (http-/127.0.0.1:8443-1) JsseJCE: Using MessageDigest SHA from provider IBMJCEFIPS version 1.7 04:22:45,689 INFO [stdout] (http-/127.0.0.1:8443-1) DHCrypt: DH KeyPairGenerator from provider from init IBMJCEFIPS version 1.7 04:22:45,754 INFO [stdout] (http-/127.0.0.1:8443-1) JsseJCE: Using KeyFactory DiffieHellman from provider IBMJCEFIPS version 1.7 04:22:45,754 INFO [stdout] (http-/127.0.0.1:8443-1) JsseJCE: Using KeyAgreement DiffieHellman from provider IBMJCEFIPS version 1.7 04:22:45,754 INFO [stdout] (http-/127.0.0.1:8443-1) DHCrypt: DH KeyAgreement from provider IBMJCEFIPS version 1.7 04:22:45,754 INFO [stdout] (http-/127.0.0.1:8443-1) DHCrypt: DH KeyAgreement from provider from initIBMJCEFIPS version 1.7
1.2.15. 当 JVM 在 FIPS 模式中运行时启动受管域(Managed Domain)
更新每个主机控制器和主域控制器,以使用 SSL/TLS 进行通信。
先决条件
在开始之前,请确定您已完成以下先决条件。
您已实施了一个受管域。
有关配置受管域的详情,请参考 JBoss EAP 配置指南中的 域管理部分。
您已配置了 FIPS。
有关配置 FIPS 的详情,请参考在 Red Hat Enterprise Linux 7 及之后的版本中为 SSL/TLS 启用 FIPS 140-2 Cryptography。
- 您已创建了所有必要的证书,并将域控制器的证书导入到每个控制器的信任存储中。
红帽建议明确禁用 SSLv2、SSLv3 和 TLSv1.0,而不是在所有受影响的软件包中替代 TLSv1.1。
在主域控制器上,创建一个 SSL/TLS 安全域,该域配置为使用 NSS 数据库作为 PKCS11 供应商。
示例:主域控制器上的安全域控制器
<security-realm name="HTTPSRealm"> <server-identities> <ssl> <engine enabled-protocols="TLSv1.1"/> <keystore provider="PKCS11" keystore-password="strongP@ssword1"/> </ssl> </server-identities> <authentication> <local default-user="\$local"/> <properties path="https-users.properties" relative-to="jboss.domain.config.dir"/> </authentication> </security-realm>
在每个主机控制器中,创建一个使用 SSL/TLS 信任存储进行身份验证的安全域。
示例:每个主机控制器上的安全性 Realm
<security-realm name="HTTPSRealm"> <authentication> <truststore provider="PKCS11" keystore-password="strongP@ssword1"/> </authentication> </security-realm>
注意在每个主机上重复此过程。
使用您刚才创建的安全域,保护 master 域控制器上的 HTTP 接口。
示例:HTTP 接口
<management-interfaces> <http-interface security-realm="HTTPSRealm"> <http-upgrade enabled="true"/> <socket interface="management" port="${jboss.management.http.port:9990}"/> </http-interface> </management-interfaces>
使用每个主机控制器上的 SSL/TLS 域连接到主域控制器。
更新用于连接主域控制器的安全域。在服务器没有运行时,修改主机控制器的配置文件,如
host.xml
或host-slave.xml
。示例:主机操作系统配置文件
<domain-controller> <remote security-realm="HTTPSRealm"> <discovery-options> <static-discovery name="primary" protocol="${jboss.domain.master.protocol:remote}" host="${jboss.domain.master.address}" port="${jboss.domain.master.port:9990}"/> </discovery-options> </remote> </domain-controller>
更新每个服务器如何连接其主机控制器。
示例:服务器配置
<server name="my-server" group="my-server-group"> <ssl ssl-protocol="TLS" trust-manager-algorithm="PKIX" truststore-type="PKCS11" truststore-password="strongP@ssword1"/> </server>
在受管域中配置双向 SSL/TLS。
要启用双向 SSL/TLS,在 master 域控制器的 SSL/TLS 安全域中添加信任存储身份验证方法,请执行以下管理 CLI 命令:
/host=master/core-service=management/security-realm=HTTPSRealm/authentication=truststore:add(keystore-provider="PKCS11",keystore-password="strongP@ssword1") reload --host=master
您还需要更新每个主机控制器的安全域使其包含 SSL 服务器身份,请执行以下管理 CLI 命令:
/host=host1/core-service=management/security-realm=HTTPSRealm/server-identity=ssl:add(keystore-provider=PKCS11, keystore-password="strongP@ssword1",enabled-protocols=["TLSv1.1"]) reload --host=host1
重要您还需要确保将每个主机的证书导入到域控制器的信任存储中。
1.2.16. 使用红帽单点登录保护管理控制台
您也可以使用 Red Hat Single Sign-On 来保护使用 elytron
子系统的 JBoss EAP 管理控制台。
只有运行单机服务器时,此功能才可用,且在运行受管域时不支持此功能。不支持使用 Red Hat Single Sign-On 保护管理 CLI。
使用以下步骤设置 Red Hat Single Sign-On 以针对 JBoss EAP 管理控制台验证用户身份。
为 JBoss EAP 管理配置 Red Hat Single Sign-On 服务器
- 下载并安装 Red Hat Single Sign-On 服务器。有关基本说明,请参阅 Red Hat Single Sign-On 入门指南。
启动 Red Hat Single Sign-On 服务器。
这个步骤假设您使用端口偏移
100
启动服务器。$ RHSSO_HOME/bin/standalone.sh -Djboss.socket.binding.port-offset=100
登录位于 http://localhost:8180/auth/ 的 Red Hat Single Sign-On 管理控制台。
如果这是您第一次访问红帽单点登录管理控制台,系统将提示您创建初始管理用户。
创建一个名为
wildfly-infra
的新域。-
从域名旁边的下拉菜单中,点 Add realm,在 Name 字段中输入
wildfly-infra
,然后点 Create。
-
从域名旁边的下拉菜单中,点 Add realm,在 Name 字段中输入
创建名为
wildfly-console
的客户端应用程序。重要此客户端应用程序的名称必须是
wildfly-console
。- 选择 Clients 并点 Create。
-
在 Client ID 字段中输入
wildfly-console
,然后点 Save。 -
在出现的 Settings 屏幕中,将 Access Type 设置为
public
,将Valid Redirect URIs 设置为http://localhost:9990/console/*
,Web Origins 设为http://localhost:9990
,然后单击 Save。
创建名为
wildfly-management
的客户端应用程序。- 选择 Clients 并点 Create。
-
在 Client ID 字段中输入
wildfly-management
,然后点 Save。 -
在出现的 Settings 屏幕中,将 Access Type 设置为
bearer-only
并点 Save。
创建角色来授予 JBoss EAP 管理控制台的访问权限。
- 选择 Roles,再单击 Add Role。
在 Role Name 字段中输入
ADMINISTRATOR
,然后点击 Save。此流程使用
ADMINISTRATOR
角色,但支持其他角色。如需更多信息,请参阅 JBoss EAP 安全架构中的基于角色的访问控制部分。
创建一个用户,并为他们分配
ADMINISTRATOR
角色。- 选择 Users 并点 Add user。
-
在 Username 字段中输入
jboss
,然后点 Save。 - 选择 Credentials 选项卡并为这个用户设置密码。
- 选择 Role Mappings 选项卡,选择 ADMINISTRATOR 并点 Add selected 向此用户添加角色。
在 JBoss EAP 上安装 Red Hat Single Sign-On Client Adapter
- 从 软件下载页面,下载 JBoss EAP 7 的 Red Hat Single Sign-On 客户端适配器。
- 将此文件解压缩到 JBoss EAP 安装的根目录中。
执行
adapter-elytron-install-offline.cli
脚本来配置您的 JBoss EAP 安装。$ EAP_HOME/bin/jboss-cli.sh --file=adapter-elytron-install-offline.cli
重要此脚本将
keycloak
子系统以及elytron
和undertow
子系统中的其他资源添加到standalone.xml
。如果您需要使用不同的配置文件,请根据需要修改脚本。
配置 JBoss EAP 以使用 Red Hat Single Sign-On
在
EAP_HOME/bin/
目录中,创建包含以下内容的文件protect-eap-mgmt-services.cli
。# Create a realm for both JBoss EAP console and mgmt interface /subsystem=keycloak/realm=wildfly-infra:add(auth-server-url=http://localhost:8180/auth,realm-public-key=REALM_PUBLIC_KEY) # Create a secure-deployment in order to protect mgmt interface /subsystem=keycloak/secure-deployment=wildfly-management:add(realm=wildfly-infra,resource=wildfly-management,principal-attribute=preferred_username,bearer-only=true,ssl-required=EXTERNAL) # Protect HTTP mgmt interface with Keycloak adapter /core-service=management/management-interface=http-interface:undefine-attribute(name=security-realm) /subsystem=elytron/http-authentication-factory=keycloak-mgmt-http-authentication:add(security-domain=KeycloakDomain,http-server-mechanism-factory=wildfly-management,mechanism-configurations=[{mechanism-name=KEYCLOAK,mechanism-realm-configurations=[{realm-name=KeycloakOIDCRealm,realm-mapper=keycloak-oidc-realm-mapper}]}]) /core-service=management/management-interface=http-interface:write-attribute(name=http-authentication-factory,value=keycloak-mgmt-http-authentication) /core-service=management/management-interface=http-interface:write-attribute(name=http-upgrade, value={enabled=true, sasl-authentication-factory=management-sasl-authentication}) # Enable RBAC where roles are obtained from the identity /core-service=management/access=authorization:write-attribute(name=provider,value=rbac) /core-service=management/access=authorization:write-attribute(name=use-identity-roles,value=true) # Create a secure-server in order to publish the JBoss EAP console configuration via mgmt interface /subsystem=keycloak/secure-server=wildfly-console:add(realm=wildfly-infra,resource=wildfly-console,public-client=true) # reload reload
-
在本文件中,将
REALM_PUBLIC_KEY
替换为公钥的值。要获取这个值,请登录 Red Hat Single Sign-On 管理控制台,选择wildfly-infra
realm,导航到 Realm SettingsKeys,然后点击 Public key。 启动 JBoss EAP。
$ EAP_HOME/bin/standalone.sh
重要如果在安装 Red Hat Single Sign-On 客户端适配器时使用除
standalone.xml
以外的配置文件,则修改adapter-
elytron-install-offline.cli 脚本将使用该配置启动 JBoss EAP。执行
protect-eap-mgmt-services.cli
脚本。$ EAP_HOME/bin/jboss-cli.sh --connect --file=protect-eap-mgmt-services.cli
现在,当您访问位于 http://localhost:9990/console/ 的 JBoss EAP 管理控制台时,您会被重定向到 Red Hat Single Sign-On 以登录,然后在成功验证后重新重定向到 JBoss EAP 管理控制台。