5.2. 验证客户端


5.2.1. 客户端验证方法

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

基于用户名和密码的身份验证

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

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

以下章节描述了如何配置基于用户和密码的身份验证。

其他资源

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.12 实例中的此文件包括以下行:

    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";
             };
    ActiveMQ
    配置的别名。
    org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule
    实施类。
    sufficient

    指定 PropertiesLoginModule 所需的成功级别的标志。您可以设置的值有:

    • 必需 :需要登录模块才能成功。身份验证将继续关闭给定别名下配置的登录模块列表,而不考虑成功或失败。
    • 先决条件 :成功需要登录模块。故障会立即向应用程序返回控制。身份验证不会执行在给定别名下配置的登录模块列表。
    • 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
  4. 打开 & lt;broker_instance_dir> /etc/artemis-roles.properties 配置文件。
  5. 将角色名称分配给您之前添加到 artemis-users.properties 文件中的用户。例如:

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

    <jaas-security domain="activemq"/>

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";
    };
    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. 客户机访问示例

以下示例显示了为用例配置客户机访问,其中只有没有凭证的用户作为客户机登录。在本例中,观察登录模块的顺序与前面的配置过程相反。另外,附加到属性登录模块的 标志也会更改 为必需

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";
};

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

对于这个用例,在配置客户机登录模块时,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 (DN)。

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

      keytool -export -file <file_name> -alias broker-localhost -keystore broker.ks -storepass <password>
    2. 输出导出的证书的内容:

      keytool -printcert -file <file_name>

      输出结果类似如下:

      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

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

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

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

      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";
      };
      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

      例如,根据上述配置,名为 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

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

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

      <jaas-security domain="activemq"/>

5.2.3.2. 为 AMQP 客户端配置基于证书的身份验证

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

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

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

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

先决条件

流程

  1. 打开包含用于编辑的 URI 的资源:

    amqps://localhost:5500
  2. 添加参数 sslEnabled=true 来为连接启用 TSL/SSL :

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

    amqps://localhost:5500?sslEnabled=true&trustStorePath=<trust_store_path>&trustStorePassword=<trust_store_password>&keyStorePath=<key_store_path>&keyStorePassword=<key_store_password>
  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

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.