第 7 章 配置安全性


7.1. 保护远程连接

7.1.1. 使用传统安全子系统

您可以使用 JBoss EAP 中的传统 安全 子系统来保护 messaging-activemq 子系统。传统的 security 子系统使用传统安全域和域。有关安全域 和安全域的更多信息,请参阅 JBoss EAP 安全架构指南messaging-activemq 子系统已预先配置,以使用名为 ApplicationRealm 的安全域和名为 other 的安全域。

注意

旧版 安全性 子系统方法是 JBoss EAP 7.0 中的默认配置。

ApplicationRealm 在配置文件顶部附近定义。

<management>
  <security-realms>
      ...
       <security-realm name="ApplicationRealm">
          <authentication>
              <local default-user="$local" allowed-users="*" skip-group-loading="true"/>
              <properties
                path="application-users.properties"
                relative-to="jboss.server.config.dir" />
          </authentication>
          <authorization>
              <properties
                path="application-roles.properties"
                relative-to="jboss.server.config.dir" />
          </authorization>
       </security-realm>
  </security-realms>
  ...
</management>
Copy to Clipboard Toggle word wrap

顾名思义,ApplicationRealm 是 JBoss EAP 中以应用为焦点的所有子系统(如 messaging-activemqundertowejb3 子系统)的默认安全域。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"
}
Copy to Clipboard Toggle word wrap

您还可以更新使用哪个安全域:

/subsystem=messaging-activemq/server=default:write-attribute(name=security-domain, value=mySecurityDomain)
Copy to Clipboard Toggle word wrap

JBoss EAP如何配置服务器安全指南包含有关如何创建新安全域和域的更多信息。目前,需要注意 其他 域如何出现在配置中:

<subsystem xmlns="urn:jboss:domain:security:2.0">
     <security-domains>
         <security-domain name="other" cache-type="default">
             <authentication>
                 <login-module code="Remoting" flag="optional">
                     <module-option name="password-stacking" value="useFirstPass"/>
                 </login-module>
                 <login-module code="RealmDirect" flag="required">
                     <module-option name="password-stacking" value="useFirstPass"/>
                 </login-module>
             </authentication>
         </security-domain>
         ...
     <security-domains>
 </subsystem>
Copy to Clipboard Toggle word wrap

"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 安全域:

  1. 取消定义传统安全域。

    /subsystem=messaging-activemq/server=default:undefine-attribute(name=security-domain)
    Copy to Clipboard Toggle word wrap
  2. 设置 Elytron 安全域。

    /subsystem=messaging-activemq/server=default:write-attribute(name=elytron-domain, value=myElytronSecurityDomain)
    
    reload
    Copy to Clipboard Toggle word wrap

7.1.2.1. 使用管理控制台设置 Elytron 安全域

使用管理控制台设置 Elytron 安全域:

  1. 访问管理控制台。如需更多信息,请参阅 JBoss EAP 配置指南中的管理控制台
  2. 导航到 Configuration Subsystems Messaging(ActiveMQ) Server default,然后点 View
  3. 导航到 Security 选项卡,再单击 Edit
  4. 添加或编辑 Elytron Domain 的值。
  5. 单击 Save 以保存更改
  6. 重新加载服务器以使更改生效。
注意

您只能定义 security-domainelytron-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-storekey-store。保护 http-connector 要求您配置与 远程连接器相同的参数,保护远程连接器所述

如需有关为消息传递传输配置接收器和连接器的信息,请参阅配置消息传递传输。

7.1.4. 保护远程连接器

如果您没有使用默认的 http-connector,而是创建了自己的 remote-connectorremote-acceptor 进行 TCP 通讯,您可以使用下表中的属性为 SSL/TLS 配置 SSL/TLS。属性显示在配置中,作为接收器或连接器的子 <param> 元素 的一部分。

通常,服务器拥有其专用 SSL/TLS 密钥,并与客户端共享其公钥。在这种情况下,服务器在 远程接收器中定义 key- store-path 和 key-store-password 参数。由于每个客户端都可以位于不同的位置,并且使用不同的密码加密,因此不建议在 remote -connector 上指定 trust-store-path 和 trust- store-password 属性。取而代之,使用系统属性 javax.net.ssl.trustStore 和 javax.net .ssl.trustStorePassword 在客户端上配置这些参数。为 远程连接器配置的参数是 ssl- enabled=true并使用DefaultSslContext=true。但是,如果服务器 使用远程连接器 连接到另一服务器,那么在这种情况下,为远程 连接器设置 trust-store-pathtrust-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}})
Copy to Clipboard Toggle word wrap

要根据以上用例创建 remote-connector,请使用以下管理 CLI 命令:

/subsystem=messaging-activemq/server=default/remote-connector=mySslConnector:add(socket-binding=netty,params={ssl-enabled=true, useDefaultSslContext=true})
Copy to Clipboard Toggle word wrap

管理 CLI 还允许您在已存在的 remote-acceptorremote-connector 中添加参数:

/subsystem=messaging-activemq/server=default/remote-connector=myOtherSslConnector:map-put(name=params,key=ssl-enabled,value=true)
Copy to Clipboard Toggle word wrap

请注意,remote-acceptorremote-connector 都引用 套接字绑定来声明要 用于通信的端口。如需有关套接字绑定及其与接收器和连接器关系的更多信息,请参阅消息传递子系统配置概述

Expand
表 7.1. NettyConnectorFactory的 SSL/TLS 相关配置属性
属性描述

enabled-cipher-suites

可用于配置接收器或连接器。这是用逗号分开的密码套件列表,用于 SSL/TLS 通信。默认值为 null,表示将使用 JVM 的默认值。

enabled-protocols

可用于配置接收器或连接器。这是用于 SSL/TLS 通信的以逗号分隔的协议列表。默认值为 null,表示将使用 JVM 的默认值。

key-store-password

在接收器上使用时,这是服务器端密钥存储的密码。

在连接器上使用时,这是客户端密钥存储的密码。只有在使用双向 SSL/TLS 时,这才与连接器相关。虽然可以在服务器上配置此值,但它会被客户端下载和使用。

如果客户端需要使用与服务器上设置的不同密码不同的密码,它可以使用标准的 javax.net.ssl.keyStorePassword 系统属性覆盖服务器端设置。如果客户端上的另一个组件已在使用标准系统属性,则使用 org.apache.activemq.ssl.keyStorePassword 属性。

key-store-path

在接收器上使用时,这是服务器上保存服务器证书的 SSL/TLS 密钥存储的路径。对证书使用自签名或由颁发机构签名的证书。

在连接器中使用时,这是客户端 SSL/TLS 密钥存储的路径,该存储存放客户端证书。只有在使用双向 SSL/TLS 时,这才与连接器相关。

虽然此值在服务器上配置,但它会被客户端下载和使用。如果客户端需要使用与服务器上设置的其他路径不同的路径,它可以通过使用标准 javax.net.ssl.keyStore 系统属性来覆盖服务器端设置。如果客户端上的另一个组件已在使用 standard 属性,则使用 org.apache.activemq.ssl.keyStore 系统属性。

key-store-provider

定义在其中存储密钥的文件格式,例如 PKCS11 或 PKCS12。接受的值是 JDK 特定的。

needs-client-auth

此属性仅适用于接收器。它告知客户端连接到此接收器的客户端,需要双向 SSL/TLS。有效值为 true 或者 false。默认为 false

ssl-enabled

必须为 true 以启用 SSL/TLS。默认为 false

trust-store-password

在接收器上使用时,这是服务器端信任存储的密码。只有在使用双向 SSL/TLS 时,这才与接收器相关。

在连接器中使用时,这是客户端信任存储的密码。虽然可以在服务器上配置此值,但它会被客户端下载和使用。

如果客户端需要使用与服务器上设置的不同密码,可以使用标准的 javax.net.ssl.trustStorePassword 系统属性来覆盖服务器端设置。如果客户端上的另一个组件已在使用 standard 属性,则使用 org.apache.activemq.ssl.trustStorePassword 系统属性。

trust-store-path

在接收器上使用时,这是服务器端 SSL/TLS 密钥存储的路径,该存储保存服务器信任的所有客户端的密钥。只有在使用双向 SSL/TLS 时,这才与接收器相关。

在连接器上使用时,这是客户端一侧 SSL/TLS 密钥存储的路径,其中包含客户端信任的所有服务器的公钥。虽然可以在服务器上配置此值,但它会被客户端下载和使用。

如果客户端需要使用与服务器上设置不同的路径,它可以通过使用标准的 javax.net.ssl.trustStore 系统属性来覆盖服务器端设置。如果客户端上的另一个组件已在使用标准系统属性,则使用 org.apache.activemq.ssl.trustStore 系统属性。

trust-store-provider

定义在其中存储密钥的文件格式,例如 PKCS11 或 PKCS12。接受的值是 JDK 特定的。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat