6.2.3. 証明書ベースの認証の追加
JAAS 証明書認証ログインモジュールでは、TLS を使用する必要があり、クライアントは独自の証明書で設定する必要があります。このシナリオでは、認証は、JAAS 証明書認証プラグインによって直接ではなく、TLS ハンドシェーク中に実際に実行されます。
プラグインのロールは次のとおりです。
- 受け入れ可能なユーザーのセットをさらに制限する (関連するプロパティーファイルに明示的にリストされているユーザー識別名 (DN) のみが認証を受ける資格があるため)。
- グループのリストを受信したユーザー ID に関連付けて、承認との統合を容易にする。
- 着信証明書の存在を要求する (デフォルトでは、TLS 層はクライアント証明書の存在をオプションとして扱うように設定されています)。
JAAS 証明書ログインモジュールは、フラットテキストファイルのペアに証明書 DN のコレクションを保存します。ファイルは、ユーザー名とグループ ID のリストを各識別名に関連付けます。
証明書ログインモジュールは、org.apache.activemq.artemis.spi.core.security.jaas.TextFileCertificateLoginModule
クラスで実装されます。
前提条件
-
login.config
ファイルで設定された証明書ログイン。 -
有効な
artemis-users.properties
ファイル。 -
有効な
artemis-roles.properties
ファイル。 - ユーザー証明書からのサブジェクト DN
手順
ユーザー証明書からサブジェクト DN を取得します。
キーストアファイルから一時ファイルに証明書をエクスポートします。必要な値を次のコマンドに置き換えます。
keytool -export -file __FILENAME__ -alias broker-localhost -keystore broker.ks -storepass __PASSWORD__
エクスポートされた証明書の内容を出力します。
keytool -printcert -file __FILENAME__
出力は以下のようになります。
Owner: CN=localhost, OU=broker, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 1 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
- 1
- サブジェクト DN。Subject DN の入力の使用形式はプラットフォームによって異なります。上記の文字列は、以下のように表現することもできます。
Owner: `CN=localhost,\ OU=broker,\ O=Unknown,\ L=Unknown,\ ST=Unknown,\ C=Unknown`
証明書ベースの認証の設定
-
login.config
ファイルを開き、ユーザーおよびロールのプロパティーファイルを参照します。 前のステップで宣言されたファイルを開き、必要な情報を提供します。
ユーザーとそれに対応する DN は、
artemis-users.properties
ファイルにリストされている必要があります。利用可能なロールとそれらのロールを保持するユーザーは、artemis-roles.properties
ファイルで定義されています。これらのファイルの構文の例を以下に示します。
以下に示すように、セキュリティードメインエイリアス (このインスタンスでは activemq) が
bootstrap.xml
で参照されていることを確認します。<jaas-security domain="activemq"/>
-
設定例
次の例は、login.config
ファイルで証明書ログインモジュールを設定する方法を示しています。
例6.1 login.config
activemq { org.apache.activemq.artemis.spi.core.security.jaas.TextFileCertificateLoginModule 1 debug=true 2 org.apache.activemq.jaas.textfiledn.user="artemis-users.properties" 3 org.apache.activemq.jaas.textfiledn.role="artemis-roles.properties"; 4 };
- 1
- JAAS レルムを設定します。この例では、単一の
org.apache.activemq.artemis.spi.core.security.jaas.TextFileCertificateLoginModule
を使用しています。 - 2
- デバッグのオン (
true
) またはオフ (false
) を切り替えます。デフォルトはfalse
です。 - 3
- ユーザーデータの保存に使用するファイルを定義します (
login.config
ファイルを含むディレクトリーへの相対パス)。 - 4
- ロールデータの保存に使用するファイルを定義します (
login.config
ファイルを含むディレクトリーへの相対パス)。
artemis-users.properties
ファイルは、user=StringifiedSubjectDN
(文字列エンコーディングは RFC 2253 で指定されています) を持つプロパティーのリストで設定されています。
例6.2 artemis-users.properties
system=CN=system,O=Progress,C=US 1
user=CN=humble user,O=Progress,C=US
guest=CN=anon,O=Progress,C=DE
- 1
system
という名前のユーザーは、CN=system,O=Progress,C=US
サブジェクト DN にマップされます。
artemis-roles.properties
ファイルは、role=user
のパターンに従います。user
は、単一のユーザーまたはユーザーのコンマ区切りリストのいずれかに置き換えます。
例6.3 artemis-roles.properties
admins=system
users=system,user 1
guests=guest
- 1
- 複数のユーザーをコンマ区切りのエントリーとして含めることができます。