Wallet (mTLS)を使用したJDBC Thin接続

Autonomous Databaseでは、トランスポート層セキュリティ(TLSv1.2)を使用するセキュアな接続が必要です。ネットワーク構成オプションに応じて、Autonomous DatabaseではmTLS認証とTLS認証がサポートされます。

ノート

JDK8u162以上のJDBC Thinドライバを使用する接続に、mTLSではなくTLSを使用する場合、ウォレットは必要ありません。TLS接続は、次のネットワーク構成に対して有効です:


  • プライベート・エンドポイントのみ: プライベート・エンドポイントを使用したネットワーク構成

  • 許可されたIPおよびVCNからのセキュア・アクセスのみ: アクセス制御リスト(ACL)を使用した構成

    Autonomous DatabaseがACLのないパブリック・エンドポイント上にある場合は、CIDR ACLとして0.0.0.0/0を追加し、TLS認証を有効にできます。CIDR ACLとしての0.0.0.0/0の追加は、ACLのないパブリック・エンドポイント上にAutonomous Databaseを持つことと同じです。

詳細は、TLS認証についてを参照してください。

ウォレット(mTLS)を使用した接続のためのJDBC Thinドライバ接続の前提条件

JDBC Thinドライバを使用するアプリケーションは、TLS認証および相互TLS (mTLS)認証をサポートしています。mTLS認証を使用するには、データベースへの接続時にOracleウォレットまたはJava KeyStore (JKS)ファイルを含むOracleデータベース資格証明を指定する必要があります。

データベースに接続する前に、次のステップを実行します:

  1. Autonomous Databaseのプロビジョニング: データベースを作成し、データベース資格証明(ユーザー名とパスワード)を取得します。

    詳細は、Autonomous Databaseインスタンスのプロビジョニングを参照してください。

  2. クライアント資格証明のダウンロード: wallet_データベース名.zipを安全な場所に解凍します。権限のあるユーザーのみがこれらのファイルにアクセスできるようにします。

    Autonomous Databaseのクライアント資格証明のダウンロードの詳細は、「クライアント資格証明(ウォレット)のダウンロード」を参照してください。

  3. JDKバージョンのセキュリティの確認: JDK11、JDK10またはJDK9を使用している場合、このステップでは何もする必要はありません。JDKバージョンがJDK8u162未満の場合は、JCE Unlimited Strength Jurisdiction Policy Filesをダウンロードする必要があります。インストール・ノートは、READMEファイルを参照してください。JCEファイルを「Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8のダウンロード」からダウンロードします。
  4. JDBCドライバ・バージョンのチェック: サポートされているJDBC Thinドライバ(ojdbc8.jarおよびucp.jar)をダウンロードします。Oracleウォレットで使用するには、追加のjar(oraclepki.jarosdt_core.jarおよびosdt_cert.jar)も必要です。

    サポートされているバージョンは次のとおりです。

    • JDBC Thin: 11.2.0.4 (またはBug 28492769の個別パッチを含む以降)、12.2 (またはBug 28492769の個別パッチを含む以降)、18 (Bug 28492769の個別パッチを含む基本リリース以降)、19 (基本リリース以降)、または21 (基本リリース以降)

    JDBCのユニバーサル接続プール(UCP)機能を使用するアプリケーションの場合、19.13以上または21.3以上のバージョンのJDBCドライバを使用することを強くお薦めします。これらのバージョンには、Autonomous Databaseで計画メンテナンスが実行された場合のアプリケーションへの影響を最小限に抑えるための適切な排出動作が含まれています。UCPは、アクティブな接続がメンテナンスの影響を受けないように、プール内の接続をプロアクティブに補充します。

    ドライバの古いバージョンでは、サービスリクエストを提出することで bug 31112088のパッチをリクエストすることもできます。

    サポートされているバージョンをダウンロードします: Oracle Database JDBCドライバおよびコンパニオンJarのダウンロード

JDBC ThinドライバおよびウォレットでのJDBC URL接続文字列の使用

接続文字列は、クライアント資格証明ダウンロードの一部であるtnsnames.oraファイルにあります。tnsnames.oraファイルには、事前定義済のサービス名が記述されています。各サービスには、独自のTNS別名および接続文字列があります。

tnsnames.oraにTNS別名および接続文字列としてdbname_highを指定したサンプル・エントリを次に示します:
dbname_high= (description=
      (address=(protocol=tcps)(port=1522)(host=adb.example.oraclecloud.com))
      (connect_data=(service_name=dbname_high.oraclecloud.com))(security=(ssl_server_dn_match=yes)))

プロパティTNS_ADMINを使用してtnsnames.oraの場所を次のいずれかの方法で設定します:

  • 接続文字列の一部として(18.3以降のJDBCドライバの場合のみ)
  • システム・プロパティ-Doracle.net.tns_adminとして
  • 接続プロパティとして(OracleConnection.CONNECTION_PROPERTY_TNS_ADMIN)

18.3 JDBCドライバを使用する場合、接続文字列にはTNS別名とTNS_ADMIN接続プロパティが含まれます。

18.3 JDBCドライバを使用した接続文字列のサンプル(Linux):

DB_URL="jdbc:oracle:thin:@dbname_high?TNS_ADMIN=/Users/test/wallet_dbname"

18.3 JDBCドライバを使用した接続文字列のサンプル(Windows):

DB_URL="jdbc:oracle:thin:@dbname_high?TNS_ADMIN=C:\\Users\\test\\wallet_dbname"

TNS_ADMIN接続プロパティは、次を指定します:

  • tnsnames.oraの場所。
  • Oracle Wallet (ewallet.ssoewallet.p12)またはJava KeyStore (JKS)ファイル(truststore.jkskeystore.jks)の場所。
  • ojdbc.propertiesの場所。このファイルには、OracleウォレットまたはJava KeyStore (JKS)の使用に必要な接続プロパティが含まれています。
ノート

12.2.0.1または古いJDBCドライバを使用している場合、接続文字列にはTNS別名のみが含まれます。古いJDBCドライバを使用して接続するには:

  • tnsnames.oraの場所を、システム・プロパティ(-Doracle.net.tns_admin)または接続プロパティ(OracleConnection.CONNECTION_PROPERTY_TNS_ADMIN)として設定します。
  • TNS_ADMINに加えて、ウォレットまたはJKSに関連する接続プロパティを設定します。

たとえば、この場合、次のように、TNS_ADMIN部分を含まないTNS別名をDB_URLに設定します:

DB_URL=”jdbc:oracle:thin:@dbname_high”

詳細については、Database Service Names for Autonomous Databaseを参照してください。

18.3 JDBCドライバとのJDBC接続の使用

JDBC Thinドライバを使用するアプリケーションは、OracleウォレットまたはJava KeyStore (JKS)のいずれかを使用してAutonomous Databasesに接続できます。

Oracle Walletの使用

Javaおよび18.3 JDBC Thinドライバを使用してOracle WalletでAutonomous Databaseに接続するには、次を実行します:

  1. 前提条件が満たされていることの確認: 詳細は、ウォレット(mTLS)を使用した接続のためのJDBC Thinドライバ接続の前提条件を参照してください。

  2. 接続の検証: Javaプログラム、サーブレットまたはIDEを使用して、データベースへの接続を検証できます。簡単なテストとして、DataSourceSample.javaまたはUCPSample.javaJDBCコード・サンプルからダウンロードし、必要なTNS別名を持つように接続URLを更新し、tnsnames.oraおよびウォレット・ファイルのパスを指定してTNS_ADMINを渡します。また、サンプル・ソース・コードでは、データベース・ユーザー名とパスワードを更新します。たとえば:

    DB_URL="jdbc:oracle:thin:@dbname_high?TNS_ADMIN=/Users/test/wallet_dbname"
    ノート

    データベースでMicrosoft Active Directoryを使用している場合、サンプル・ソース・コードでは、Active Directoryユーザー名でユーザー名を更新し、Active Directoryユーザー・パスワードでパスワードを更新します。詳細は、Autonomous DatabaseでのMicrosoft Active Directoryの使用を参照してください。
  3. ウォレットの場所の設定: プロパティ・ファイルojdbc.propertiesには、ウォレット関連の接続プロパティが事前にロードされています。

    oracle.net.wallet_location=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=${TNS_ADMIN})))
    ノート

    ファイルojdbc.propertiesは変更できません。TNS_ADMINの値によって、ウォレットの場所が決まります。
  4. コンパイルして実行:サンプルをコンパイルして実行し、正常な接続を取得します。oraclepki.jarosdt_core.jarおよびosdt_cert.jarclasspathにあることを確認します。たとえば、次のとおりです。

    java –classpath
          ./lib/ojdbc8.jar:./lib/ucp.jar:./lib/oraclepki.jar:./lib/osdt_core.jar:./lib/osdt_cert.jar:. UCPSample
ノート

Autonomous Databaseでダウンロードしたクライアント資格証明zipファイルの自動ログイン・ウォレット部分により、アプリケーションはユーザー名/パスワード認証を使用する必要がありません。

Java KeyStoreの使用

Javaおよび18.3 JDBC Thinドライバを使用してJava KeyStore (JKS)でAutonomous Databaseに接続するには、次の手順を実行します。

  1. 前提条件が満たされていることの確認: 詳細は、ウォレット(mTLS)を使用した接続のためのJDBC Thinドライバ接続の前提条件を参照してください。

  2. データベースの詳細の準備: Javaプログラム、サーブレットまたはIDEを使用して、データベースへの接続を確認できます。簡単なテストとして、DataSourceSample.javaまたはUCPSample.javaJDBCコード・サンプルからダウンロードできます。このサンプルでは、次のように接続URLを使用します。接続DB_URLには、TNS別名(tnsnames.oraに存在するdbname_highなど)が含まれていることに注意してください。URLに示すように、TNS_ADMINプロパティを介してtnsnames.oraファイルのパスを指定できます。データベースに関連するデータベース・ユーザー名とパスワードを使用してください。

    DB_URL="jdbc:oracle:thin:@dbname_high?TNS_ADMIN=/Users/test/wallet_dbname"
    ノート

    Microsoft Active DirectoryをAutonomous Databaseで使用している場合は、Active Directoryユーザー名およびActive Directoryユーザー・パスワードを使用するようにサンプル・ソース・コードを変更してください。詳細は、Autonomous DatabaseでのMicrosoft Active Directoryの使用を参照してください。
  3. JKS関連の接続プロパティの設定: JKS関連の接続プロパティをojdbc.propertiesファイルに追加します。keyStoreおよび信頼ストアのパスワードは、クライアント資格証明.zipファイルのダウンロード時に指定したパスワードです。

    Oracle WalletのかわりにSSL接続を使用するには、キーストア・ファイル、信頼ストア・ファイル、およびそれぞれのパスワードをojdbc.propertiesファイルで次のように指定します:

    
    # Properties for using Java KeyStore (JKS)
    oracle.net.ssl_server_dn_match=true
    javax.net.ssl.trustStore==${TNS_ADMIN}/truststore.jks
    javax.net.ssl.trustStorePassword=password
    javax.net.ssl.keyStore==${TNS_ADMIN}/keystore.jks
    javax.net.ssl.keyStorePassword=password
    ノート

    ojdbc.propertiesのウォレット関連のプロパティはコメント化してください。たとえば、次のとおりです。
    
    # Property for using Oracle Wallets
    # oracle.net.wallet_location=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=${TNS_ADMIN})))
  4. コンパイルして実行:サンプルをコンパイルして実行し、正常な接続を取得します。次に例を示します。

    java –classpath ./lib/ojdbc8.jar:./lib/ucp.jar UCPSample

12.2 以前のJDBC Thinドライバを使用した接続

JDBCドライバの12.2.0.2以前を使用している場合は、アプリケーションを起動する前にJavaプロパティを設定します。通常、プロパティはアプリケーションの起動スクリプトで設定します。

最新の18.3 JDBCドライバを使用できない場合は、12.2.0.2またはその他の古いJDBCドライバを使用してAutonomous Databaseに接続できます。12.2 以前のJDBCドライバは、ojdbc.propertiesファイルをサポートしていません。古いバージョンのJDBCドライバでは、接続を確立するには、ウォレットまたはJKS関連プロパティをシステム・プロパティまたは接続プロパティとして渡す必要があります。

Oracle Walletの使用

Javaおよび12.2以前のJDBCドライバを使用してOracle WalletでAutonomous Databaseに接続するには、次を実行します:

  1. 前提条件が満たされていることの確認: 詳細は、ウォレット(mTLS)を使用した接続のためのJDBC Thinドライバ接続の前提条件を参照してください。

  2. 接続の検証: Javaプログラム、サーブレットまたはIDEを使用して、データベースへの接続を検証できます。簡単なテストとして、DataSourceSample.javaまたはUCPSample.javaJDBCコード・サンプルからダウンロードし、必要なTNS別名を持つように接続URLを更新します。また、データベース・ユーザー名とパスワードを使用するようにサンプル・ソース・コードを更新します。たとえば:

    DB_URL="jdbc:oracle:thin:@dbname_high”
    ノート

    Microsoft Active DirectoryをAutonomous Databaseで使用している場合は、Active Directoryユーザー名およびActive Directoryユーザー・パスワードを使用するようにサンプル・ソース・コードを更新してください。詳細は、Autonomous DatabaseでのMicrosoft Active Directoryの使用を参照してください。
  3. ウォレットの場所の設定: java.securityファイル内のプロバイダ・リストの最後に、通常は次のようなOraclePKIProviderを追加します(このファイルは、$JRE_HOME/JRE/lib/security/java.securityにあるJREインストールの一部です):

    security.provider.14=oracle.security.pki.OraclePKIProvider
  4. コンパイルして実行:サンプルをコンパイルして実行し、正常な接続を取得します。oraclepki.jarosdt_core.jarおよびosdt_cert.jarclasspathにあることを確認します。また、接続プロパティを渡す必要があります。 tnsnames.oraおよびウォレット・ファイルが存在する場所でプロパティを更新します。

    java –classpath 
    ./lib/ojdbc8.jar:./lib/ucp.jar:./lib/oraclepki.jar:./lib/osdt_core.jar:./lib/osdt_cert.jar:.
    -Doracle.net.tns_admin=/users/test/wallet_dbname  
    -Doracle.net.ssl_server_dn_match=true  
    -Doracle.net.ssl_version=1.2  (Not required for 12.2)
    -Doracle.net.wallet_location= “(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/users/test/wallet_dbname)))” 
    UCPSample
ノート

これらはWindowsシステムの例です。UNIX (LinuxまたはMac)の複数の行で–Dプロパティを設定している場合は、\継続文字を追加します。

Java KeyStoreの使用

Javaおよび12.2以前のJDBC Thinドライバを使用してJava KeyStore (JKS)でAutonomous Databaseに接続するには、次の手順を実行します:

  1. 前提条件が満たされていることの確認: 詳細は、ウォレット(mTLS)を使用した接続のためのJDBC Thinドライバ接続の前提条件を参照してください。

  2. 接続の検証: Javaプログラム、サーブレットまたはIDEを使用して、データベースへの接続を検証できます。簡単なテストとして、DataSourceSample.javaまたはUCPSample.javaJDBCコード・サンプルからダウンロードし、必要なTNS別名を持つように接続URLを更新し、tnsnames.oraのパスを指定してTNS_ADMINを渡し、必要なTNS別名を持つように接続URLを更新できます。また、サンプル・ソース・コードでは、データベース・ユーザー名とパスワードを更新します。例:

    DB_URL="jdbc:oracle:thin:@dbname_high”
    ノート

    Microsoft Active DirectoryをAutonomous Databaseで使用している場合は、Active Directoryユーザー名およびActive Directoryユーザー・パスワードを使用するようにサンプル・ソース・コードを更新してください。詳細は、Autonomous DatabaseでのMicrosoft Active Directoryの使用を参照してください。
  3. コンパイルして実行: サンプルをコンパイルして実行し、正常な接続を取得します。次のように接続プロパティを渡す必要があります。 tnsnames.oraおよびJKSファイルが存在する場所でプロパティを更新します。これらの接続プロパティをプログラムで渡す場合は、DataSourceForJKS.javaを参照してください。たとえば:

    java 
    -Doracle.net.tns_admin=/users/test/wallet_dbname
    -Djavax.net.ssl.trustStore=truststore.jks
    -Djavax.net.ssl.trustStorePassword=**********
    -Djavax.net.ssl.keyStore=keystore.jks    
    -Djavax.net.ssl.keyStorePassword=************   
    -Doracle.net.ssl_server_dn_match=true    
    -Doracle.net.ssl_version=1.2 // Not required for 12.2

HTTPプロキシでのJDBC Thin接続

クライアントがファイアウォール内に存在し、インターネットに接続するためにネットワーク構成でHTTPプロキシが必要な場合、HTTPプロキシを介した接続を可能にするJDBC Thin Client 18.1以上を使用する必要があります。

HTTPSプロキシを介してAutonomous Databaseに接続するには、tnsnames.oraファイルを開いて更新します。HTTPプロキシのホスト名(https_proxy)とポート(https_proxy_port)を接続文字列に追加します。値をHTTPSプロキシ情報に置き換えます。例:

  1. HTTPプロキシのホスト名とポートをtnsnames.oraの接続定義に追加します。接続定義のアドレス・セクションにhttps_proxyおよびhttps_proxy_portパラメータを追加する必要があります。たとえば、次の例ではHTTPプロキシをproxyhostnameに設定し、HTTPプロキシ・ポートを80に設定しています(これらの値は実際のHTTPプロキシ情報に置き換えてください):

db2022adb_high =
       (description=
             (address=
                   (https_proxy=proxyhostname)(https_proxy_port=80)(protocol=tcps)(port=1522)(host=adb.example.oraclecloud.com)
             )
             (connect_data=(service_name=db2022adb_high.adb.oraclecloud.com)
             )
             (security=security=(ssl_server_dn_match=yes)
             )
       )
ノート

  • JDBC Thin Client 18.1より前のバージョンでは、HTTPプロキシを介した接続はサポートされていません。

  • 接続が成功するかどうかは、特定のプロキシ構成に依存し、データ転送のパフォーマンスはプロキシ容量に依存します。Oracleでは、パフォーマンスが重要な本番環境でこの機能を使用することはお薦めしません。

  • tnsnames.oraをHTTPプロキシ用に構成しても、組織のネットワーク構成とセキュリティ・ポリシーによっては十分でない場合があります。たとえば、一部のネットワークではHTTPプロキシのユーザー名とパスワードが必要です。

  • いずれの場合も、HTTPプロキシを経由せずに、関連するポートを使用してoraclecloud.comドメイン内のホストへのアウトバウンド接続を開くには、ネットワーク管理者に連絡してください。