基本証明書マップ・モード

証明書マップ・モードを使用して、 LibertyPRINCIPAL_CNCUSTOM、または NOT_SUPPORTED によって X.509 証明書を基本ユーザー・レジストリーにマップすることができます。

証明書マップ・モード (certificateMapMode)

3 つの証明書マップ・モードから選択できます。 デフォルト・モードは PRINCIPAL_CN です。

PRINCIPAL_CN
PRINCIPAL_CN マッピング・モードの場合、証明書内の識別名 (DN) が共通名 (cn) 相対識別名 (RDN) を含んでいる必要があります。 cn RDN 値は、 server.xml ファイルの basicRegistry エレメントで構成されているユーザー name 値と一致している必要があります。 Liberty の基本ユーザー・レジストリーの構成を参照してください。
CUSTOM
カスタム証明書マッピング実装を提供するために、CUSTOM モードを使用し、X509CertificateMapper 実装を提供することができます。
NOT_SUPPORTED
NOT_SUPPORTED マッピング・モードの場合、証明書による認証の試行をレジストリーが受け取ると、CertificateMapNotSupportedException エラーがスローされます。 レジストリーが統合されておらず、スタンドアロンで実行されている場合、認証の試行は失敗します。 federatedRepositories-1.0 フィーチャーが使用されている場合、証明書を認証できる他の統合リポジトリーがあれば CertificateMapNotSupportedException エラーは無視されます。

証明書マップ・モードの構成属性

certificateMapperId

基本レジストリーに使用するカスタム com.ibm.websphere.security.X509CertificateMapper 実装の ID を指定します。 certificateMapperIdCUSTOM 証明書マップ・モードで使用してください。

X509CertificateMapper 実装には以下の要件があります。
  • 引数のないコンストラクターを含んでいる必要があります。
  • mapCertificate(X509Certificate[]) メソッドは、スレッド・セーフでなければならず、基本レジストリー内にあるかどうかの検査のためにユーザー名 (大/小文字は区別されません) を返す必要があります。

カスタム X509CertificateMapper 実装の例

基本レジストリーの X509CertificateMapper 実装の例を以下に示します。

public class CustomBasicMapper implements X509CertificateMapper {

   @Override
   public String mapCertificate(X509Certificate[] certificates)
      throws CertificateMapNotSupportedException,
             CertificateMapFailedException { 
        
      if (certificates == null || certificates.length == 0) {
         throw new CertificateMapFailedException("No certificates found.");
      }
      LdapName dn;
          try {
              dn = new LdapName(certificates[0].getSubjectX500Principal().getName());
          } catch (InvalidNameException e) {
              throw new CertificateMapFailedException(
                 "The certificate subject X.500 principal is not in " +
                 "the form of a distinguished name.", e);
          }
          /*
           * Return a user name from the value of the first RDN in the DN.
           */
          List<Rdn> rdns = dn.getRdns();
          return rdns.get(rdns.size() - 1).getValue();
   }
}

BELL フィーチャーまたはユーザー・フィーチャーのいずれかを使用して、 X509CertificateMapper 実装を OSGi サービスとして Liberty で使用可能にすることができます。

  • Basic Extensions using Liberty Libraries (BELL) フィーチャー

    BELL フィーチャーは、Java ServiceLoader 機能を使用して、ライブラリーから OSGi サービスをロードします。 JAR ファイルに、X509CertificateMapper 実装クラスとプロバイダー構成ファイルの両方が含まれている必要があります。 JAR ファイルに入れられる可能性のあるファイルは、以下のリストのとおりです。

    myLibrary.jar
    + com/acme/CustomBasicMapper.class
    + com/acme/AnotherCustomMapper.class
    + META-INF/services/com.ibm.websphere.security.X509CertificateMapper
    

    プロバイダー構成ファイルは、OSGi サービスとして提供されるすべての X509CertificateMapper 実装をリストします。 例えば、 myLibrary.jarの場合、 META-INF/services/com.ibm.websphere.security.X509CertificateMapper プロバイダー構成ファイルにはサービスのリストがあり、各サービスは独自の行に表示されます。 各サービスの前には、x509.certificate.mapper.id プロパティーの値を指定するキーと値のペアを含んでいるコメント行がなければなりません。 このプロパティーの値は、 server.xml ファイル内の basicRegistry 構成エレメントから参照されます。

    # x509.certificate.mapper.id=customBasicMapper 
    com.acme.CustomBasicMapper 
    # x509.certificate.mapper.id=anotherCustomMapper 
    com.acme.AnotherCustomMapper

    X509CertificateMapper を基本レジストリーにバインドするために、server.xml 構成では、JAR ファイルに指定されたサービスをロードし、使用したい X509CertificateMapper サービスをポイントするように基本レジストリーを構成する必要があります。

    <server>
       <featureManager>
          <feature>appSecurity-2.0</feature>
          <feature>bells-1.0</feature>
       </featureManager>
    
       <!-- 
          Create a library for the JAR file that contains 
          the X509CertificateMapper implementation. 
       -->
       <library id="mylibrary">
          <file name="${shared.resource.dir}/libs/MyLibrary.jar">
       </library>
    
       <!-- Load the library in a BELL. -->
       <bell libraryRef="mylibrary" />
    
       <!-- Configure the registry with the custom X509CertificateMapper. -->
       <basicRegistry ... 
          certificateMapMode="CUSTOM"
          certificateMapperId="customBasicMapper" 
          ... >
       </basicRegistry>
    </server>
    
  • ユーザー・フィーチャー

    既にユーザー・フィーチャーがあるか、ユーザー・フィーチャーを作成する計画がある場合、代替方法として、ユーザー・フィーチャー・バンドルに X509CertificateMapper 実装を入れることができます。

    X509CertificateMapper 実装をサービス・コンポーネントとして構成し、x509.certificate.mapper.id プロパティーを定義して固有 ID を設定します。 このプロパティーの値は、 server.xml ファイル内の basicRegistry 構成エレメントから参照されます。 Liberty フィーチャーの開発に関する情報を参照してください。

    X509CertificateMapper を基本レジストリーにバインドするために、server.xml 構成では、使用したい X509CertificateMapper サービスをポイントするように基本レジストリーを構成する必要があります。

    <server>
       <featureManager>
          <feature>appSecurity-2.0</feature>
          <feature>usr:myFeature-1.0</feature>
       </featureManager>
    
       <!-- Configure the registry with the custom X509CertificateMapper. -->
       <basicRegistry ...
          certificateMapMode="CUSTOM"
          certificateMapperId="customBasicMapper"
          ... >
       </basicRegistry>
    </server>