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

戻る
戻る
 
次へ
次へ
 

4 Oracle Security Engine

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


注意:

Oracle AS 11gリリース1以降では、Oracle Security Engineライブラリの使用はお薦めしません。かわりに、JDKの証明書APIを使用します。

詳細は、次のサイトにあるJDKドキュメントを参照してください。

http://java.sun.com/javase/6/docs/technotes/guides/security/cert3.html

ただし、次のPublic-Key Cryptography Standards(PKCS)には、JCEと同等の機能は含まれません。

  • PKCS#7

  • PKCS#10

  • Signed Public Key And Challenge(SPKAC)

これらの機能では、Oracle Security Engineを引き続き使用できます。


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

公開鍵インフラストラクチャの概要は、第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.4が必要です。

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%;
    %ORACLE_HOME%\modules\oracle.osdt_11.1.1\osdt_core.jar;
    %ORACLE_HOME%\modules\oracle.osdt_11.1.1\osdt_cert.jar;
    
  6. 「OK」をクリックします。

4.2.2.2 UNIXでのCLASSPATHの設定

UNIXでCLASSPATHを設定するには、必要な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:

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

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

OracleAS 11gリリース1におけるクラスの変更点

OracleAS 11gリリース1では、証明書管理のためのoracle.security.crypto.cert.X509クラスがjava.security.cert.X509Certificateで置き換えられています。

証明書のコア・クラス

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

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 java.security.cert.X509Certificateクラス


注意:

Oracle Application Server 11gでは、X.509証明書管理のためのoracle.security.crypto.cert.X509がこのクラスで置き換えられています。

java.security.cert.X509Certificateクラスでは、新しい証明書の生成と既存の証明書の解析がサポートされます。

java.security.cert.X509Certificateクラスの完全なドキュメントは、http://java.sun.com/j2se/1.4.2/docs/api/java/security/cert/X509Certificate.htmlで入手できます。

java.security.cert.X509Certificateを使用するためのコードの変換

X509Certificateオブジェクは、証明書ファクトリjava.security.cert.CertificateFactoryを使用して作成できます。

証明書は、次の入力ストリームから生成できます。

  • FileInputSream(証明書がファイルに格納されている場合)

  • ByteArrayInputStream(エンコードされたバイトが既存のX509オブジェクトから生成される場合)

  • その他のソース

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

// Generating an X.509 certificate from a file-based certificate
                  
CertificateFactory cf = CertificateFactory.getInstance("X.509");
     
X509Certificate cert = (X509Certificate)cf.generateCertificate(
                       new FileInputStream(certFileName);

**

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

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

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

4.5 サンプル・プログラム

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