5.2. 验证客户端
5.2.1. 客户端验证方法
要在代理中配置客户端身份验证,您可以使用以下方法:
- 基于用户名和密码的身份验证
使用以下选项之一直接验证用户凭证:
- 针对本地存储在代理中的一组属性文件检查凭证。您还可以配置允许有限访问代理 的客户机 帐户,并组合登录模块来支持更复杂的用例。
- 配置 轻量级目录访问协议 (LDAP)登录模块,以针对存储在中央 X.500 目录服务器中的用户数据检查客户端凭证。
- 基于证书的验证
- 配置双向 传输层安全 (TLS),要求代理和客户端同时提供 mutual 身份验证的证书。管理员还必须配置定义批准的客户端用户和角色的属性文件。这些属性文件存储在代理中。
- 基于 Kerberos 的身份验证
- 配置代理,以使用 Simple Authentication and Security Layer (SASL)框架中的 GSSAPI 机制为客户端验证 Kerberos 安全凭证。
以下章节描述了如何配置基于用户和密码的身份验证。
其他资源
要了解 LDAP 和 Kerberos 的完整身份验证和授权工作流,请参阅:
5.2.2. 根据属性文件配置用户和密码身份验证
AMQ Broker 支持灵活的基于角色的安全模型,以便根据其地址将安全性应用到队列。队列绑定到一对点(用于点到点消息传递)或多对一(用于发布订阅消息传递)的地址。当消息发送到地址时,代理会查找绑定到该地址的队列集合,并将消息路由到该一组队列。
当您需要基本用户和密码身份验证时,请使用 PropertiesLoginModule
定义它。这个登录模块会根据保存在代理中的以下配置文件检查用户凭证:
artemis-users.properties
- 用于定义用户和对应的密码
artemis-roles.properties
- 用于定义角色并将用户分配给这些角色
login.config
- 用于为用户和密码身份验证和客户机访问配置登录模块
artemis-users.properties
文件可以包含哈希密码,以提高安全性。
以下部分演示了如何配置:
5.2.2.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
- 指定属性文件,将用户映射到登录模块实施的定义的角色。
-
打开 &
lt;broker_instance_dir> /etc/artemis-users.properties
配置文件。 添加用户并为用户分配密码。例如:
user1=secret user2=access user3=myPassword
-
打开 &
lt;broker_instance_dir> /etc/artemis-roles.properties
配置文件。 将角色名称分配给您之前添加到
artemis-users.properties
文件中的用户。例如:admin=user1,user2 developer=user3
-
打开 &
lt;broker_instance_dir> /etc/bootstrap.xml
配置文件。 如有必要,将您的安全域别名(在这个实例中,activemq)添加到该文件中,如下所示:
<jaas-security domain="activemq"/>
5.2.2.2. 配置客户机访问
对于没有登录凭证或其凭证失败的身份验证的用户,您可以使用客户机帐户授予代理的有限访问权限。
您可以使用命令行参数创建带有启用客户机访问权限的代理实例;-- allow-anonymous
(代表 --require-login
)。
以下步骤演示了如何配置客户机访问。
先决条件
- 此流程假设您已配置了基本用户和密码身份验证。如需了解更多相关信息,请参阅 第 5.2.2.1 节 “配置基本用户和密码身份验证”。
流程
-
打开之前为基本用户和密码身份验证配置的 &
lt;broker_instance_dir> /etc/login.config
配置文件。 在您之前添加的属性登录模块配置后,添加客户机登录模块配置。例如:
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
。
如果提供了凭证,则会激活属性登录模块。凭据必须有效。
其他资源
-
有关 Java 身份验证和授权服务 (JAAS)的更多信息,请参阅 Java 供应商中的文档。例如,有关配置
login.config
的 Oracle 指南,请参阅 Oracle Java 文档中的 JAAS 登录 配置文件。 - 要了解如何配置 LDAP 登录模块以验证客户端凭证,请参阅 第 5.4.1 节 “配置 LDAP 以验证客户端”。
- 有关在配置文件中加密密码的详情请参考 第 5.9.2 节 “在配置文件中加密密码”。
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. 将代理配置为使用基于证书的身份验证
以下流程演示了如何将代理配置为使用基于证书的身份验证。
先决条件
- 您必须将代理配置为使用双向传输层安全(TLS)。更多信息请参阅 第 5.1.2 节 “配置双向 TLS”。
流程
从之前导入到代理密钥存储的用户证书获取 Subject Distinguished Names (DN)。
将密钥存储文件的证书导出到临时文件中。例如:
keytool -export -file <file_name> -alias broker-localhost -keystore broker.ks -storepass <password>
输出导出的证书的内容:
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`
配置基于证书的身份验证。
打开 &
lt;broker_instance_dir> /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
- 指定属性文件,将用户映射到登录模块实施的定义的角色。
打开 &
lt;broker_instance_dir> /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。打开 &
lt;broker_instance_dir> /etc/artemis-roles.properties
配置文件。此文件中定义包含这些角色的可用角色和用户。例如:admins=system users=system,user guests=guest
在前面的配置中,对于
users
角色,您将以逗号分隔列表列出多个用户。请确保您的安全域别名(在本例中是 activemq)在
bootstrap.xml
中引用,如下所示:<jaas-security domain="activemq"/>
5.2.3.2. 为 AMQP 客户端配置基于证书的身份验证
在 连接到代理时,使用简单身份验证和安全层 (SASL) EXTERNAL 机制配置参数,为基于证书的身份验证配置 AQMP 客户端。
代理会以验证任何证书的相同方式验证您的 AMQP 客户端的 Transport Layer Security (TLS)/Secure Sockets Layer (SSL) 证书:
- 代理读取客户端的 TLS/SSL 证书,以从证书主体获取身份。
- 证书主题通过 certificate 登录模块映射到代理身份。然后,代理会根据用户的角色授权用户。
以下流程演示了如何为 AMQP 客户端配置基于证书的身份验证。要让 AMQP 客户端能够使用基于证书的身份验证,您必须将配置参数添加到客户端用来连接到代理的 URI 中。
先决条件
您必须已配置:
- 双向 TLS.更多信息请参阅 第 5.1.2 节 “配置双向 TLS”。
- 使用基于证书的验证的代理。更多信息请参阅 第 5.2.3.1 节 “将代理配置为使用基于证书的身份验证”。
流程
打开包含用于编辑的 URI 的资源:
amqps://localhost:5500
添加参数
sslEnabled=true
来为连接启用 TSL/SSL :amqps://localhost:5500?sslEnabled=true
添加与客户端信任存储和密钥存储相关的参数,以启用代理与 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
,以使用其 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
其他资源
- 有关在 AMQ Broker 中基于证书的身份验证的更多信息,请参阅 第 5.2.3.1 节 “将代理配置为使用基于证书的身份验证”。
- 有关配置 AMQP 客户端的更多信息,请访问红帽客户门户网站 以获取特定于您的客户端产品文档。