5.2.3. 証明書ベースの認証の設定

Java Authentication and Authorization Service (JAAS) 証明書ログインモジュールは、Transport Layer Security(TLS) を使用するクライアントの認証および承認を処理します。モジュールを使用するには、双方向の Transport Layer Security (TLS) の使用と、独自の証明書でクライアントを設定する必要があります。認証は、JAAS 証明書ログインモジュールから直接ではなく、TLS ハンドシェイク中に実行されます。

証明書ログインモジュールのロールは、以下のとおりです。

  • 許可されるユーザーのセットを制限します。関連するプロパティーファイルに明示的に一覧表示されるユーザーの 識別名 (DN) のみが認証の対象となります。
  • グループの一覧を受信したユーザー ID に関連付けます。これにより、認証が容易になります。
  • 受信クライアント証明書が必要です (デフォルトでは、TLS レイヤーは、クライアント証明書の存在をオプションとして扱うように設定されています)。

証明書ログインモジュールは、フラットテキストファイルのペアに証明書 DN のコレクションを保存します。このファイルは、ユーザー名とグループ ID のリストを各 DN に関連付けます。

証明書ログインモジュールは、org.apache.activemq.artemis.spi.core.security.jaas.TextFileCertificateLoginModule クラスで実装されます。

5.2.3.1. 証明書ベースの認証を使用するブローカーの設定

以下の手順では、証明書ベースの認証を使用するようにブローカーを設定する方法を説明します。

前提条件

  • 双方向 Transport Layer Security(TLS) を使用するようにブローカーを設定している。詳細は、「双方向 TLS の設定」 を参照してください。

手順

  1. 以前ブローカーキーストアにインポートされたユーザー証明書からサブジェクト 識別名 (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 です。Subject 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

      上記の設定では、users ロールに対して、複数のユーザーをコンマ区切りリストとして一覧表示します。

    4. 以下に示すように、セキュリティードメインエイリアス (このインスタンスでは activemq) が bootstrap.xml で参照されていることを確認します。

      <jaas-security domain="activemq"/>