ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Serverセキュリティのプログラミング
11g リリース1(10.3.6)
B61619-04
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

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 証明書チェーン・セレクタの指定

// you already have the end certificate
// and want to use it to lookup and
// validate the corresponding chain
X509Certificate endCertificate = ...
// make a cert chain selector
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を使用する場合と使用しない場合があります。

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

  • clone

    Object clone()
    

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

    例10-2に、CertPathBuilderParametersのインスタンスを渡す例を示します。

例10-2 CertPathBuilderParametersのインスタンスを渡す例

// make a cert chain selector
CertPathSelector selector = new EndCertificateSelector(endCertificate);
String realm = _;
// create and populate a context handler if desired, or null
ContextHandler context = _;
// pass in a list of trusted CAs if desired, or null
X509Certificate[] trustedCAs = _;
// make the params
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;
// you already have the end certificate
// and want to use it to lookup and
// validate the corresponding chain
X509Certificate endCertificate = ...

// make a cert chain selector
CertPathSelector selector = new EndCertificateSelector(endCertificate);

String realm = _;

// create and populate a context handler if desired
ContextHandler context = _;

// pass in a list of trusted CAs if desired
X509Certificate[] trustedCAs = _;

// make the params
CertPathBuilderParams params =
new CertPathBuilderParameters(realm, selector, context, trustedCAs);
// get the WLS CertPathBuilder
CertPathBuilder builder =
CertPathBuilder.getInstance("WLSCertPathBuilder");

// use it to look up and validate the chain
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を使用する場合と使用しない場合があります。

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

  • clone

    Object clone()
    

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

    例10-4に、CertPathValidatorParametersのインスタンスを渡す例を示します。

例10-4 CertPathValidatorParametersのインスタンスを渡す例

// get the WLS CertPathValidator
CertPathValidator validator =
CertPathValidator.getInstance("WLSCertPathValidator");

String realm = _;

// create and populate a context handler if desired, or null
ContextHandler context = _;

// pass in a list of trusted CAs if desired, or null
X509Certificate[] trustedCAs = _;

// make the params (for the default security realm)
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;

// you already have an unvalidated X509 certificate chain
// and you want to get it validated
X509Certificate[] chain = ...

// convert the chain to a CertPath
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);

// get the WLS CertPathValidator
CertPathValidator validator =
CertPathValidator.getInstance("WLSCertPathValidator");

String realm = _;

// create and populate a context handler if desired, or null
ContextHandler context = _;

// pass in a list of trusted CAs if desired, or null
X509Certificate[] trustedCAs = _;

// make the params (for the default security realm)
CertPathValidatorParams params =
new CertPathValidatorParams(realm, context, trustedCAs);

// use it to validate the chain
validator.validate(certPath, params);