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)が使用する情報および認証データ(署名)を渡して、対応するエンティティの証明書を生成するために使用されます。
新しい証明書リクエストを作成するステップの概要は次のとおりです。
- 引数なしのコンストラクタを使用し、キーとサブジェクト名を設定するか、
X500Name
とKeyPair
オブジェクトをとるコンストラクタを使用して、CertificateRequest
の新しいインスタンスを作成します。 - X.509拡張領域を証明書リクエストに追加します。
- 証明書リクエストに署名し、ファイルに保存します。
- 作成した証明書リクエストを認証局に送信します。
//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リファレンス