3 Oracle Security Engine

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

注意:

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

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

http://www.oracle.com/technetwork/java/index.html

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

  • PKCS#7

  • PKCS#10

  • Signed Public Key And Challenge

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

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

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

この章のトピックは、次のとおりです:

3.1 Oracle Security Engineの機能と利点

Oracle Security Engineは、X.509、PKCS#10およびPKCS#12証明書をRDNおよびCRLとともにサポートします。デジタル証明書、CRLおよびPKCS#12の処理をサポートするパッケージが含まれています。これらのパッケージは、標準のX.509証明書とCRL拡張も処理します。

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

  • RFC 3280に定義されているX.509バージョン3証明書。

  • PKCS#12の全面的なサポート

  • 証明書リクエストのためのPKCS#10のサポート。

  • RFC 3280で定義されている証明書失効リスト(CRL)機能。

  • Signed Public Key And Challenge (SPKAC)の実装。

  • X.500相対識別名のサポート。

  • X.509証明書とCRLをラップするためのPKCS#7のサポート。

  • 標準X.509証明書とCRL拡張の実装。

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

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

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

3.2 Oracle Security Engineの環境設定

Oracle Security Developer Toolsは、Oracle WebLogic ServerとともにORACLE_HOMEにインストールされます。Oracle Security Engineを使用するには、システムにJava Development Kit (JDK)バージョン1.6以上が必要です。CLASSPATH環境変数には、必要なjarファイルおよびclassファイルのフルパスとファイル名を指定してください。

次の項目をCLASSPATHに指定します。

  • osdt_core.jar

  • osdt_cert.jar

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

%CLASSPATH%;
%ORACLE_HOME%\modules\oracle.osdt_11.1.1\osdt_core.jar;
%ORACLE_HOME%\modules\oracle.osdt_11.1.1\osdt_cert.jar;

3.3 Oracle Security Engineのコア・クラスとインタフェース

Oracle Security Engineには、Oracle Cryptoで提供されるすべてのクラスが含まれます。また、証明書機能の複数のコア・クラスも含まれています。

リリース11gR1でのクラスの変更

リリース11gR1では、証明書管理のためのoracle.security.crypto.cert.X509クラスがjava.security.cert.X509Certificateで置き換えられました

証明書のコア・クラス

3.3.1 oracle.security.crypto.cert.X500RDNクラスの使用方法

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

// 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();

3.3.2 oracle.security.crypto.cert.X500Nameクラスの使用方法

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

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

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@example.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();

3.3.3 oracle.security.crypto.cert.CertificateRequestクラスの使用方法

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

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

  1. 引数なしのコンストラクタを使用し、鍵とサブジェクト名を設定するか、X500NameKeyPairオブジェクトをとるコンストラクタを使用して、CertificateRequestの新しいインスタンスを作成します。
  2. X.509拡張領域を証明書リクエストに追加します。
  3. 証明書リクエストに署名し、ファイルに保存します。
  4. 作成した証明書リクエストを認証局に送信します。
//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

3.3.4 java.security.cert.X509Certificateクラスの使用方法

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

注意:

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

java.security.cert.X509Certificateクラスの完全なドキュメントは、http://www.oracle.com/technetwork/java/index.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);

**

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

Oracle Security Engineのクラスとメソッドについては、『Oracle Fusion Middleware Oracle Security Developer Tools Java APIリファレンス』を参照してください。

このガイドには、次のリンクからアクセスできます。

Oracle Fusion Middleware Oracle Security Developer Tools Java APIリファレンス