5.2. 验证客户端


5.2.1. 客户端验证方法

要在代理中配置客户端身份验证,您可以使用以下方法之一:

用户名和密码的身份验证

使用以下选项之一直接验证用户凭证:

  • 针对存储在代理中的一组属性文件检查凭证。您还可以配置一个 客户机 帐户,允许限制对代理的访问,并组合登录模块来支持更复杂的用例。
  • 配置 轻量级目录访问协议 (LDAP)登录模块,以针对存储在中央 X.500 目录服务器中的用户数据检查客户端凭据。
基于证书的身份验证
配置双向 传输层安全 (TLS),以要求代理和客户端同时为 mutual 身份验证提供证书。管理员还必须配置定义批准的客户端用户和角色的属性文件。这些属性文件存储在代理中。
基于 Kerberos 的身份验证
配置代理,以使用 简单身份验证和安全层 (SASL)框架中的 GSSAPI 机制为客户端验证 Kerberos 安全凭证。

以下章节描述了如何配置 user-and-password- 和基于证书的身份验证。

其他资源

5.2.2. 根据属性文件配置用户和密码身份验证

AMQ Broker 支持灵活的基于角色的安全模型,以便根据其地址将安全应用到队列。队列绑定到地址一对一(用于点到点的消息传递)或多对一(用于发布订阅消息传递)。当消息发送到地址时,代理会查找绑定到该地址的队列集合,并将消息路由到那个队列集合。

当您需要基本用户和密码身份验证时,请使用 PropertiesLoginModule 来定义它。这个登录模块会根据保存在代理中的以下配置文件检查用户凭证:

artemis-users.properties
用于定义用户和对应的密码
artemis-roles.properties
用于定义角色并将用户分配给这些角色
login.config
用于为用户和密码身份验证和客户机访问配置登录模块

artemis-users.properties 文件可以包含哈希密码,以保证安全性。

以下部分介绍了如何配置:

5.2.2.1. 配置基本用户和密码身份验证

以下步骤演示了如何配置基本用户和密码身份验证。

流程

  1. 打开 & lt;broker_instance_dir> /etc/login.config 配置文件。默认情况下,新的 AMQ Broker 7.13 实例中此文件包括以下行:

    activemq {
       org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule sufficient
           debug=false
           reload=true
           org.apache.activemq.jaas.properties.user="artemis-users.properties"
           org.apache.activemq.jaas.properties.role="artemis-roles.properties";
             };
    Copy to Clipboard Toggle word wrap
    activemq
    配置的别名。
    org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule
    实施类。
    足够

    指定 PropertiesLoginModule 需要哪个级别的成功。您可以设置的值有:

    • 必需 :需要登录模块才能成功。无论成功或失败如何,身份验证将继续在给定别名下配置的登录模块列表。
    • requisite :需要登录模块才能成功。失败会立即将控制权返回到应用。身份验证不会停机给定别名下配置的登录模块的列表。
    • sufficient: 登录模块不需要成功。如果成功,则控制会返回应用程序,身份验证也不会进一步继续。如果失败,身份验证会尝试继续在给定别名下配置的登录模块列表。
    • 可选 登录模块不是必需的。无论成功或失败如何,身份验证将继续在给定别名下配置的登录模块列表。
    org.apache.activemq.jaas.properties.user
    指定为登录模块实现定义一组用户和密码的属性文件。
    org.apache.activemq.jaas.properties.role
    指定将用户映射到登录模块实施定义的角色的属性文件。
  2. 打开 & lt;broker_instance_dir> /etc/artemis-users.properties 配置文件。
  3. 添加用户并为用户分配密码。例如:

    user1=secret
    user2=access
    user3=myPassword
    Copy to Clipboard Toggle word wrap
  4. 打开 & lt;broker_instance_dir> /etc/artemis-roles.properties 配置文件。
  5. 将角色名称分配给您之前添加到 artemis-users.properties 文件中的用户。例如:

    admin=user1,user2
    developer=user3
    Copy to Clipboard Toggle word wrap
  6. 打开 & lt;broker_instance_dir> /etc/bootstrap.xml 配置文件。
  7. 如有必要,将您的安全域别名(在这个实例中,activemq)添加到文件中,如下所示:

    <jaas-security domain="activemq"/>
    Copy to Clipboard Toggle word wrap

5.2.2.2. 配置客户机访问

对于没有登录凭证的用户,或者凭证失败身份验证,您可以使用客户机帐户授予对代理的有限访问权限。

您可以使用 命令行参数创建启用了客户机访问权限的代理实例;-- allow-anonymous (其相反,即 -require-login)。

以下步骤演示了如何配置客户机访问。

先决条件

流程

  1. 打开之前为基本用户和密码身份验证配置的 & lt;broker_instance_dir> /etc/login.config 配置文件。
  2. 在您之前添加的属性登录模块配置后,添加客户机登录模块配置。例如:

    activemq {
      org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule sufficient
          debug=true
          org.apache.activemq.jaas.properties.user="artemis-users.properties"
          org.apache.activemq.jaas.properties.role="artemis-roles.properties";
    
      org.apache.activemq.artemis.spi.core.security.jaas.GuestLoginModule sufficient
          debug=true
          org.apache.activemq.jaas.guest.user="guest"
          org.apache.activemq.jaas.guest.role="restricted";
    };
    Copy to Clipboard Toggle word wrap
    org.apache.activemq.artemis.spi.core.security.jaas.GuestLoginModule
    实施类。
    org.apache.activemq.jaas.guest.user
    分配给匿名用户的用户名。
    org.apache.activemq.jaas.guest.role
    分配给匿名用户的角色。

根据前面的配置,如果用户提供凭证,则会激活用户和密码身份验证模块。如果用户不提供凭证,或者提供的凭证不正确,则会激活客户机身份验证。

5.2.2.2.1. 客户机访问示例

以下示例显示,在只有没有凭证的用户作为客户机登录的情况下,在用例中配置了客户机访问权限。在本例中,观察登录模块的顺序与之前的配置过程已撤销。另外,附加到属性登录模块的标志被改为 requisite

activemq {
    org.apache.activemq.artemis.spi.core.security.jaas.GuestLoginModule sufficient
        debug=true
       credentialsInvalidate=true
       org.apache.activemq.jaas.guest.user="guest"
       org.apache.activemq.jaas.guest.role="guests";

    org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule requisite
        debug=true
        org.apache.activemq.jaas.properties.user="artemis-users.properties"
        org.apache.activemq.jaas.properties.role="artemis-roles.properties";
};
Copy to Clipboard Toggle word wrap

根据上述配置,如果没有提供登录凭据,则会激活客户机身份验证模块。

对于这个用例,在客户机登录模块配置中,credentialsInvalidate 选项必须设置为 true

如果提供了凭据,则会激活属性登录模块。凭证必须有效。

其他资源

5.2.3. 配置基于证书的身份验证

Java 身份验证和授权服务 (JAAS)证书登录模块处理使用传输层安全(TLS)的客户端的身份验证和授权。该模块需要使用双向 传输层安全 (TLS),客户端需要使用自己的证书进行配置。身份验证在 TLS 握手期间执行,而不是由 JAAS 证书登录模块直接执行。

证书登录模块的角色是:

  • 限制可接受的用户集合。只有用户 可辨识名称 (DN)在相关属性文件中明确列出,才能进行身份验证。
  • 将组列表与收到的用户身份关联。这有助于授权。
  • 需要存在传入客户端证书(默认情况下,TLS 层配置为将客户端证书存在为可选)。

certificate 登录模块将证书 DN 集合存储在一对扁平文本文件中。文件将用户名和组 ID 列表与每个 DN 关联。

证书登录模块由 org.apache.activemq.artemis.spi.core.security.jaas.TextFileCertificateLoginModule 类实现。

5.2.3.1. 配置代理以使用基于证书的身份验证

以下流程演示了如何将代理配置为使用基于证书的身份验证。

先决条件

流程

  1. 从之前导入到代理密钥存储的用户证书获取 Subject Distinguished Names (DNs)。

    1. 将密钥存储文件中的证书导出到临时文件。例如:

      keytool -export -file <file_name> -alias broker-localhost -keystore broker.ks -storepass <password>
      Copy to Clipboard Toggle word wrap
    2. 打印导出的证书的内容:

      keytool -printcert -file <file_name>
      Copy to Clipboard Toggle word wrap

      输出结果类似如下:

      Owner: CN=localhost, OU=broker, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
      Issuer: CN=localhost, OU=broker, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
      Serial number: 4537c82e
      Valid from: Thu Oct 19 19:47:10 BST 2006 until: Wed Jan 17 18:47:10 GMT 2007
      Certificate fingerprints:
               MD5:  3F:6C:0C:89:A8:80:29:CC:F5:2D:DA:5C:D7:3F:AB:37
               SHA1: F0:79:0D:04:38:5A:46:CE:86:E1:8A:20:1F:7B:AB:3A:46:E4:34:5C
      Copy to Clipboard Toggle word wrap

      Owner 条目是主题 DN。用于输入 Subject DN 的格式取决于您的平台。以上字符串也可以表示为;

      Owner: `CN=localhost,\ OU=broker,\ O=Unknown,\ L=Unknown,\ ST=Unknown,\ C=Unknown`
      Copy to Clipboard Toggle word wrap
  2. 配置基于证书的身份验证。

    1. 打开 & lt;broker_instance_dir&gt; /etc/login.config 配置文件。添加证书登录模块并引用用户和角色属性文件。例如:

      activemq {
          org.apache.activemq.artemis.spi.core.security.jaas.TextFileCertificateLoginModule
              debug=true
              org.apache.activemq.jaas.textfiledn.user="artemis-users.properties"
              org.apache.activemq.jaas.textfiledn.role="artemis-roles.properties";
      };
      Copy to Clipboard Toggle word wrap
      org.apache.activemq.artemis.spi.core.security.jaas.TextFileCertificateLoginModule
      实施类。
      org.apache.activemq.jaas.textfiledn.user
      指定为登录模块实现定义一组用户和密码的属性文件。
      org.apache.activemq.jaas.textfiledn.role
      指定将用户映射到登录模块实施定义的角色的属性文件。
    2. 打开 & lt;broker_instance_dir&gt; /etc/artemis-users.properties 配置文件。用户及其对应的 DN 在此文件中定义。例如:

      system=CN=system,O=Progress,C=US
      user=CN=humble user,O=Progress,C=US
      guest=CN=anon,O=Progress,C=DE
      Copy to Clipboard Toggle word wrap

      例如,基于上述配置,名为 system 的用户映射到 CN=system,O=Progress,C=US Subject DN。

    3. 打开 & lt;broker_instance_dir&gt; /etc/artemis-roles.properties 配置文件。可用的角色和包含这些角色的用户在此文件中定义。例如:

      admins=system
      users=system,user
      guests=guest
      Copy to Clipboard Toggle word wrap

      在前面的配置中,对于 users 角色,您将以逗号分隔列表列出多个用户。

    4. 请确保您的安全域别名(在本例中是 activemq)在 bootstrap.xml 中引用,如下所示:

      <jaas-security domain="activemq"/>
      Copy to Clipboard Toggle word wrap

使用 简单身份验证和安全层 (SASL) EXTERNAL 机制配置参数,在连接到代理时为基于证书的身份验证配置您的 AQMP 客户端。

代理会以验证任何证书的相同方式验证您的 AMQP 客户端的 Transport Layer Security (TLS)/Secure Sockets Layer (SSL) 证书:

  1. 代理读取客户端的 TLS/SSL 证书,以从证书的主题获取身份。
  2. 证书主题由证书登录模块映射到代理身份。然后,代理会根据其角色授权用户。

以下流程演示了如何为 AMQP 客户端配置基于证书的身份验证。要让您的 AMQP 客户端使用基于证书的身份验证,您必须将配置参数添加到客户端用于连接代理的 URI 中。

先决条件

流程

  1. 打开包含 URI 的资源以进行编辑:

    amqps://localhost:5500
    Copy to Clipboard Toggle word wrap
  2. 添加参数 sslEnabled=true 来为连接启用 TSL/SSL :

    amqps://localhost:5500?sslEnabled=true
    Copy to Clipboard Toggle word wrap
  3. 添加与客户端信任存储和密钥存储相关的参数,以便使用代理启用 TSL/SSL 证书交换:

    amqps://localhost:5500?sslEnabled=true&trustStorePath=<trust_store_path>&trustStorePassword=<trust_store_password>&keyStorePath=<key_store_path>&keyStorePassword=<key_store_password>
    Copy to Clipboard Toggle word wrap
  4. 添加参数 saslMechanisms=EXTERNAL,以使用其 TSL/SSL 证书中找到的身份请求代理验证客户端:

    amqps://localhost:5500?sslEnabled=true&trustStorePath=<trust_store_path>&trustStorePassword=<trust_store_password>&keyStorePath=<key_store_path>&keyStorePassword=<key_store_password>&saslMechanisms=EXTERNAL
    Copy to Clipboard Toggle word wrap

其他资源

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat