3.4. 証明書ベースの認証を使用するようにセキュリティードメインを設定する手順
JBoss EAP には、セキュリティードメインと証明書ベースの認証を使用して Web アプリケーションまたは Jakarta Enterprise Beans のセキュリティーを確保する機能があります。
証明書ベースの認証を設定する前に、アプリケーションの双方向 SSL/TLS を有効化して設定する必要がありますが、これには、JBoss EAP インスタンスと、セキュリティードメインでセキュリティーを確保した Web アプリケーションまたは Jakarta Enterprise Beans の両方に X509 証明書を設定する必要があります。
証明書、トラストストア、および双方向 SSL/TLS を設定したら、証明書ベースの認証を使用するセキュリティードメインの設定、そのセキュリティードメインを使用するアプリケーションの設定、クライアント証明書を使用するクライアントの設定に進むことができます。
3.4.1. 証明書ベースの認証を使用したセキュリティードメインの作成
証明書ベースの認証を使用するセキュリティードメインを作成するには、トラストストアと Certificate ログインモジュールまたはそのサブクラスの 1 つを指定する必要があります。
トラストストアには、認証に使用される信頼できるクライアント証明書が含まれるか、クライアントの証明書の署名に使用される認証局の証明書が含まれている必要があります。ログインモジュールは、設定されたトラストストアを使用してクライアントが提示する証明書を認証するために使用されます。セキュリティードメイン全体として、認証後にロールをプリンシパルにマップする方法も指定する必要があります。Certificate ログインモジュール自体は、ロール情報をプリンシパルにマップしませんが、別のログインモジュールと組み合わせることもできます。または、Certificate ログインモジュールの 2 つのサブクラス (CertificateRoles および DatabaseCertificate) でも、認証後にロールをプリンシパルにマップできます。以下の例は、CertificateRoles ログインモジュールを使用して、証明書ベースの認証でセキュリティードメインを設定する方法を示しています。
セキュリティードメインは認証を行うときに、双方向 SSL/TLS の設定時にクライアントが提示した証明書と同じ証明書を使用します。そのため、クライアントは双方向 SSL/TLS とアプリケーションまたは Jakarta Enterprise Beans を使用した証明書ベースの認証の 両方 に同じ証明書を使用する必要があります。
証明書ベースの認証を使用するセキュリティードメインの例
/subsystem=security/security-domain=cert-roles-domain:add /subsystem=security/security-domain=cert-roles-domain/jsse=classic:add(truststore={password=secret, url="/path/to/server.truststore.jks"}, keystore={password=secret, url="/path/to/server.keystore.jks"}, client-auth=true) /subsystem=security/security-domain=cert-roles-domain/authentication=classic:add /subsystem=security/security-domain=cert-roles-domain/authentication=classic/login-module=CertificateRoles:add(code=CertificateRoles, flag=required, module-options=[ securityDomain="cert-roles-domain", rolesProperties="${jboss.server.config.dir}/cert-roles.properties",password-stacking="useFirstPass", verifier="org.jboss.security.auth.certs.AnyCertVerifier"])
上記の例では、CertificateRoles ログインモジュールを使用して認証を処理し、ロールを認証済みプリンシパルにマッピングします。そのためには、rolesProperties
属性を使用してプロパティーファイルを参照します。このファイルは、以下の形式を使用してユーザー名およびロールを一覧表示します。
user1=roleA user2=roleB,roleC user3=
ユーザー名は、提供された証明書の DN として提示されます.たとえば、CN=valid-client, OU=JBoss, O=Red Hat, L=Raleigh, ST=NC, C=US
と表示されているため、プロパティーファイルを使用する場合は、=
などの特殊文字やスペースをエスケープする必要があります。
ロールプロパティーファイルの例
CN\=valid-client,\ OU\=JBoss,\ O\=Red\ Hat,\ L\=Raleigh,\ ST\=NC,\ C\=US=Admin
証明書の DN を表示するには、次のコマンドを実行します。
$ keytool -printcert -file valid-client.crt Owner: CN=valid-client, OU=JBoss, O=Red Hat, L=Raleigh, ST=NC, C=US ...