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

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

证书登录模块的角色是:

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

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

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

5.2.3.1. 将代理配置为使用基于证书的验证

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

先决条件

步骤

  1. 从之前导入到代理密钥存储的用户证书获取 Subjectuish ed 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 条目是 Subject DN。输入对象 DN 的格式取决于您的平台。以上字符串也可以表示为:

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

    1. 打开 <broker-instance-dir>/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";
      };
      org.apache.activemq.artemis.spi.core.security.jaas.TextFileCertificateLoginModule
      实施类。
      org.apache.activemq.jaas.textfiledn.user
      指定为登录模块实施定义一组用户和密码的属性文件。
      org.apache.activemq.jaas.textfiledn.role
      指定将用户映射到已定义登录模块实施的角色的属性文件。
    2. 打开 <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。

    3. 打开 <broker-instance-dir>/etc/artemis-roles.properties 配置文件。此文件中定义了可用的角色和存放这些角色的用户。例如:

      admins=system
      users=system,user
      guests=guest

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

    4. 确保您的安全域别名(在这个实例中,activemq)在 bootstrap.xml 中被引用,如下所示:

      <jaas-security domain="activemq"/>