ウォレットを使用したJDBC Thin接続(mTLS)

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

ノート

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


  • プライベート・エンドポイント・アクセスのみ: プライベート・エンドポイントを含むネットワーク構成

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

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

詳細は、mTLSまたはTLSを使用したAutonomous Databaseへのセキュアな接続を参照してください。

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

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

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

  1. Autonomous Databaseのプロビジョニング: データベースを作成し、データベース資格証明(ユーザー名とパスワード)を取得します。
  2. 相互TLS接続の場合、クライアント資格証明のダウンロード: wallet_databasename.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 Walletで使用するために、追加の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)機能を使用するアプリケーションでは、JDBCドライバの19.13以上または21.3以上のバージョンを使用することを強くお薦めします。これらのバージョンには、Autonomous Databaseで計画メンテナンスを実行した場合のアプリケーションへの影響を最小限に抑えるための適切な排出動作が含まれています。UCPは、アクティブな接続がメンテナンスの影響を受けないように、プール内の接続を事前対応的に補充します。

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

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

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

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

TNS別名としてdbname_highを使用し、tnsnames.oraに接続文字列を指定したサンプル・エントリを次に示します:
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”

詳細は「Autonomous Databaseのデータベース・サービス名」を参照してください。

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

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

Oracle Walletの使用

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

  1. 前提条件が満たされていることを確認します: 詳細は、「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. 前提条件が満たされていることを確認します: 詳細は、「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"
    Note

    If you are using Microsoft Active Directory with Autonomous Database, then make sure to change the sample source code to use the Active Directory username and the Active Directory user password.詳細は、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プロパティを設定します。通常、プロパティはアプリケーションの起動スクリプトで設定します。

最新の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. 前提条件が満たされていることを確認します: 詳細は、「JDBC Thinドライバ接続のウォレット接続の前提条件」を参照してください。

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

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

    Autonomous DatabaseでMicrosoft Active Directoryを使用している場合、サンプル・ソース・コードで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. 前提条件が満たされていることを確認します: 詳細は、「JDBC Thinドライバ接続のウォレット接続の前提条件」を参照してください。

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

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

    Autonomous DatabaseでMicrosoft Active Directoryを使用している場合、サンプル・ソース・コードで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プロキシ経由の接続はサポートされていません。

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

  • 組織のネットワーク構成およびセキュリティ・ポリシーによっては、HTTPプロキシのtnsnames.oraを構成するのみでは不十分です。たとえば、一部のネットワークでは、HTTPプロキシのユーザー名とパスワードが必要です。

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