Oracle® Fusion Middleware Oracle Security Developer Toolsによるアプリケーションの開発 12c (12.2.1) E72521-01 |
|
前 |
次 |
Oracle Security Engineは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)について」を参照してください。
この章のトピックは、次のとおりです:
Oracle Security EngineはX.509、PKCS#10およびPKCS#12証明書を、RDN、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拡張
Oracleセキュリティ開発ツールは、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;
関連項目:
この項では、Oracle Security Engineの証明書機能のクラスの使用について説明し、コード例を示します。Oracle Security Engineには、Oracle Cryptoで提供されるすべてのクラスが含まれます。Oracle Cryptoのコア・クラスの詳細は、「Oracle Crypto」を参照してください。
リリース11gR1でのクラスの変更
リリース11gR1では、証明書管理のためのoracle.security.crypto.cert.X509クラスがjava.security.cert.X509Certificateで置き換えられました
証明書のコア・クラス
このクラスは、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();
このクラスは、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();
このクラスは、エンティティの情報とリクエストの内容の署名が含まれるPKCS#10証明書リクエストを表します。証明書リクエストは、認証局(CA)が使用する情報および認証データ(署名)を渡して、対応するエンティティの証明書を生成するために使用されます。
新しい証明書リクエストを作成する手順の概要は次のとおりです。
X500Name
とKeyPair
オブジェクトをとるコンストラクタを使用して、CertificateRequest
の新しいインスタンスを作成します。//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 WebLogic Server 11gでは、X.509証明書管理のためのoracle.security.crypto.cert.X509がこのクラスで置き換えられています。
java.security.cert.X509Certificateクラスでは、新しい証明書の生成と既存の証明書の解析がサポートされます。
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);
**