Oracle® Fusion Middleware Oracle Security Developer Toolsリファレンス 11gリリース1(11.1.1) B61386-01 |
|
戻る |
次へ |
この章では、Oracle Security EngineのSoftware Development Kit(SDK)証明書パッケージの使用について説明します。Oracle Security EngineはOracle Cryptoのスーパーセットです。Oracle Cryptoで提供されるすべてのライブラリとツールの他に、デジタル証明書を生成するためのパッケージとユーティリティが含まれます。
注意: Oracle AS 11gリリース1以降では、Oracle Security Engineライブラリの使用はお薦めしません。かわりに、JDKの証明書APIを使用します。詳細は、次のサイトにあるJDKドキュメントを参照してください。
ただし、次のPublic-Key Cryptography Standards(PKCS)には、JCEと同等の機能は含まれません。
これらの機能では、Oracle Security Engineを引き続き使用できます。 |
Java開発者は、Oracle Cryptoを使用して、データのセキュリティと整合性を確保するアプリケーションを開発することができます。Oracle Cryptoの機能の詳細は、第3章の「Oracle Crypto」を参照してください。
公開鍵インフラストラクチャの概要は、第1章の「公開鍵インフラストラクチャ(PKI)」を参照してください。
この章に含まれる内容は次のとおりです。
Oracle Security Engineでは、次の機能が提供されます。
RFC 3280に定義されているX.509バージョン3証明書。
PKCS#12の全面的なサポート。
証明書リクエストのためのPKCS#10のサポート。
RFC 3280で定義されている証明書失効リスト(CRL)機能。
X.500相対識別名のサポート。
X.509証明書とCRLをラップするためのPKCS#7のサポート。
標準X.509証明書とCRL拡張の実装。
Oracleセキュリティ開発ツールは、Oracle Application ServerとともにORACLE_HOME
にインストールされます。この項では、Oracle Security Engineの環境設定について説明します。この項に含まれる内容は次のとおりです。
Oracle Security Engineを使用するには、システムにJava Development Kit(JDK)バージョン1.4が必要です。
CLASSPATH
環境変数には、必要なjarファイルおよびclassファイルのフルパスとファイル名を指定してください。次の項目をCLASSPATH
に指定します。
osdt_core.jar
osdt_cert.jar
WindowsでCLASSPATH
を設定する手順を次に示します。
Windowsの「コントロール パネル」で「システム」を選択します。
「システムのプロパティ」ダイアログで「詳細設定」タブを選択します。
「環境変数」をクリックします。
ユーザー環境変数のセクションで「新規」をクリックし、CLASSPATH
環境変数をユーザー・プロファイルに追加します。CLASSPATH
環境変数がすでに存在している場合は、選択して「編集」をクリックします。
必要な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;
「OK」をクリックします。
この項では、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で置き換えられています。
証明書のコア・クラス
証明書機能のコア・クラスを次に示します。
このクラスは、X.500相対識別名(RDN)を表します。これは、X.500の名前のビルディング・ブロックです。RDNは、一連の属性と値のペアで構成されます。通常、各RDNには1つの属性と値のペアが含まれます。
このクラスは、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();
このクラスは、エンティティの情報とリクエストの内容の署名が含まれるPKCS#10証明書リクエストを表します。証明書リクエストは、認証局(CA)に情報と認証データ(署名)を渡すために使用されます。認証局がこれらを使用して、対応するエンティティの証明書を生成します。
新しい証明書リクエストを作成する手順の概要は次のとおりです。
引数なしのコンストラクタを使用し、鍵とサブジェクト名を設定するか、X500Name
とKeyPair
オブジェクトをとるコンストラクタを使用して、CertificateRequest
の新しいインスタンスを作成します。
X.509拡張領域を証明書リクエストに追加します。
証明書リクエストに署名し、ファイルに保存します。
作成した証明書リクエストを認証局に送信します。
例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
注意: 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);
**
Oracle Security EngineのJava APIリファレンス(Javadoc)は次のドキュメントで参照できます。
Oracle Fusion Middleware Security Engine Java API Reference for Oracle Security Developer Tools
Oracleセキュリティ開発ツールを使用したサンプル・プログラムについては、Oracle Technology Network Webサイト(http://www.oracle.com/technology/sample_code/products/id_mgmt/index.html
)を参照してください。