ヘッダーをスキップ
Oracleセキュリティ開発ツール・リファレンス
10gリリース3(10.1.3)
B28615-01
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

4 Oracle Security Engine

この章では、Oracle Security EngineのSoftware Development Kit(SDK)証明書パッケージの使用について説明します。Oracle Security EngineはOracle Cryptoのスーパーセットです。Oracle Cryptoで提供されるすべてのライブラリとツールの他に、デジタル証明書を生成するためのパッケージとユーティリティが含まれます。

Java開発者は、Oracle Cryptoを使用して、データのセキュリティと整合性を確保するアプリケーションを開発することができます。Oracle Cryptoの機能の詳細は、第2章「Oracle Crypto」を参照してください。

公開鍵インフラストラクチャ(PKI)の概要は、第1章「公開鍵インフラストラクチャ(PKI)」を参照してください。

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

4.1 Oracle Security Engineの機能と利点

Oracle Security Engineでは、次の機能が提供されます。

4.1.1 Oracle Security Engineのパッケージ

Oracle Security Engineのツールキットには、次のパッケージが含まれます。

  • oracle.security.crypto.cert: デジタル証明書、CRL、およびPKCS#12を扱う機能

  • oracle.security.crypto.cert.ext: 標準X.509証明書およびCRL拡張

4.2 Oracle Security Engineの環境設定

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

4.2.1 Oracle Security Engineのシステム要件

Oracle Security Engineを使用するには、システムにJava Development Kit(JDK)バージョン1.2.2が必要です。

4.2.2 CLASSPATH環境変数の設定

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

  • osdt_core.jar

  • osdt_cert.jar

4.2.2.1 WindowsでのCLASSPATHの設定

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

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

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

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

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

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

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

    %CLASSPATH%;C:\ORACLE_HOME\jlib\osdt_core.jar;
    C:\ORACLE_HOME\jlib\osdt_cert.jar;
    
    
  6. 「OK」をクリックします。

4.2.2.2 UNIXでのCLASSPATHの設定

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

setenv CLASSPATH $CLASSPATH:$ORACLE_HOME/jlib/osdt_core.jar:\
$ORACLE_HOME/jlib/osdt_cert.jar:

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

この項では、Oracle Security Engineの証明書機能のクラスの使用について説明し、コード例を示します。Oracle Security Engineには、Oracle Cryptoで提供されるすべてのクラスが含まれます。Oracle Cryptoのコア・クラスの詳細は、第2章「Oracle Crypto」を参照してください。

証明書機能のコア・クラスを次に示します。

4.3.1 oracle.security.crypto.cert.X500RDNクラス

X.500相対識別名(RDN)を表すクラス。これは、X.500の名前のビルディング・ブロックです。RDNは、一連の属性と値のペアで構成されます。通常、各RDNには1つの属性と値のペアが含まれます。

例4-1 X500RDNオブジェクトを作成して取り出すコード例

// Create the X500RDN object
X500RDN rdn = new X500RDN(PKIX.id_at_commonName, "Joe Smith");

// Retrieve the value
X500Name n = Instance of oracle.security.crypto.cert.X500Name;
String name = n.getAttribute(PKIX.id_at_commonName).getValue().getValue();

4.3.2 oracle.security.crypto.cert.X500Nameクラス

このクラスは、X.500シリーズの仕様で使用され、X.520で定義されている識別名を表します。X500Nameオブジェクトは、X500RDNオブジェクトで構成されます。X500Nameは、共通名、国、組織などエンティティを定義する属性を保持します。

X500Nameオブジェクトを作成するには、標準のコンストラクタを使用してから、オブジェクトに属性を移入します。オブジェクトが作成されると、他のプロセスで使用できるようにDERエンコードを行うことができます。

例4-2 X500Nameオブジェクトを作成するコード例

X500Name name = new X500Name();
name.addComponent(PKIX.id_at_commonName, "Joe Smith");
name.addComponent(PKIX.id_at_countryName, "USA");
name.addComponent(PKIX.id_at_stateOrProvinceName, "NY");
name.addComponent(PKIX.id_at_localityName, "New York");
name.addComponent(PKIX.id_at_organizationName, "Oracle");
name.addComponent(PKIX.id_at_organizationalUnitName, "Engineering");
name.addComponent(PKIX.emailAddress, "joe.smith@oracle.com");

// Make object DER-encoded so its available to other processes

byte[] encodedName = Utils.toBytes(name);
X500Name n = new X500Name(new ByteArrayInputStream(encodedName));
String name = n.getAttribute(PKIX.id_at_commonName).getValue().getValue();
String email = n.getAttribute(PKIX.emailAddress).getValue().getValue();

4.3.3 oracle.security.crypto.cert.CertificateRequestクラス

このクラスは、エンティティの情報とリクエストの内容の署名が含まれるPKCS#10証明書リクエストを表します。証明書リクエストは、認証局(CA)に情報と認証データ(署名)を渡すために使用されます。認証局がこれらを使用して、対応するエンティティの証明書を生成します。

新しい証明書リクエストを作成する手順の概要は次のとおりです。

  1. 引数なしのコンストラクタを使用し、鍵とサブジェクト名を設定するか、X500NameKeyPairオブジェクトをとるコンストラクタを使用して、CertificateRequestの新しいインスタンスを作成します。

  2. X.509拡張領域を証明書リクエストに追加します。

  3. 証明書リクエストに署名し、ファイルに保存します。

  4. 作成した証明書リクエストを認証局に送信します。

例4-3 証明書リクエストを作成するコード例

//Create CertificateRequest by setting the keys and subject name
 CertificateRequest certReq = new CertificateRequest();
 certReq.setPrivateKey(privKey);
certReq.setPublicKey(pubKey);
 certReq.setSubject(subjectName);

//OR

// Create CertificateRequest by taking an X500Name and KeyPair object
CertificateRequest certReq = new CertificateRequest(subjectName, keyPair);

// Add X.509 certificate extensions in a extensionRequest attribute
X509ExtensionSet extSet = new X509ExtensionSet();

// Basic Constraints: non-CA, critical
extSet.addExtension(new BasicConstraintsExtension(false, true));

// Key Usage: signature, data encipherment, key agreement
// & non-repudiation flags, critical
extSet.addExtension(new KeyUsageExtension(new int[] {
     KeyUsageExtension.DIGITAL_SIGNATURE,
     KeyUsageExtension.DATA_ENCIPHERMENT,
     KeyUsageExtension.KEY_AGREEMENT,
     KeyUsageExtension.NON_REPUDIATION},
        true));

// Subject Alternative Name: email address, non-critical
if (email.length() > 0)
    extSet.addExtension(new SubjectAltNameExtension(
        new GeneralName(GeneralName.Type.RFC822_NAME, email), false));

// Subject Key Identifier: key ID bytes, non-critical
extSet.addExtension(new SubjectKeyIDExtension
    (CryptoUtils.generateKeyID(kp.getPublic())));
req.addAttribute(PKIX.extensionRequest, extSet);

// Sign the certificate request and save to file
req.sign();
req.output(reqOS);
reqOS.close();
	}
// The certificate request can then be sent to a CA

4.3.4 oracle.security.crypto.cert.X509クラス

このクラスはX.509証明書を表します。Oracle Security Engineでは、新しい証明書の生成と既存の証明書の解析がサポートされます。

4.4 Oracle Security EngineのJava APIリファレンス

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

『Oracle Security Developer Tools Security Engine Java API Reference』