16 シンJDBCクライアント・ネットワークの構成
Oracle Databaseのネットワーク暗号化および厳密認証を使用すると、シンJava Database Connectivity (JDBC)クライアントは、Oracleデータベースに安全に接続できます。
- Java実装について
Oracle Databaseには、ネイティブ・ネットワーク暗号化と厳密認証のJava実装が用意されています。 - Java Database Connectivityのサポート
業界標準のJavaインタフェースであるJDBCは、Javaプログラムからリレーショナル・データベースに接続するためのJava標準です。 - シンJDBCの機能
シンJDBCドライバは、厳密認証、データ暗号化、データ整合性チェックなど、セキュリティ機能を備えています。 - 実装の概要
サーバー側で、アルゴリズムのネゴシエーションおよびキーの生成は、Oracle Database固有の暗号化とまったく同様に機能します。 - Java暗号化コードの不明瞭化
Java暗号化コードの不明瞭化では、不明瞭化ソフトウェアを使用して、暗号化機能と複号化機能を含むJavaクラスおよびメソッドを保護します。 - シンJDBCネットワーク実装の構成パラメータ
クライアントのシンJDBCネットワーク実装では、暗号化や整合性、認証サービスを制御するパラメータを提供します。
親トピック: ネットワーク上のデータの保護
16.1 Java実装について
Oracle Databaseには、ネイティブ・ネットワーク暗号化と厳密認証のJava実装が用意されています。
Oracle Databaseのネイティブ・ネットワーク暗号化および厳密認証のJava実装では、Oracle Databaseのネイティブ・ネットワーク暗号化および厳密認証が構成されているOracle Databaseと通信するシンJDBCクライアントに対して、ネットワーク認証、暗号化および整合性の保護が提供されます。
関連項目:
JDBCの詳細および例は、『Oracle Database JDBC開発者ガイド』を参照してください。親トピック: シンJDBCクライアント・ネットワークの構成
16.2 Java Database Connectivityのサポート
業界標準のJavaインタフェースであるJDBCは、Javaプログラムからリレーショナル・データベースに接続するためのJava標準です。
JDBC標準はSun Microsystemsによって規定され、オラクル社では独自のJDBCドライバによってこの標準を実装および拡張しています。
Oracle JDBCドライバは、Oracleデータベースと通信するJava Database Connectivity (JDBC)アプリケーションを作成するために使用されます。Oracleでは、CベースのOracle Netクライアントの最上部に構築されたシックJDBCドライバ、およびダウンロード可能なアプレットをサポートするシン(Pure Java)JDBCドライバの2つのタイプのJDBCドライバが実装されます。JDBCに対するOracleの拡張機能には、次の機能が含まれます。
-
データ・アクセスおよび操作
-
LOBアクセスおよび操作
-
Oracleオブジェクト型マッピング
-
オブジェクト参照アクセスおよび操作
-
配列アクセスおよび操作
-
アプリケーション・パフォーマンスの向上
親トピック: シンJDBCクライアント・ネットワークの構成
16.3 シンJDBCの機能
シンJDBCドライバは、厳密認証、データ暗号化、データ整合性チェックなど、セキュリティ機能を備えています。
シンJDBCドライバは、インターネットで使用されるダウンロード可能なアプレットとともに使用するように設計されているため、オラクル社では、シン・クライアントとともに使用するOracle Databaseのネイティブ・ネットワーク暗号化および厳密認証、暗号化および整合性のアルゴリズムがJavaで100%実装されるように設計しました。
Oracle Databaseには、シンJDBCのための次の機能が備えられています。
-
厳密認証
-
データの暗号化
-
データ整合性チェック
-
シンJDBCクライアントからOracle RDBMSへの接続の保護
-
開発者が安全な通信チャネルでデータを転送するアプレットを作成するための機能
-
Java Server Pages (JSP)を持つ中間層サーバーからOracle RDBMSへの接続の保護
-
Oracle Database 12cリリース1 (12.1)から旧バージョンのOracleデータベースへの接続の保護
Oracle JDBCシン・ドライバは、Oracle DatabaseのSSL実装およびRADIUSやKerberosなどのサード・パーティの認証方式をサポートしています。シンJDBCによるRADIUS、Kerberos、SSLなどの認証方式のサポートは、Oracle Database 11g リリース1 (11.1)で導入されました。
Oracle Databaseのネイティブ・ネットワーク暗号化および厳密認証のJava実装では、次の暗号化アルゴリズムのJavaバージョンが提供されます。
-
AES256
: AES 256ビット・キー -
AES192
: AES 192ビット・キー -
AES128
: AES 128ビット・キー
ノート:
前述のアルゴリズムのリストで、CBCは暗号ブロック連鎖モードのことです。
シンJDBCによるAdvanced Encryption Standard (AES)のサポートは、Oracle Database 12cリリース1 (12.1)で新たに導入されました。
また、この実装により、Secure Hash Algorithm (SHA1
)およびMessage Digest 5 (MD5
)を使用したシンJDBCのデータ整合性チェックが実行されます。シンJDBCによるSHA1
のサポートは、Oracle Database 11g リリース1 (11.1)で導入されました。
関連項目:
シンJDBCクライアントに対する認証、暗号化および整合性の構成の詳細は、『Oracle Database JDBC開発者ガイド』を参照してください。
ノート:
MD5は、このリリースでは非推奨です。より強力なアルゴリズムを使用するようにOracle Database環境を移行するには、My Oracle Supportノート2118136.2で説明されているパッチをダウンロードしてインストールします。
親トピック: シンJDBCクライアント・ネットワークの構成
16.4 実装の概要
サーバー側で、アルゴリズムのネゴシエーションおよびキーの生成は、Oracle Database固有の暗号化とまったく同様に機能します。
この機能により、クライアントとサーバーの下位および上位互換性が維持されます。
クライアント側では、アルゴリズムのネゴシエーションおよびキーの生成は、OCIクライアントとまったく同じ方法で行われます。クライアントとサーバーは、従来のOracle Netクライアントと同様の方法で、暗号化アルゴリズムのネゴシエーション、乱数の生成、Diffie-Hellmanを使用したセッション・キーの交換を行い、Oracle Password Protocolを使用します。シンJDBCには、Oracle Netクライアントがpure Javaで完全に実装されています。
親トピック: シンJDBCクライアント・ネットワークの構成
16.5 Java暗号化コードの不明瞭化
Java暗号化コードの不明瞭化では、不明瞭化ソフトウェアを使用して、暗号化機能と複号化機能を含むJavaクラスおよびメソッドを保護します。
Javaバイト・コードの不明瞭化は、Javaプログラムの形式で作成された知的財産を保護するためによく使用されるプロセスです。これによって、コード内のJavaシンボルが変更されます。プロセスは、元のプログラム構造をそのまま保持し、意図した動作を隠すためにクラス、メソッドおよび変数の名前を変更する一方でプログラムが正常に稼働するようにする。不明瞭化されていないJavaコードは再コンパイルして読むことができますが、不明瞭化されたJavaコードは再コンパイルが難しく、米国政府の輸出規制を満たすことができます。
親トピック: シンJDBCクライアント・ネットワークの構成
16.6 シンJDBCネットワーク実装の構成パラメータ
クライアントのシンJDBCネットワーク実装では、暗号化や整合性、認証サービスを制御するパラメータを提供します。
- シンJDBCネットワーク実装の構成パラメータについて
JDBCネットワーク実装の構成パラメータでは、クライアントとサーバー間接続で使用するセキュリティのレベルなど、ネットワーク設定を制御します。 - クライアント暗号化レベルのパラメータ
CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_LEVEL
パラメータは、クライアントがサーバーとのネゴシエートに使用するセキュリティのレベルを定義します。 - クライアント暗号化選択リストのパラメータ
CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_TYPES
パラメータは、使用する暗号化アルゴリズムを定義します。 - クライアント整合性レベルのパラメータ
CONNECTION_PROPERTY_THIN_NET_CHECKSUM_LEVEL
パラメータは、データ整合性のためにサーバーとネゴシエートする際のセキュリティのレベルを定義します。 - クライアント整合性選択リストのパラメータ
CONNECTION_PROPERTY_THIN_NET_CHECKSUM_TYPES
パラメータは、使用するデータ整合性アルゴリズムを定義します。 - クライアント認証サービスのパラメータ
CONNECTION_PROPERTY_THIN_NET_AUTHENTICATION_SERVICES
パラメータは、使用する認証サービスを決定します。 - AnoServices定数
oracle.net.ano.AnoServices
インタフェースには、JDBCシン・ドライバによってサポートされる暗号化、認証およびチェックサムのアルゴリズムの名前が含まれます。
親トピック: シンJDBCクライアント・ネットワークの構成
16.6.1 シンJDBCネットワーク実装の構成パラメータについて
JDBCネットワーク実装の構成パラメータでは、クライアントとサーバー間接続で使用するセキュリティのレベルなど、ネットワーク設定を制御します。
いくつかの構成パラメータを含むプロパティ・クラス・オブジェクトは、Oracle Databaseのネイティブ・ネットワーク暗号化および厳密認証インタフェースに渡されます。
Oracle Databaseに関連する接続プロパティを含むすべてのJDBC接続プロパティは、oracle.jdbc.OracleConnection
インタフェースで定数として定義されます。次のリストに、それらの接続プロパティの一部を列挙します。
関連項目:
構成パラメータおよび構成例の詳細は、『Oracle Database JDBC開発者ガイド』を参照してください。
親トピック: シンJDBCネットワーク実装の構成パラメータ
16.6.2 クライアント暗号化レベルのパラメータ
CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_LEVEL
パラメータは、クライアントがサーバーとのネゴシエートに使用するセキュリティのレベルを定義します。
表16-1に、このパラメータの属性を示します。
表16-1 CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_LEVEL属性
属性 | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータ・クラス |
静的 |
設定できる値 |
|
デフォルト値 |
|
構文 |
|
例 |
|
親トピック: シンJDBCネットワーク実装の構成パラメータ
16.6.3 クライアント暗号化選択リストのパラメータ
CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_TYPES
パラメータは、使用する暗号化アルゴリズムを定義します。
表16-2に、このパラメータの属性を示します。
表16-2 CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_TYPESの属性
属性 | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータ・クラス |
静的 |
設定できる値 |
AES256 (AES 256ビット・キー)、AES192 (AES 192ビット・キー)、AES128 (AES 128ビット・キー) |
構文 |
|
例 |
|
親トピック: シンJDBCネットワーク実装の構成パラメータ
16.6.4 クライアント整合性レベルのパラメータ
CONNECTION_PROPERTY_THIN_NET_CHECKSUM_LEVEL
パラメータは、データ整合性のためにサーバーとネゴシエートする際のセキュリティのレベルを定義します。
表16-3に、このパラメータの属性を示します。
表16-3 CONNECTION_PROPERTY_THIN_NET_CHECKSUM_LEVEL属性
属性 | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータ・クラス |
静的 |
設定できる値 |
|
デフォルト値 |
|
構文 |
|
例 |
|
親トピック: シンJDBCネットワーク実装の構成パラメータ
16.6.5 クライアント整合性選択リストのパラメータ
CONNECTION_PROPERTY_THIN_NET_CHECKSUM_TYPES
パラメータは、使用するデータ整合性アルゴリズムを定義します。
表16-4に、このパラメータの属性を示します。
表16-4 CONNECTION_PROPERTY_THIN_NET_CHECKSUM_TYPESの属性
属性 | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータ・クラス |
静的 |
設定できる値 |
SHA1 |
構文 |
|
例 |
|
親トピック: シンJDBCネットワーク実装の構成パラメータ
16.6.6 クライアント認証サービスのパラメータ
CONNECTION_PROPERTY_THIN_NET_AUTHENTICATION_SERVICES
パラメータは、使用する認証サービスを決定します。
表16-5に、このパラメータの属性を示します。
表16-5 CONNECTION_PROPERTY_THIN_NET_AUTHENTICATION_SERVICESの属性
属性 | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータ・クラス |
静的 |
設定できる値 |
|
構文 |
|
例 |
|
親トピック: シンJDBCネットワーク実装の構成パラメータ
16.6.7 AnoServices定数
oracle.net.ano.AnoServices
インタフェースには、JDBCシン・ドライバによってサポートされる暗号化、認証およびチェックサムのアルゴリズムの名前が含まれます。
次の定数がoracle.net.ano.AnoServices
インタフェースに含まれます。
// ---- SUPPORTED ENCRYPTION ALG ----- public static final String ENCRYPTION_RC4_40 = "RC4_40"; public static final String ENCRYPTION_RC4_56 = "RC4_56"; public static final String ENCRYPTION_RC4_128 = "RC4_128"; public static final String ENCRYPTION_RC4_256 = "RC4_256"; public static final String ENCRYPTION_DES40C = "DES40C"; public static final String ENCRYPTION_DES56C = "DES56C"; public static final String ENCRYPTION_3DES112 = "3DES112"; public static final String ENCRYPTION_3DES168 = "3DES168"; public static final String ENCRYPTION_AES128 = "AES128"; public static final String ENCRYPTION_AES192 = "AES192"; public static final String ENCRYPTION_AES256 = "AES256"; // ---- SUPPORTED INTEGRITY ALG ---- public static final String CHECKSUM_MD5 = "MD5"; public static final String CHECKSUM_SHA1 = "SHA1"; // ---- SUPPORTED AUTHENTICATION ADAPTORS ---- public static final String AUTHENTICATION_RADIUS = "RADIUS"; public static final String AUTHENTICATION_KERBEROS = "KERBEROS";
ノート:
DES40、3DES112、3DES168、MD5、RC4_40、RC4_56、RC4_128およびRC4-256アルゴリズムは、このリリースでは非推奨です。より強力なアルゴリズムを使用するようにOracle Database環境を移行するには、My Oracle Supportノート2118136.2で説明されているパッチをダウンロードしてインストールします。
これらの定数を使用して、暗号化、整合性および認証のパラメータを設定できます。例16-1に、その一例を示します。
例16-1 JDBCクライアント・コード内でのAnoServices定数の使用
import java.sql.*; import java.util.Properties;import oracle.jdbc.*; import oracle.net.ano.AnoServices; /** * JDBC thin driver demo: new security features in 11gR1. * * This program attempts to connect to the database using the JDBC thin * driver and requires the connection to be encrypted with either AES256 or AES192 * and the data integrity to be verified with SHA1. * * In order to activate encryption and checksumming in the database you need to * modify the sqlnet.ora file. For example: * * SQLNET.ENCRYPTION_TYPES_SERVER = (AES256,AES192,AES128) * SQLNET.ENCRYPTION_SERVER = accepted * SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER= (SHA1) * SQLNET.CRYPTO_CHECKSUM_SERVER = accepted * * This output of this program is: * Connection created! Encryption algorithm is: AES256, data integrity algorithm * is: SHA1 * */ public class DemoAESAndSHA1 { static final String USERNAME= "hr"; static final String PASSWORD= "hr"; static final String URL = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=somehost.us.example.com)(PORT=5561))" +"(CONNECT_DATA=(SERVICE_NAME=itydemo.regress.rdbms.dev.us.example.com)))"; public static final void main(String[] argv) { DemoAESAndSHA1 demo = new DemoAESAndSHA1(); try { demo.run(); }catch(SQLException ex) { ex.printStackTrace(); } } void run() throws SQLException { OracleDriver dr = new OracleDriver(); Properties prop = new Properties(); // We require the connection to be encrypted with either AES256 or AES192. // If the database doesn't accept such a security level, then the connection // attempt will fail. prop.setProperty( OracleConnection.CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_LEVEL,AnoServices.ANO_REQUIRED); prop.setProperty( OracleConnection.CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_TYPES, "( " + AnoServices.ENCRYPTION_AES256 + "," +AnoServices.ENCRYPTION_AES192 + ")"); // We also require the use of the SHA1 algorithm for data integrity checking. prop.setProperty( OracleConnection.CONNECTION_PROPERTY_THIN_NET_CHECKSUM_LEVEL,AnoServices.ANO_REQUIRED); prop.setProperty( OracleConnection.CONNECTION_PROPERTY_THIN_NET_CHECKSUM_TYPES, "( " + AnoServices.CHECKSUM_SHA1 + " )"); prop.setProperty("user",DemoAESAndSHA1.USERNAME); prop.setProperty("password",DemoAESAndSHA1.PASSWORD); OracleConnection oraConn = (OracleConnection)dr.connect(DemoAESAndSHA1.URL,prop); System.out.println("Connection created! Encryption algorithm is: "+oraConn.getEncryptionAlgorithmName() +", data integrity algorithm is: "+oraConn.getDataIntegrityAlgorithmName()); oraConn.close(); } }
親トピック: シンJDBCネットワーク実装の構成パラメータ