第 7 章 配置安全性
7.1. 保护远程连接 复制链接链接已复制到粘贴板!
7.1.1. 使用传统安全子系统 复制链接链接已复制到粘贴板!
您可以使用 JBoss EAP 中的传统 安全 子系统来保护 messaging-activemq 子系统。传统的 security 子系统使用传统安全域和域。有关安全域 和安全域的更多信息,请参阅 JBoss EAP 安全架构指南。messaging-activemq 子系统已预先配置,以使用名为 ApplicationRealm 的安全域和名为 other 的安全域。
旧版 安全性 子系统方法是 JBoss EAP 7.0 中的默认配置。
ApplicationRealm 在配置文件顶部附近定义。
顾名思义,ApplicationRealm 是 JBoss EAP 中以应用为焦点的所有子系统(如 messaging-activemq、undertow 和 ejb3 子系统)的默认安全域。ApplicationRealm 使用本地文件系统存储用户名和哈希密码。为方便起见,JBoss EAP 包含一个可用于添加用户到 ApplicationRealm 的脚本。详情请参阅 JBoss EAP 如何配置服务器安全指南中的默认用户 配置。
其他 安全域是与应用相关的子系统(如 messaging-activemq )的默认安全域。它在配置中没有被显式声明,但您可以使用以下管理 CLI 命令确认 messaging-activemq 子系统使用了哪一个安全域:
/subsystem=messaging-activemq/server=default:read-attribute(name=security-domain)
{
"outcome" => "success",
"result" => "other"
}
/subsystem=messaging-activemq/server=default:read-attribute(name=security-domain)
{
"outcome" => "success",
"result" => "other"
}
您还可以更新使用哪个安全域:
/subsystem=messaging-activemq/server=default:write-attribute(name=security-domain, value=mySecurityDomain)
/subsystem=messaging-activemq/server=default:write-attribute(name=security-domain, value=mySecurityDomain)
JBoss EAP如何配置服务器安全指南包含有关如何创建新安全域和域的更多信息。目前,需要注意 其他 域如何出现在配置中:
"other"域使用两个登录模块作为其身份验证方式。第一个模块 Remoting 对 远程 EJB 调用进行身份验证,而 RealmDirect 模块使用给定域中定义的信息存储来验证用户。本例中使用了默认的 realm ApplicationRealm,因为没有声明 realm。每个模块 的 password-stacking 选项设置为 使用FirstPass,它会告诉 login-module 存储经过身份验证的用户的主体名称和密码。有关登录模块及其选项的更多详细信息,请参阅 JBoss EAP 登录模块参考。
7.1.2. 使用 Elytron 子系统 复制链接链接已复制到粘贴板!
您也可以使用 elytron 子系统来保护 messaging-activemq 子系统。您可以在如何 配置身份管理 指南的 E lytron Subsystem 部分中找到有关使用 e lytron 子系统以及创建和 Elytron 安全域的更多信息。
使用 Elytron 安全域:
取消定义传统安全域。
/subsystem=messaging-activemq/server=default:undefine-attribute(name=security-domain)
/subsystem=messaging-activemq/server=default:undefine-attribute(name=security-domain)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置 Elytron 安全域。
/subsystem=messaging-activemq/server=default:write-attribute(name=elytron-domain, value=myElytronSecurityDomain) reload
/subsystem=messaging-activemq/server=default:write-attribute(name=elytron-domain, value=myElytronSecurityDomain) reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.1.2.1. 使用管理控制台设置 Elytron 安全域 复制链接链接已复制到粘贴板!
使用管理控制台设置 Elytron 安全域:
- 访问管理控制台。如需更多信息,请参阅 JBoss EAP 配置指南中的管理控制台。
-
导航到 Configuration
Subsystems Messaging(ActiveMQ) Server default,然后点 View。 - 导航到 Security 选项卡,再单击 Edit。
- 添加或编辑 Elytron Domain 的值。
- 单击 Save 以保存更改。
- 重新加载服务器以使更改生效。
您只能定义 security-domain 或 elytron-domain,但不能同时定义这两个域。如果未定义,JBoss EAP 将使用 其他 的安全域 默认值,它们映射到 其他 传统安全域。
7.1.3. 保护传输 复制链接链接已复制到粘贴板!
默认情况下,JBoss EAP 消息传递捆绑的默认 http-connector 不受保护。您可以按照说明为 SSL/TLS 保护消息传输和启用 Web 流量,从而针对如何为 JBoss EAP 配置服务器安全性的应用配置单向和双向 SSL/TLS。
以上保护消息传输的方法也可用于保护 http-acceptor。
在按上述方式配置传输时,您必须执行以下步骤:
-
默认情况下,所有 HTTP 接收器都配置为使用默认的
http-listener,它侦听 HTTP 端口。您必须将 HTTP 接收器配置为使用https-listener,它侦听 HTTPS 端口。 -
必须更新所有 HTTP 连接器的
socket-binding元素,以使用https而不是http。 -
通过 SSL/TLS 通信的每个
http-connector都必须将启用ssl的参数设置为true。 -
如果使用 HTTP 连接器连接到其他服务器,您必须配置相关参数,如
trust-store和key-store。保护http-connector要求您配置与远程连接器相同的参数,如 保护远程连接器所述。
如需有关为消息传递传输配置接收器和连接器的信息,请参阅配置消息传递传输。
7.1.4. 保护远程连接器 复制链接链接已复制到粘贴板!
如果您没有使用默认的 http-connector,而是创建了自己的 remote-connector 和 remote-acceptor 进行 TCP 通讯,您可以使用下表中的属性为 SSL/TLS 配置 SSL/TLS。属性显示在配置中,作为接收器或连接器的子 <param> 元素 的一部分。
通常,服务器拥有其专用 SSL/TLS 密钥,并与客户端共享其公钥。在这种情况下,服务器在 远程接收器中定义 。由于每个客户端都可以位于不同的位置,并且使用不同的密码加密,因此不建议在 key- 参数store-path 和 key-store-passwordremote 属性。取而代之,使用系统属性 -connector 上指定 store-passwordtrust-store-path 和 trust-javax.net.ssl.trustStore 和 javax.net 在客户端上配置这些参数。为 .ssl.trustStorePassword远程连接器配置的参数是 ,ssl- enabled=true并使用DefaultSslContext=true。但是,如果服务器 使用远程连接器 连接到另一服务器,那么在这种情况下,为远程 连接器设置 trust-store-path 和 trust-store-password 参数有意义。
在以上用例中,remote-acceptor 会使用以下管理 CLI 命令创建:
/subsystem=messaging-activemq/server=default/remote-acceptor=mySslAcceptor:add(socket-binding=netty,params={ssl-enabled=true, key-store-path=PATH/TO/server.jks, key-store-password=${VAULT::server-key::key-store-password::sharedKey}})
/subsystem=messaging-activemq/server=default/remote-acceptor=mySslAcceptor:add(socket-binding=netty,params={ssl-enabled=true, key-store-path=PATH/TO/server.jks, key-store-password=${VAULT::server-key::key-store-password::sharedKey}})
要根据以上用例创建 remote-connector,请使用以下管理 CLI 命令:
/subsystem=messaging-activemq/server=default/remote-connector=mySslConnector:add(socket-binding=netty,params={ssl-enabled=true, useDefaultSslContext=true})
/subsystem=messaging-activemq/server=default/remote-connector=mySslConnector:add(socket-binding=netty,params={ssl-enabled=true, useDefaultSslContext=true})
管理 CLI 还允许您在已存在的 remote-acceptor 或 remote-connector 中添加参数:
/subsystem=messaging-activemq/server=default/remote-connector=myOtherSslConnector:map-put(name=params,key=ssl-enabled,value=true)
/subsystem=messaging-activemq/server=default/remote-connector=myOtherSslConnector:map-put(name=params,key=ssl-enabled,value=true)
请注意,remote-acceptor 和 remote-connector 都引用 套接字绑定来声明要 用于通信的端口。如需有关套接字绑定及其与接收器和连接器关系的更多信息,请参阅消息传递子系统配置概述。
| 属性 | 描述 |
|---|---|
| enabled-cipher-suites | 可用于配置接收器或连接器。这是用逗号分开的密码套件列表,用于 SSL/TLS 通信。默认值为 null,表示将使用 JVM 的默认值。 |
| enabled-protocols | 可用于配置接收器或连接器。这是用于 SSL/TLS 通信的以逗号分隔的协议列表。默认值为 null,表示将使用 JVM 的默认值。 |
| key-store-password |
在接收器上使用时,这是服务器端密钥存储的密码。 |
| key-store-path |
在接收器上使用时,这是服务器上保存服务器证书的 SSL/TLS 密钥存储的路径。对证书使用自签名或由颁发机构签名的证书。 |
| key-store-provider | 定义在其中存储密钥的文件格式,例如 PKCS11 或 PKCS12。接受的值是 JDK 特定的。 |
| needs-client-auth |
此属性仅适用于接收器。它告知客户端连接到此接收器的客户端,需要双向 SSL/TLS。有效值为 |
| ssl-enabled |
必须为 |
| trust-store-password |
在接收器上使用时,这是服务器端信任存储的密码。只有在使用双向 SSL/TLS 时,这才与接收器相关。 |
| trust-store-path |
在接收器上使用时,这是服务器端 SSL/TLS 密钥存储的路径,该存储保存服务器信任的所有客户端的密钥。只有在使用双向 SSL/TLS 时,这才与接收器相关。 |
| trust-store-provider | 定义在其中存储密钥的文件格式,例如 PKCS11 或 PKCS12。接受的值是 JDK 特定的。 |