ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server Security プログラマーズ ガイド
11g リリース 1 (10.3.1)
B55520-01
 

目次
目次

戻る
戻る
 
次へ
次へ
 

10 証明書パスの作成と検証

WebLogic Security サービスは、X509 証明書チェーンを検索および検証するための証明書検索および検証 (Certificate Lookup and Validation : CLV) API を提供します。

証明書パスは、メモリ内に証明書チェーンを格納する JDK クラスです。「証明書パス」という用語は、証明書チェーンを検索および検証するための JDK アーキテクチャおよびフレームワークを指す場合にも使われます。この CLV フレームワークは、JDK CertPath 機能を拡張および完了します。証明書パス プロバイダは、WebLogic インタフェースと JDK インタフェースの緊密な統合に依存します。

アプリケーション コードでの証明書チェーンの作成および検証には、WebLogic Server に用意されたデフォルトの証明書パス プロバイダか、カスタム証明書パス プロバイダを使用できます。

この節では、以下の内容について説明します。

証明書パスの作成

アプリケーションで証明書パス ビルダを使用するには、次の手順に従います。

  1. CertPathSelector のインスタンス化

  2. CertPathBuilderParameters のインスタンス化

  3. JDK CertPathBuilder インタフェースの使用

CertPathSelector のインスタンス化

CertPathSelector インタフェース (weblogic.security.pk.CertPathSelector) には、証明書パスを検索して検証するための選択条件が含まれています。証明書パスはさまざまな方法で検索できるため、選択条件ごとに派生クラスが実装されています。

各セレクタ クラスには、選択データおよびコンストラクタを取得するためのメソッドが 1 つまたは複数あります。

CertPathSelector インタフェースを実装する weblogic.security.pk 内のクラスは、次に示すように、サポートされている証明書チェーン検索の種類ごとに 1 つずつあります。

  • EndCertificateSelector - 目的の証明書がある証明書チェーンを検索および検証する場合に使用します。

  • IssuerDNSerialNumberSelector - 目的の証明書の発行 DN とシリアル番号から証明書チェーンを検索および検証する場合に使用します。

  • SubjectDNSelector - 目的の証明書のサブジェクト DN から証明書チェーンを検索および検証する場合に使用します。

  • SubjectKeyIdentifierSelector - 目的の証明書のサブジェクト キー識別子 (X509 証明書の省略可能なフィールド) から証明書チェーンを検索および検証する場合に使用します。


    注意 :

    サポートされるセレクタは、コンフィグレーション済みの証明書パス プロバイダによって異なります。コンフィグレーション済みの証明書パス プロバイダは管理者が決定します。

    WebLogic 証明書パス プロバイダでは、EndCertificateSelector セレクタのみを使用します。


コード リスト 10-1 に、セレクタの選択例を示します。

コード リスト 10-1 証明書チェーン セレクタの指定

// 既に目的の証明書があり、
// それを使用して対応するチェーン
// を検索および検証する場合
X509Certificate endCertificate = ...
// 証明書チェーン セレクタを指定
CertPathSelector selector = new EndCertificateSelector(endCertificate);

CertPathBuilderParameters のインスタンス化

JDK の CertPathBuilder.build() メソッドに、CertPathBuilderParameters のインスタンスを CertPathParameters オブジェクトとして渡します。

次のコンストラクタとメソッドを利用できます。

  • CertPathBuilderParameters

    public CertPathBuilderParameters(String realmName,
                                     CertPathSelector selector,
                                     X509Certificate[]
                                     trustedCAs,
                                     ContextHandler context)
    

    CertPathBuilderParameters を作成します。

    レルム名を指定する必要があります。そのためには、ドメインの SecurityConfigurationMBean を取得します。次に、SecurityConfigurationMBean のデフォルトのレルム属性 (レルム MBean) を取得します。最後に、レルム MBean の名前属性を取得します。レルム名の取得には、実行時 JMX MBean サーバを使用する必要があります。

    selector を指定する必要があります。weblogic.security.pk.CertPathSelector インタフェースのいずれかの派生クラスを使用します。証明書パスを検索および検証するための選択条件の指定については、「CertPathSelector のインスタンス化」を参照してください。

    信頼性のある CA がある場合は指定します。指定しない場合は、サーバの信頼性のある CA が使用されます。信頼性のある CA を指定するのは、コンフィグレーション済みの証明書パス ビルダおよび証明書パス検証プロバイダに対して手がかりを提供するためです。それらが使用する検索/検証アルゴリズムによって、信頼性のある CA を使用する場合と使用しない場合があります。

    ContextHandler は、コンフィグレーション済みの証明書パス ビルダおよび証明書パス検証プロバイダが、チェーンの検索と検証に使用する名前/値ペアのリスト (省略可能) を渡すために使用します。他の種類のセキュリティ プロバイダに渡されるコンテキスト ハンドラと対称的です。コンテキスト パラメータがないことを示すためには、コンテキストを null に設定します。

  • clone

    Object clone()
    

    このインタフェースのクローンは作成できません。

    コード リスト 10-2 に、CertPathBuilderParameters のインスタンスを渡す例を示します。

コード リスト 10-2 CertPathBuilderParameters のインスタンスを渡す例

// 証明書チェーン セレクタを指定
CertPathSelector selector = new EndCertificateSelector(endCertificate);
String realm = _;
// 必要な場合はコンテキスト ハンドラを作成して値を指定する。不要な場合は null を設定する
ContextHandler context = _;
// 必要な場合は、信頼性のある CA のリストを渡す。不要な場合は null を設定する
X509Certificate[] trustedCAs = _;
// パラメータを指定する
CertPathBuilderParams params =
new CertPathBuilderParameters(realm, selector, context, trustedCAs);

JDK CertPathBuilder インタフェースの使用

java.security.cert.CertPathBuilder インタフェースは、CertPathBuilder クラスの API です。JDK の CertPathBuilder インタフェースを使用するには、次の手順に従います。

  1. 静的な CertPathBuilder.getInstance メソッドを呼び出して、CLV フレームワークの CertPathBuilder を取得します。呼び出しに渡すアルゴリズム名として「WLSCertPathBuilder」を指定する必要があります。

  2. CertPathBuilder オブジェクトが取得できたら、返された CertPathBuilder で「build」メソッドを呼び出します。このメソッドが取る引数は CertPathParameters だけです。この引数は、どのチェーンを検索して、それをどのように検証するかを示します。

    JDK の CertPathBuilder.build() メソッドに weblogic.security.pk.CertPathBuilderParameters のインスタンスを CertPathParameters オブジェクトとして渡す必要があります。詳細については、「CertPathBuilderParameters のインスタンス化」を参照してください。

  3. 以上の手順を正常に完了すると、CertPathBuilderResult インタフェースを実装するオブジェクトに結果 (作成された証明書パスを含む) が返されます。証明書パスをどこまで返すかはビルダが判断します。

  4. 正常に完了しなかった場合は、CertPathBuilder の build メソッドから例外が送出されます。パラメータが WebLogic CertPathBuilderParameters でない場合、コンフィグレーション済みの CertPathBuilder でセレクタがサポートされていない場合、およびレルム名がサーバ起動時のデフォルト レルムのレルム名と一致しない場合は、InvalidAlgorithmParameterException が送出されます。

    証明書パスが見つからない場合や、見つかった証明書パスが有効でない場合は、CertPathBuilder の build メソッドから CertPathBuilderException が送出されます。

証明書チェーンの検索のコード フロー例

コード リスト 10-3 証明書チェーンの検索

import weblogic.security.pk.CertPathBuilderParameters;
import weblogic.security.pk.CertPathSelector;
import weblogic.security.pk.EndCertificateSelector;
import weblogic.security.service.ContextHandler;
import java.security.cert.CertPath;
import java.security.cert.CertPathBuilder;
import java.security.cert.X509Certificate;
// 既に目的の証明書があり、
// それを使用して対応するチェーン
// を検索および検証する場合
X509Certificate endCertificate = ...

// 証明書チェーン セレクタを指定
CertPathSelector selector = new EndCertificateSelector(endCertificate);

String realm = _;

// 必要な場合はコンテキスト ハンドラを作成して値を指定する。不要な場合は null を設定する
ContextHandler context = _;

// 必要な場合は、信頼性のある CA のリストを渡す。不要な場合は null を設定する
X509Certificate[] trustedCAs = _;

// パラメータを指定する
CertPathBuilderParams params =
new CertPathBuilderParameters(realm, selector, context, trustedCAs);
// WLS CertPathBuilder を取得
CertPathBuilder builder =
CertPathBuilder.getInstance("WLSCertPathBuilder");

//  これを使用してチェーンを検証
CertPath certpath = builder.build(params).getCertPath();
X509Certificate[] chain =
certpath.getCertificates().toArray(new X509Certificate[0]);

証明書パスの検証

アプリケーションで証明書パス検証プロバイダを使用するには、次の手順に従います。

  1. CertPathValidatorParameters のインスタンス化

  2. JDK CertPathValidator インタフェースの使用

CertPathValidatorParameters のインスタンス化

JDK の CertPathValidator.validate() メソッドに、CertPathValidatorParameters のインスタンスを CertPathParameters オブジェクトとして渡します。

次のコンストラクタとメソッドを利用できます。

  • CertPathValidatorParameters

    public CertPathValidatorParameters(String realmName,
                                     X509Certificate[] trustedCAs,
                                     ContextHandler context)
    

    CertPathValidatorParameters を作成します。

    レルム名を指定する必要があります。そのためには、ドメインの SecurityConfigurationMBean を取得します。次に、SecurityConfigurationMBean のデフォルトのレルム属性 (レルム MBean) を取得します。最後に、レルム MBean の名前属性を取得します。レルム名の取得には、実行時 JMX MBean サーバを使用する必要があります。

    信頼性のある CA がある場合は指定します。指定しない場合は、サーバの信頼性のある CA が使用されます。信頼性のある CA を指定するのは、コンフィグレーション済みの証明書パス ビルダおよび証明書パス検証プロバイダに対して手がかりを提供するためです。それらが使用する検索/検証アルゴリズムによって、信頼性のある CA を使用する場合と使用しない場合があります。

    ContextHandler は、コンフィグレーション済みの証明書パス ビルダおよび証明書パス検証プロバイダが、チェーンの検索と検証に使用する名前/値ペアのリスト (省略可能) を渡すために使用します。他の種類のセキュリティ プロバイダに渡されるコンテキスト ハンドラと対称的です。コンテキスト パラメータがないことを示すためには、コンテキストを null に設定します。

  • clone

    Object clone()
    

    このインタフェースのクローンは作成できません。

    コード リスト 10-4 に、CertPathValidatorParameters のインスタンスを渡す例を示します。

コード リスト 10-4 CertPathValidatorParameters のインスタンスを渡す例

// WLS CertPathValidator を取得
CertPathValidator validator =
CertPathValidator.getInstance("WLSCertPathValidator");

String realm = _;

// 必要な場合はコンテキスト ハンドラを作成して値を指定する。不要な場合は null を設定する
ContextHandler context = _;

// 必要な場合は、信頼性のある CA のリストを渡す。不要な場合は null を設定する
X509Certificate[] trustedCAs = _;

// (デフォルト セキュリティ レルムの) パラメータを指定する
CertPathValidatorParams params =
new CertPathValidatorParams(realm, context, trustedCAs);

JDK CertPathValidator インタフェースの使用

java.security.cert.CertPathValidator インタフェースは、CertPathValidator クラスの API です。JDK の CertPathValidator インタフェースを使用するには、次の手順に従います。

  1. 静的な CertPathValidator.getInstance メソッドを呼び出して、CLV フレームワークの CertPathValidator を取得します。呼び出しに渡すアルゴリズム名として「WLSCertPathValidator」を指定する必要があります。

  2. CertPathValidator オブジェクトが取得できたら、返された CertPathValidator で「validate」メソッドを呼び出します。このメソッドが取る引数は CertPathParameters だけです。この引数は、どのように検証を行うかを示します。

    JDK の CertPathValidator.validate ()メソッドに、weblogic.security.pk.CertPathValidatorParameters のインスタンスを CertPathParameters オブジェクトとして渡す必要があります。「CertPathValidatorParameters のインスタンス化」を参照してください。

  3. 以上の手順を正常に完了すると、CertPathValidatorResult インタフェースを実装するオブジェクトに結果が返されます。

  4. 正常に完了しなかった場合は、CertPathValidator.validate() メソッドから例外が送出されます。パラメータが WebLogic CertPathValidatorParameters でない場合や、レルム名がサーバ起動時のデフォルト レルムのレルム名と一致しない場合は、InvalidAlgorithmParameterException が送出されます。

    証明書パス内の証明書が順序付けされていない場合 (目的の証明書が 1 番目でなければならない) や、証明書パスが有効でない場合は、CertPathValidator の validate メソッドから CertPathValidatorException が送出されます。

証明書チェーンの検証のコード フロー例

コード リスト 10-5 追加の検証の実行

import weblogic.security.pk.CertPathValidatorParams;
import weblogic.security.service.ContextHandler;
import java.security.cert.CertPath;
import java.security.cert.CertPathValidator;
import java.security.cert.X509Certificate;

// 未検証の X509 証明書チェーンがあり、
// それを検証する場合
X509Certificate[] chain = ...

// チェーンを証明書パスに変換
CertPathFactory factory = CertPathFactory.getInstance("X509");
ArrayList list = new ArrayList(chain.length);
for (int i = 0; i < chain.length; i++) {
list.add(chain[i]);
}
CertPath certPath = factory.generateCertPath(list);

// WLS CertPathValidator を取得 
CertPathValidator validator =
CertPathValidator.getInstance("WLSCertPathValidator");

String realm = _;

// 必要な場合はコンテキスト ハンドラを作成して値を指定する。不要な場合は null を設定する
ContextHandler context = _;

// 必要な場合は、信頼性のある CA のリストを渡す。不要な場合は null を設定する
X509Certificate[] trustedCAs = _;

// (デフォルト セキュリティ レルムの) パラメータを指定する
CertPathValidatorParams params =
new CertPathValidatorParams(realm, context, trustedCAs);

// これを使用してチェーンを検証
validator.validate(certPath, params);