ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Security Developer Toolsリファレンス
11gリリース1(11.1.1)
B61386-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

12 Oracle XKMS

XKMS(XML Key Management Specification)は、公開鍵の管理に関するW3C仕様です。XKMSを使用すると、開発者はデジタル署名の処理に関するXMLトランザクションを記述できるため、公開鍵のインフラストラクチャを簡単に処理できるようになります。

この章に含まれる内容は次のとおりです。

12.1 Oracle XKMSの機能と利点

Oracle XKMSは、複数の業務やアプリケーションにわたって鍵の検出とユーザー・アイデンティティの検証を行うためのツールキットからなるPure Javaソリューションです。Oracle XKMSを使用すると、Webサービスに必要な安全かつ信頼できるメッセージングをサポートできるほか、PKIに関連するコストや複雑性をある程度軽減することができます。

Oracle XKMSでは次の機能が提供されます。

12.1.1 Oracle XKMSのパッケージ

Oracle XKMSライブラリには、次のパッケージが含まれています。

表12-1 Oracle XKMSライブラリに含まれるパッケージ

パッケージ 説明

oracle.security.xmlsec.xkms

主なXKMSメッセージ要素が含まれています。

oracle.security.xmlsec.xkms.xkiss

鍵情報サービスの仕様に関するクラスが含まれています。

oracle.security.xmlsec.xkms.xkrss

鍵登録サービスの仕様に関するクラスが含まれています。

oracle.security.xmlsec.xkms.util

定数とユーティリティ・クラスが含まれています。


12.2 Oracle XKMSの環境設定

Oracleセキュリティ開発ツールは、Oracle Application ServerとともにORACLE_HOMEにインストールされます。この項では、Oracle XKMSを使用するための環境設定について説明します。この項に含まれる内容は次のとおりです。

12.2.1 Oracle XKMSのシステム要件

Oracle XKMSを使用するには、システムに次のコンポーネントがインストールされている必要があります。

  • Java Development Kit(JDK)バージョン1.5以上

  • Oracle XML Securityツールキット

12.2.2 CLASSPATH環境変数の設定

CLASSPATH環境変数には、必要なjarファイルおよびclassファイルのフルパスとファイル名を指定してください。次のファイルをCLASSPATHに指定します。

  • osdt_core.jar

  • osdt_cert.jar

  • osdt_xmlsec.jar

  • org.jaxen_1.1.1.jar。セキュリティ・ツール・ディストリビューションの$ORACLE_HOME/modules/ディレクトリにあります。Oracle XML Securityは、XPathの処理のためにJaxen XPathエンジンを利用します。

12.2.2.1 WindowsでのCLASSPATHの設定

WindowsでCLASSPATHを設定する手順を次に示します。

  1. Windowsの「コントロール パネル」で「システム」を選択します。

  2. 「システムのプロパティ」ダイアログで「詳細設定」タブを選択します。

  3. 「環境変数」をクリックします。

  4. ユーザー環境変数のセクションで「新規」をクリックし、CLASSPATH環境変数をユーザー・プロファイルに追加します。CLASSPATH環境変数がすでに存在している場合は、選択して「編集」をクリックします。

  5. 必要なjarファイルおよびclassファイルすべてのフルパスとファイル名をCLASSPATHに追加します。

    たとえば、CLASSPATHは次のようになります。

    C:%ORACLE_HOME%\modules\oracle.osdt_11.1.1\osdt_core.jar;
    %ORACLE_HOME%\modules\oracle.osdt_11.1.1\osdt_cert.jar;
    %ORACLE_HOME%\modules\oracle.osdt_11.1.1\osdt_xmlsec.jar;
    %ORACLE_HOME%\modules\org.jaxen_1.1.1.jar;
    
  6. 「OK」をクリックします。

12.2.2.2 UNIXでのCLASSPATHの設定

UNIXでは、必要なjarファイルおよびclassファイルすべてのフルパスとファイル名を含むようにCLASSPATH環境変数を設定します。次に例を示します。

setenv CLASSPATH $CLASSPATH:
$ORACLE_HOME/modules/oracle.osdt_11.1.1/osdt_core.jar:
$ORACLE_HOME/modules/oracle.osdt_11.1.1/osdt_cert.jar:
$ORACLE_HOME/modules/oracle.osdt_11.1.1/osdt_xmlsec.jar
%ORACLE_HOME%\modules\org.jaxen_1.1.1.jar;

12.3 コア・クラスとインタフェース

この項では、Oracle XKMSの主要なクラスとインタフェースの使用について説明し、コード例を示します。コア・クラスを次に示します。

12.3.1 oracle.security.xmlsec.xkms.xkiss.LocateRequest

このクラスは、XKMSのLocateRequest要素を表します。

例12-1に、LocateRequestのインスタンスを作成する方法を示します。

例12-1 LocateRequestのインスタンスの作成

// Parse the XML document containing the dsig:Signature.
Document sigDoc = //Instance of org.w3c.dom.Document;
 
//Create Query Key Binding
QueryKeyBinding queryKeyBinding = new QueryKeyBinding(sigDoc);
queryKeyBinding.setTimeInstant(new Date());
 
// Create the xkms:LocateRequest.
LocateRequest loc = new LocateRequest(sigDoc, queryKeyBinding);

LocateRequestタイプのクライアント・リクエストには、xkms:RespondWith属性を含める必要があります。

例12-2に、RespondWithLocateRequestに追加する方法を示します。

例12-2 LocateRequestに対するRespondWithの追加

//Add xkms:RespondWith as X.509 Certificate.
loc.addRespondWith(XKMSURI.respondWith_X509Cert);

12.3.2 oracle.security.xmlsec.xkms.xkiss.LocateResult

このクラスは、xkms:LocateResult要素を表します。

例12-3に、LocateResultのインスタンスを作成する方法を示します。

例12-3 LocateResultのインスタンスの作成

//Parse the XML document containin the dsig:Signature
Document sigDoc = //Instance of org.w3c.doc.Document;
 
// Create the xkms:LocateResult
LocateResult locRes = new LocateResult(sigDoc);
 
//Set ResultMajor to Success.
locRes.setResultCode(XKMSURI.result_major_success, null);

LocateRequestX509CertificateRespondWith属性が含まれている場合は、次のコードを使用してX509証明書をLocateResultに追加します。

例12-4 LocateResultに対するX509証明書の追加

//Creating a signature and adding X509 certificate to the KeyInfo element.
X509Certificate userCert = // Instance of java.security.cert.X509Certificate
XSSignature Sig = XSSignature.newInstance(sigDoc, "MySignature");
XSKeyInfo xsInfo = sig.getKeyInfo();
X509Data xData = xsInfo.createX509Data(userCert);
 
//Add X509Data to the KeyInfo
xsInfo.addKeyInfoData(xData);
 
//Set Key Binding and add KeyInfo the the KeyBinding
UnverifiedKeyBinding keyBinding = new UnverifiedKeyBinding(sigDoc);
keyBinding.setKeyInfo(xsInfo);
 
//Add Key Binding to LocateResult
locRes.addKeyBinding(keyBinding);

12.3.3 oracle.security.xmlsec.xkms.xkiss.ValidateRequest

このクラスは、XKMSのxkms:ValidateRequest要素を表します。

例12-5に、xkms:ValidateRequestのインスタンスを作成する方法を示します。

例12-5 ValidateRequestのインスタンスの作成

// Parse the XML document containing the dsig:Signature.
Document sigDoc = //Instance of org.w3c.dom.Document;
 
//Create Query Key Binding
QueryKeyBinding queryKeyBinding = new QueryKeyBinding(sigDoc);
queryKeyBinding.setTimeInstant(new Date());
 
// Create the xkms:ValidateRequest.
ValidateRequest validateReq = new ValidateRequest(sigDoc, queryKeyBinding);

ValidateRequestタイプのリクエストには、xkms:RespondWith属性を含める必要があります。例12-6に、RespondWithValidateRequestに追加する方法を示します。

例12-6 ValidateRequestに対するRespondWithの追加

//Add xkms:RespondWith as X.509 Certificate.
validateReq.addRespondWith(XKMSURI.respondWith_X509Cert);

12.3.4 oracle.security.xmlsec.xkms.xkiss.ValidateResult

このクラスは、XKMSのValidateResult要素を表します。

例12-7に、ValidateResultのインスタンスを作成する方法を示します。

例12-7 ValidateResultのインスタンスの作成

//Parse the XML document containin the dsig:Signature
Document sigDoc = //Instance of org.w3c.doc.Document;
 
// Create the xkms:ValidateResult
ValidateResult valRes = new ValidateResult(sigDoc);
 
//Set ResultMajor to Success.
valRes.setResultCode(XKMSURI.result_major_success, null);

ValidateRequestに対するレスポンスでステータスを設定するには、次のコードを使用します。

例12-8 ValidateRequestのレスポンス・ステータスの設定

//Create a status element and add reasons.
Status responseStatus = new Status(sigDoc);
responseStatus.addValidReason(XKMSURI.reasonCode_IssuerTrust);
responseStatus.addValidReason(XKMSURI.reasonCode_RevocationStatus);
responseStatus.addValidReason(XKMSURI.reasonCode_ValidityInterval);
responseStatus.addValidReason(XKMSURI.reasonCode_Signature);
 
//Create a xkms:KeyBinding to add status and X509Data
XSKeyInfo xsInfo = 
    // Instance of oracle.security.xmlsec.dsig.XSKeyInfo, 
    // which contains X509Data
KeyBinding keyBinding = new KeyBinding(sigDoc);
keyBinding.setStatus(responseStatus);
keyBinding.setKeyInfo(xsInfo);
 
// Add the key binding to the ValidateResult.
valRes.addKeyBinding(keyBinding);

12.3.5 oracle.security.xmlsec.xkms.xkrss.RecoverRequest

このクラスは、XKMSのRecoverRequest要素を表します。

例12-9に、RecoverRequestのインスタンスを作成する方法を示します。

例12-9 RecoverRequestのインスタンスの作成

// Parse the XML document containing the dsig:Signature.
Document sigDoc = //Instance of org.w3c.dom.Document;
 
// Create the xkms:RecoverRequest
RecoverRequest recReq = new RecoverRequest(sigDoc);
 
//Set RespondWith to PrivateKey, so that the RecoverResult 
contains the private key.
recReq.addRespondWith(XKMSURI.respondWith_PrivateKey);

RecoverRequestには、Authentication要素とRecoverKeyBinding要素を含める必要があります。これらを追加するには、次のコードを使用します。

例12-10 RecoverRequestに対するAuthenticationおよびRecoverKeyBindingの追加

//Create an instance of XSSignature.
XSSignature sig = 
    //Instance of oracle.security.xmlsec.dsig.XSSignature
 
//Create an instance of Authentication element.
Authentication auth = new Authentication(sigDoc);
 
//Set key binding authentication.
auth.setKeyBindingAuthentication(sig);
 
//Set Authentication for the RecoverRequest.
recReq.setAuthentication(auth);
 
//Add RecoverKeyBinding to RecoverRequest.
RecoverKeyBinding recKeyBind = new RecoverKeyBinding(sigDoc);
 
//Add Key Info on the key to be recovered.
XSKeyInfo xsInfo = 
    //Instance of oracle.security.xmlsec.dsig.XSKeyInfo
recKeyBind.setKeyInfo(xsInfo);
 
//Adding status, as known to the key holder, to the KeyBinding
Status keyStatus = new Status(sigDoc);
keyStatus.setStatusValue(XKMSURI.kbs_Indeterminate);
recKeyBind.setStatus(keyStatus);
 
//Adding RecoverKeyBinding to RecoverRequest.
recReq.setKeyBinding(recKeyBind);

12.3.6 oracle.security.xmlsec.xkms.xkrss.RecoverResult

このクラスは、xkms:RecoverResult要素を表します。

例12-11に、RecoverResultのインスタンスを作成する方法を示します。

例12-11 xkms:RecoverResultのインスタンスの作成

// Parse the XML document containing the dsig:Signature.
Document sigDoc = //Instance of org.w3c.dom.Document;
 
// Create the xkms:RecoverResult
RecoverResult recResult = new RecoverResult(sigDoc);
 
//Set ResultMajor to Success.
recResult.setResultCode(XKMSURI.result_major_success, null);

RecoverResultには、KeyBindingを設定する必要があります。この設定を行うには、次のコードを使用します。

例12-12 RecoverResultに対する鍵のバインディングの作成

//Create a xkms:KeyBinding to add status and X509Data
XSKeyInfo xsInfo = 
    //Instance of oracle.security.xmlsec.dsig.XSKeyInfo, 
    //which contains X509Data
KeyBinding keyBinding = new KeyBinding(sigDoc);
keyBinding.setKeyInfo(xsInfo);
 
//Create a status element and add reasons.
//Status is set to Invalid because the service can decide
//to revoke the key binding in the case of recovery.

Status responseStatus = new Status(sigDoc);
responseStatus.addInvalidReason(XKMSURI.reasonCode_IssuerTrust);
responseStatus.addInvalidReason(XKMSURI.reasonCode_RevocationStatus);
responseStatus.addInvalidReason(XKMSURI.reasonCode_ValidityInterval);
responseStatus.addInvalidReason(XKMSURI.reasonCode_Signature);
responseStatus.setStatusValue(XKMSURI.kbs_Invalid);
 
keyBinding.setStatus(responseStatus);
 
//Set KeyBinding into RecoverResult
recResult.addKeyBinding(keyBinding);

例12-13に、復元されたPrivateKeyRecoverResultに設定する方法を示します。

例12-13 RecoverResultに対する復元された秘密鍵の設定

//Create an Instance of dsig:XEEncryptedData
XEEncryptedData encryptedData = //Instance of 
oracle.security.xmlsec.enc.XEEncryptedData
 
//Create an instance of oracle.security.xmlsec.xkms.xkrss.PrivateKey
PrivateKey privKey = new PrivateKey(sigDoc);
privKey.setEncryptedData(encryptedData);
 
//Add PrivateKey to RecoverResult
recResult.setPrivateKey(privKey);

12.4 Oracle XKMSのJava APIリファレンス

Oracle XKMSのJava APIリファレンス(Javadoc)は、次のドキュメントで参照できます。

Oracle Fusion Middleware XKMS Java API Reference for Oracle Security Developer Tools

12.5 サンプル・プログラム

Oracleセキュリティ開発ツールを使用したサンプル・プログラムについては、Oracle Technology Network Webサイト(http://www.oracle.com/technology/sample_code/products/id_mgmt/index.html)を参照してください。