TimesTen Client/Server用のTransport Layer Security
クライアント/サーバー接続を使用する場合、オプションで、クライアントとサーバー間の暗号化された通信にTLSを構成して使用できます。
TimesTenでは、次の暗号スイートがサポートされます:
-
SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 -
SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 -
SSL_RSA_WITH_AES_128_CBC_SHA256
CA提供の証明書をデコードするためにSSL_RSA_WITH_AES_128_CBC_SHA256が必要になる場合がありますが、ネットワーク・トラフィックには使用しないでください。
この項では、TimesTenによるクライアント/サーバー用のTLSのサポートについて説明します。内容は次のとおりです:
クライアント/サーバーでの証明書の使用について
自己署名証明書のために、TimesTenには、TLS用の証明書を生成するttCreateCertsユーティリティがあります。このユーティリティは、インスタンスの作成(TimesTen Classic)およびグリッドの作成(TimesTen Scaleout)中にTimesTenによって使用されます。
TimesTenは、Oracleウォレットを使用して証明書を格納します。「キーストア」とも呼ばれるこれらのウォレットの一般的な情報については、『Oracle Database Advanced Securityガイド』のTDEマスター暗号化キーの格納のためのキーストアの動作を参照してください。
ノート:
サーバーは、既存のTimesTenユーザーIDとパスワード・メカニズムを使用してユーザーを認証しますが、TimesTenでは、サーバーがクライアント・ウォレットでアイデンティティを検証するクライアント認証の形式もサポートしています。これは、接続するクライアントが正当なクライアントであることをサーバーが確認するための方法ですが、ユーザーは引き続きユーザーIDとパスワードの資格証明を提供する必要があります。
TimesTen Classic:
- TimesTenは、証明書を生成し、作成時にインスタンスに配置できます。
-
TimesTenサーバーには、独自の自己署名ルート証明書があります。
-
ユーザーは通常、クライアント・ウォレットを各クライアントにインポート(オプションでコピー)します。
TimesTen Scaleout:
-
TimesTenは、グリッドの作成時に証明書を生成し、最初の管理インスタンスに配置します。
-
証明書は、グリッド・モデルの適用時にデータ・インスタンスに配布されます。
-
グリッドごとに、ウォレットに格納された1つのルート認証局(CA)があり、すべてのインスタンスで使用される単一の秘密キーと証明書があります。
-
ユーザーはクライアント・ウォレットをクライアント・システムにインポートします。
TimesTenによって生成された証明書について:
-
生成される証明書は自己署名で、Oracleウォレットに格納されます。
-
ルートCAにはデフォルトの有効期限があります。この確認はユーザーが各自で行ってください。ルートCAが期限切れになると、すべてのサーバー証明書を再生成する必要があります。ルートCAが再生成されると、すべてのクライアントがそれを再インポートする必要があります。(この章の後半のTimesTen ClassicまたはTimesTen Scaleoutの証明書を生成するためのタスクの項には、証明書の再生成に関する情報も記載されています。)
-
クライアントは、ルート証明書(公開キー)をローカル・ウォレットに格納します。各インスタンスの公開キーを格納する必要はありません。
-
作成されたウォレットは、パスワードなしの自動ログインまたはシングル・サインオン(SSO)ウォレットです。ウォレットへのアクセスは、ファイル・システム権限によって制御されます。
-
ウォレットはプラットフォームに依存しません。
-
証明書は自己署名であるため、取り消すことはできません。ただし、証明書は必要に応じて再生成できます。
この章のほとんどの説明は、ttCreateCertsを使用して(TimesTenまたはユーザーによって直接)生成された自己署名証明書を使用するためのものですが、TimesTenではサード・パーティのCAによって署名された証明書の使用もサポートされています。「TimesTen Classicでのクライアント/サーバー用のCA署名証明書の使用」を参照してください。
各サーバーのウォレットには、ルート証明書によって署名された独自の公開キー/秘密キーのアイデンティティがあります。サーバーに接続する各クライアントには、そのサーバーのルート証明書が含まれるウォレットが必要です。(クライアントは、複数のデータベース・サービスに接続するために、オプションで複数のウォレットを持つことができます。)
クライアント/サーバー用のTLSの構成
クライアント/サーバー用のTLSには、サーバー側とクライアント側の両方の構成があります。
TLSのサーバー属性
これらは、クライアント/サーバー用のTLSの設定を決定するサーバー接続属性です。
「タスク2: TimesTen ClassicでのTLSのサーバー構成の設定」および「タスク2: TimesTen ScaleoutでのTLSのサーバー構成の設定」も参照してください。
-
Wallet: 証明書を配置したウォレットの場所を絶対パスとして指定します(クライアント上と同じディレクトリ・パスをお薦めします)。ttCreateCertsを使用した場合、これはserverWalletディレクトリのフルパスになります。 -
Encryption(暗号化フラグ): 次のいずれかの設定を使用します。これらの説明では、サーバーとクライアントの間で暗号スイート設定が一致していることを前提としています(該当する場合)。-
accepted: クライアントによって必要とされる場合またはリクエストされた場合は、暗号化されたセッションを有効にします。それ以外の場合は、暗号化されていないセッションを使用します。これはデフォルトです。 -
rejected: 暗号化されていないセッションを要求します。(サーバーが暗号化をサポートしていない場合、TimesTenは、これがサーバー上の設定であるかのように動作します。)クライアントが暗号化を必要とする場合、接続は拒否されます。 -
requested: クライアントで許可されている場合は暗号化されたセッションをリクエストします(クライアントでrejected以外の設定が使用されている場合)。それ以外の場合は暗号化されていないセッションを使用します。 -
required: 暗号化されたセッションを要求します。クライアントが暗号化を拒否した場合、接続を拒否します。
暗号スイートの設定を考慮して、サーバーとクライアント間のこの属性の設定の可能な組合せの結果についての概要は、この項で後述する表3-1を参照してください。
-
-
CipherSuites: クライアントの設定に応じて、使用できる暗号スイートがリストされます。目的の暗号スイートをカンマで区切って、優先順位に従って指定します。サポートされている暗号スイートのリストは、「TimesTen Client/Server用のTransport Layer Security」を参照してください。TLSを使用するには、サーバーおよびクライアントの設定に少なくとも1つの共通スイートが含まれている必要があります。 -
SSLClientAuthentication: TLSクライアント認証が必要か(1の設定)、または必要でないか(デフォルトの0の設定)を指定します。クライアント認証を使用する場合、サーバーはクライアントから提示されたアイデンティティを検証し、クライアント・ウォレットにアイデンティティ(公開キーまたは秘密キー)が必要です。クライアント認証の設定にかかわらず、サーバー認証が実行され、クライアントがサーバーを検証します。サーバーとクライアントの
SSLClientAuthentication設定は同一である必要があります。
ノート:
前述のサーバー接続属性のかわりに、サーバー上のインスタンス・レベルのTimesTen構成ファイルtimesten_home/conf/timesten.confで、これらの同等の属性を使用できます。接続属性設定が優先されます。
-
server_wallet -
server_encryption -
server_cipher_suites -
ssl_client_authentication
TimesTenインスタンスに複数のデータベースがある場合、これらの設定はすべてのデータベースに適用されますが、サーバーDSN定義によって各データベースに対して上書きできます。
TimesTenは、アクティブなTLSセッションでより強固なセキュリティを確保するために新しいセッション・キーが生成されるTLSセッションの再ネゴシエーションをサポートしています。セッションの再ネゴシエーションは、転送されたデータ量、または経過した時間に応じて実行されます。この機能を有効にする場合は、サーバーDSN定義で次のいずれかの属性を使用します。
-
SSLRenegotiationSize: セッションの再ネゴシエーションが実行されるまでの、クライアントとサーバーの間のいずれかの方向のデータ転送のMB数を指定します。デフォルト設定は0で、転送されたMBに基づく再ネゴシエーションは行われません。 -
SSLRenegotiationPeriod: セッションの再ネゴシエーションが実行されるまでの時間を分単位で指定します。デフォルト設定は0で、時間に基づく再ネゴシエーションは行われません。
両方の属性がゼロ以外の値に設定されている場合、最初に発生した状況によって再ネゴシエーションが行われます。
次の表に、暗号スイートの設定を考慮した、クライアントとサーバーの間で可能なすべての暗号化フラグ設定の組合せの結果を示します。
表3-1 サーバーとクライアントの暗号化設定の組合せの結果
| サーバー暗号化フラグ設定 | クライアント暗号化フラグ設定 | 結果 |
|---|---|---|
|
|
|
接続が受け入れられ、暗号化はオフです。 |
|
|
|
接続が受け入れられ、暗号化はオフです。 |
|
|
|
接続が受け入れられます。暗号スイートの設定間で重複がある場合は暗号化がオンになり、ない場合はオフになります。 |
|
|
|
暗号スイート設定間で重複がある場合、暗号化がオンになって接続が受け入れられます。ない場合は、接続が拒否されます。 |
|
|
|
接続が受け入れられ、暗号化はオフです。 |
|
|
|
接続が受け入れられ、暗号化はオフです。 |
|
|
|
接続が受け入れられ、暗号化はオフです。 |
|
|
|
接続が拒否されます。 |
|
|
|
接続が受け入れられます。暗号スイートの設定間で重複がある場合は暗号化がオンになり、ない場合はオフになります。 |
|
|
|
接続が受け入れられ、暗号化はオフです。 |
|
|
|
接続が受け入れられます。暗号スイートの設定間で重複がある場合は暗号化がオンになり、ない場合はオフになります。 |
|
|
|
暗号スイート設定間で重複がある場合、暗号化がオンになって接続が受け入れられます。ない場合は、接続が拒否されます。 |
|
|
|
暗号スイート設定間で重複がある場合、暗号化がオンになって接続が受け入れられます。ない場合は、接続が拒否されます。 |
|
|
|
接続が拒否されます。 |
|
|
|
暗号スイート設定間で重複がある場合、暗号化がオンになって接続が受け入れられます。ない場合は、接続が拒否されます。 |
|
|
|
暗号スイート設定間で重複がある場合、暗号化がオンになって接続が受け入れられます。ない場合は、接続が拒否されます。 |
ノート:
自動クライアント・フェイルオーバーが有効になっていてフェイルオーバーが発生した場合、元の接続の暗号化属性の設定が継続して使用されます。フェイルオーバーサーバーの暗号化設定は、元のサーバーと同じである必要があります。(自動クライアント・フェイルオーバーの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の自動クライアント・フェイルオーバーの使用を参照してください。)
TLSのクライアント属性
これらは、クライアント/サーバー用のTLSの設定を決定するクライアント接続属性です。
「タスク3: TimesTen ClassicでのTLSのクライアント構成の設定」および「タスク3: TimesTen ScaleoutでのTLSのクライアント構成の設定」も参照してください。
ノート:
クライアントDSN定義と接続文字列の両方で属性が設定されている場合は、接続文字列の設定が優先されます。
-
Wallet: 証明書を配置したウォレット・ディレクトリを絶対パスとして指定します(サーバー上と同じディレクトリ・パスをお薦めします)。ttCreateCertsを使用した場合、これはclientWalletディレクトリのフルパスになります。 -
Encryption(暗号化フラグ): 次のいずれかの設定を使用します。これらの説明では、サーバーとクライアントの間で暗号スイート設定が一致していることを前提としています(該当する場合)。-
accepted: サーバーによって必要とされる場合またはリクエストされた場合は、暗号化されたセッションを有効にします。それ以外の場合は、暗号化されていないセッションを使用します。これはデフォルトです。 -
rejected: 暗号化されていないセッションを要求します。(クライアントが暗号化をサポートしていない場合、TimesTenは、これがクライアント上の設定であるかのように動作します。)サーバーが暗号化を必要とする場合、接続は拒否されます。 -
requested: サーバーで許可されている場合は暗号化されたセッションをリクエストします(サーバーでrejected以外の設定が使用されている場合)。それ以外の場合は暗号化されていないセッションを使用します。 -
required: 暗号化されたセッションを要求します。サーバーが暗号化を拒否する場合、接続は拒否されます。
暗号スイートの設定を考慮して、サーバーとクライアントの間で可能な各設定の組合せの結果の概要は、表3-1を参照してください。
-
-
CipherSuites: サーバーの設定に応じて、使用できる暗号スイートがリストされます。目的の暗号スイートをカンマで区切って、優先順位に従って指定します。サポートされている暗号スイートのリストは、「TimesTen Client/Server用のTransport Layer Security」を参照してください。TLSを使用するには、サーバーおよびクライアントの設定に少なくとも1つの共通スイートが含まれている必要があります。 -
SSLClientAuthentication: TLSクライアント認証が必要か(1の設定)、または必要でないか(デフォルトの0の設定)を指定します。クライアント認証を使用する場合、サーバーはクライアントから提示されたアイデンティティを検証し、クライアント・ウォレットにアイデンティティ(公開キーまたは秘密キー)が必要です。クライアント認証の設定にかかわらず、サーバー認証が実行され、クライアントがサーバーを検証します。サーバーとクライアントの
SSLClientAuthentication設定は同一である必要があります。
ノート:
前述のクライアント接続属性のかわりに、クライアント上のインスタンス・レベルのTimesTen構成ファイルtimesten_home/conf/timesten.confで、これらの同等の属性を使用できます。接続属性設定が優先されます。
-
client_wallet -
client_cipher_suites -
server_encryption -
ssl_client_authentication
TimesTenインスタンスに複数のクライアントDSNがある場合、これらの設定はすべてのクライアントDSNに適用されますが、クライアントDSN定義によって各クライアントに対して上書きできます。
TimesTen Classicでのクライアント/サーバー用のTLSの使用
これらは、TimesTenによって生成された証明書とともにTimesTen Classicのクライアント/サーバーにTLSを使用するステップです。
または、サード・パーティのCA署名証明書を使用できます。「TimesTen Classicでのクライアント/サーバー用のCA署名証明書の使用」を参照してください。
タスク1: ttInstanceCreateを使用した証明書の生成およびTLS属性の設定
binディレクトリから) ttInstanceCreateユーティリティを実行すると、証明書が作成されるように調整できます。 ノート:
-
ttInstanceCreateによって生成された証明書は、レプリケーションおよびクライアント/サーバーに使用できます。 -
TimesTen
ttCreateCertsユーティリティを使用して、証明書を手動で生成することもできます。これは、失効などのなんらかの理由で証明書を再生成する必要がある場合や、単一のTimesTenインスタンスに複数のデータベースがあり、データベースごとに異なる証明書を使用する場合などに役立ちます。『Oracle TimesTen In-Memory Databaseリファレンス』のttCreateCertsを参照してください。
ttInstanceCreateコマンドラインで–serverEncryption (暗号化フラグ)および–serverCipherSuites (使用する暗号スイート)を設定します。暗号化および暗号スイート属性の詳細は、「TLSのサーバー属性」を参照してください。TimesTenで使用できる暗号スイートのリストは、「TimesTen Client/Server用のTransport Layer Security」を参照してください。
このコマンドは、tt221という名前のインスタンスを作成するために、インスタンスのconfディレクトリtimesten_home/confに証明書を生成します。
% installation_dir/bin/ttInstanceCreate -name tt221 -location instances_dir -serverEncryption required -serverCipherSuites SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 Creating instance in instances_dir/tt221 ... INFO: Creating certificates, this may take some time ... ttCreateCerts : certificates created in instances_dir/tt221/conf ... Instance created successfully.
これにより、ルート証明書、サーバー証明書およびクライアント証明書を含むウォレットが生成され、インスタンスのtimesten.confファイル(デフォルトでは後者の2つ)に次のエントリが追加されます:
server_encryption=required server_cipher_suites=SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 client_wallet=timesten_home/conf/clientWallet server_wallet=timesten_home/conf/serverWallet
timesten_home/confディレクトリから、ttInstanceCreateの実行時に作成されるserverWalletおよびclientWalletディレクトリを次に示します。それぞれにウォレットcwallet.ssoが含まれます。(.certファイルおよびrootWalletディレクトリは無視してください。)
% ls client1.cert root.cert server1.cert sys.odbc.ini timesten.conf clientWallet rootWallet serverWallet sys.ttconnect.ini
ノート:
後でインスタンスの-serverEncryptionおよび-serverCipherSuites設定を変更する場合は、ttInstanceModifyユーティリティを使用して変更できます。このユーティリティにはオプションもあります。ttInstanceModify -serverWalletオプションを使用して、ウォレットをコピーまたは別の場所に移動し、サーバー・ウォレットの新しい場所を指定できます。
証明書を生成したら、TimesTen ttAdminユーティリティの-certificateListオプションを使用して証明書に関する情報をリストできますが、ttAdminを使用するには、timesten_home/confディレクトリのsys.odbc.iniファイルに定義されているコマンドラインでデータベースを指定する必要があります。
このユーティリティは、sys.odbc.iniのWallet接続属性またはインスタンス・レベルのtimesten.conf構成ファイルのserver_walletで示されているように、ウォレットが別の場所に配置されていないかぎり、timesten_home/confディレクトリを検索します。
この例は、データベースmydb用です。ttAdminを実行する前に、TimesTenデーモンを起動します。
% ttDaemonAdmin -start
TimesTen Daemon (PID: 733500, port: 6624) startup OK.
% ttAdmin -certificateList mydb
NAME HOLDER EXPIRATION
timesten_home/conf/serverWallet/cwallet.sso CN=server1,C=US Fri Jul 30 23:08:02 UTC 2032タスク2: TimesTen ClassicでのTLSのサーバー構成の設定
次の方法でサーバーのTLSを構成できます。
-
暗号化フラグおよび暗号スイートは、前述のように
ttInstanceCreateコマンドで指定されます。後で、設定できる追加のTLS構成属性もあります。特に、ウォレットの場所を設定します。 -
インスタンス・レベルでは、
server_wallet、server_cipher_suitesおよびserver_encryption属性など、timesten_home/confディレクトリのtimesten.confファイルのTLS属性を追加または更新できます。(server_cipher_suitesおよびserver_encryptionの初期値がttInstanceCreateで設定されていることを再確認してください。)timesten.confの値は、インスタンス上の任意のデータベースのデフォルト値として機能します。 -
データベース・レベルでは、TLSのサーバー属性は、
timesten_home/conf/sys.odbc.iniのサーバーDSN定義で設定できます。特定のデータベースの場合、これらの設定はtimesten.confのインスタンス・レベルの設定をオーバーライドします。
サーバーDSN定義の次の抜粋では、ttInstanceCreateがサーバー・ウォレット・ディレクトリを配置した場所を指定しています:
[mydb] Driver=timesten_home/install/lib/libtten.so DataStore=databases_dir/mydb ... Wallet=timesten_home/conf/serverWallet
または、ウォレット・ディレクトリを別の場所にコピーまたは移動し、Wallet設定でその場所を指定することもできます。ttInstanceModify -serverWalletユーティリティを使用してtimesten.confファイルの新しいウォレット・ディレクトリを更新するか、timesten.confファイルのserver_wallet属性を変更します。
使用可能な構成属性の詳細は、「TLSのサーバー属性」を参照してください。
タスク3: TimesTen ClassicでのTLSのクライアント構成の設定
クライアントDSN定義でクライアントのTLSを構成します。サーバーのsys.odbc.iniにあるクライアントDSN定義で、Encryption (暗号化フラグ)、CipherSuites (使用する暗号スイート)、およびWallet (クライアント・ウォレット・ディレクトリを指す)を手動で設定します。
たとえば、データベースmydbの場合:
[mydbCS]
TTC_SERVER=mydb_CS
TTC_SERVER_DSN=mydb
Wallet=timesten_home/conf/clientWallet
Encryption=required
CipherSuites=SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384次の代替方法にも注意してください:
- サーバーから設定をエクスポートおよびインポートするかわりに、クライアント上の
odbc.iniファイルに属性値を手動で設定できます。 ttIsqlユーティリティなど、特定の接続の接続文字列で属性値を設定できます:Command> connect "Driver=...;DataStore=...;Encryption=required;CipherSuites=SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384";
- クライアントのTimesTen構成ファイル
timesten_home/conf/timesten.confで、インスタンス・レベルで同等の属性を設定できます。server_encryption、client_cipher_suites、client_walletなどのこれらの設定がデフォルト値として使用されます。特定の接続に対するすべての接続属性設定が優先されます。
使用可能な構成属性の詳細は、「TLSのクライアント属性」を参照してください。
タスク4: TimesTen Classicでの証明書および構成のエクスポート
ttAdminユーティリティには、クライアント・ウォレットを含むZIPファイル、データベースへのアクセスに使用できるsys.odbc.iniファイル、および適用可能なその他のファイル(tnsnames.oraファイルなど)を出力する–clientExportAllオプションがあります。
サーバーのtimesten_home/binディレクトリからttAdminを実行します。コマンドラインで、目的のZIPファイルのパスと名前およびクライアントDSNを指定します。出力ZIPファイルのウォレットには、CA公開キー(サーバー証明書の検証用)と相互認証用のクライアント証明書が含まれます。
データベースmydbに対して次のコマンドラインを使用すると、ttAdminユーティリティによってファイルexports.zipが作成され、timesten_home/infoディレクトリに配置されます。
% ttAdmin -clientExportAll timesten_home/info/exports.zip mydbCS Client definitions exported to timesten_home/info/exports.zip
exports.zipファイルには、次のsys.odbc.iniファイルおよびクライアントDSN名に基づくディレクトリ(この例ではmydbCSWallet)が含まれています。このディレクトリには、ttInstanceCreateによって作成されたクライアント・ウォレットcwallet.ssoが含まれています:
[mydbCS]
TTC_SERVER=mydb_CS
TTC_SERVER_DSN=mydb
# Wallet=timesten_home/conf/clientWallet
Encryption=required
CipherSuites=SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
Wallet=mydbCSWalletタスク5: TimesTen Classicでの証明書および構成のインポート
クライアントからttClientImportユーティリティを実行して、ttAdmin -clientExportAllコマンドで作成されたエクスポートZIPファイルの内容をインポートします。
通常、エクスポートZIPファイルをサーバーからクライアント上の目的の場所にコピーし、ttClientImportコマンドラインでその場所を指定します。ttClientImportユーティリティは、エクスポートされたウォレットおよびsys.odbc.iniファイル(およびその他のすべて)をインポートします。ユーティリティは、この例ではウォレット・ディレクトリmydbCSWallet(クライアントDSN名に基づく)をtimesten_home/confの下のwalletsディレクトリに配置します。
% ttClientImport path/exports.zip
Client definitions imported.クライアント上のsys.odbc.iniファイルが更新され、クライアントDSNとそのTLS設定が追加されます。(既存のクライアントDSNに同じ名前がある場合、置き換えられます。)エクスポートされたsys.odbc.iniファイルの汎用ウォレット・パスは、既知の実際のウォレット・パスに従ってwallets/mydbCSWalletサブディレクトリ・パスで更新されます。
[mydbCS] TTC_SERVER=mydb_CS TTC_SERVER_DSN=mydb # Wallet=timesten_home/conf/clientWallet Encryption=required CipherSuites=SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 Wallet=timesten_home/conf/wallets/mydbCSWallet # Wallet=mydbCSWallet
クライアント上のtimesten_home/confディレクトリから:
% ls sys.odbc.ini sys.ttconnect.ini timesten.conf wallets % ls wallets mydbCSWallet % ls wallets/mydbCSWallet cwallet.sso
インポートが完了したら、互換性のある暗号化フラグおよび暗号スイート設定を持つクライアントおよびサーバー構成を想定して、TLSを介してサーバーに接続できます。「クライアント/サーバー用のTLSの操作の確認」を参照してください。
これらのユーティリティの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttAdminおよびttClientImportを参照してください。
TimesTen Scaleoutでのクライアント/サーバー用のTLSの使用
これらは、TimesTenによって生成された証明書とともにTimesTen Scaleoutのクライアント/サーバーにTLSを使用するステップです。
タスク2: TimesTen ScaleoutでのTLSのサーバー構成の設定
グリッドでTLSを使用する場合、通常、前述のttGridAdmin gridCreateコマンドでグリッドを定義するときに使用するサーバー暗号化フラグおよび暗号スイートを指定します。これらは、グリッド上の任意のデータベースのデフォルト値になります。ttGridAdmin instanceCreateコマンドを使用して、データ・インスタンスごとにウォレットの場所を指定することもできます。後で、設定できる追加のTLS構成属性もあります。
グリッド内のデータベースでは、ttGridAdmin dbdefCreateコマンドに指定するデータベース定義ファイルdbname.dbdefに接続属性を設定することで、そのデータベースに固有の暗号化設定を指定できます。
これは、mydbという名前のデータベースの一般的な.dbdefファイルmydb.dbdefです。
DatabaseCharacterSet=AL32UTF8
PermSize=128
TempSize=128
DataStore=databases_dir/mydb
ConnectionCharacterSet=AL32UTF8ここで、この特定のデータベースについて、(Encryption属性を使用して)サーバー暗号化フラグまたは(CipherSuites属性を使用して)暗号スイートの代替設定を指定するか、「TLSのサーバー属性」で説明されている追加属性の設定を指定できます。たとえば、クライアントの認証を要求するには、次のようにします:
SSLClientAuthentication=1
(SSLClientAuthenticationを使用する場合は、サーバーとクライアントに対して同じ設定が必要です。)
グリッド・モデルが適用されると、「タスク1: ttGridAdmin gridCreateおよびinstanceCreateを使用した証明書の生成およびTLS属性の設定」に示されている、gridCreate -serverEncryptionおよび-serverCipherSuite設定およびinstanceCreate -walletDir設定の結果として、mydbのデータ・インスタンスinstance_1のsys.odbc.iniファイルに次の設定が含まれています。
[mydb] DatabaseCharacterSet=AL32UTF8 PermSize=128 TempSize=128 DataStore=databases_dir/mydb ConnectionCharacterSet=AL32UTF8 ... CipherSuites=SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 ... Encryption=required ... Wallet=wallets_dir/wallets1/wallets/serverWallet ... SSLClientAuthentication=1
必要に応じて、『Oracle TimesTen In-Memory Database Scaleoutユーザーズ・ガイド』のデータベース定義での接続属性の変更の説明に従って、ttGridAdmin dbdefExportおよびdbdefModifyコマンドを使用して、後から設定を変更できます。
タスク3: TimesTen ScaleoutでのTLSのクライアント構成の設定
TimesTen Scaleoutクライアントの場合、接続可能オブジェクトを作成するttGridAdmin connectableCreateコマンドで指定した.connect構成ファイルでTLS属性を設定できます。
使用可能な属性の説明は、「TLSのクライアント属性」を参照してください。たとえば、クライアントの認証を要求するには、次のようにします:
SSLClientAuthentication=1
(SSLClientAuthenticationを使用する場合は、サーバーとクライアントに対して同じ設定が必要です。)
接続可能オブジェクトが定義され、グリッド・モデルが適用されると、データ・インスタンスのgridCreate -serverEncryptionおよび-serverCipherSuite設定とinstanceCreate -walletDir設定の結果として、データベースmydbへのクライアント/サーバー接続用のデータ・インスタンスinstance_1のsys.odbc.iniファイルに次の設定が含まれています:
[mydbcs]
ConnectionCharacterSet=AL32UTF8
TTC_Timeout=360
...
CipherSuites=SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
Encryption=required
Wallet=wallets_dir/wallets1/wallets/clientWallet
...
SSLClientAuthentication=1必要に応じて、『Oracle TimesTen In-Memory Database Scaleoutユーザーズ・ガイド』の接続オブジェクトでの接続属性の変更の説明に従って、ttGridAdmin connectableExportおよびconnectableModifyコマンドを使用して、後から設定を変更できます。
タスク4: TimesTen Scaleoutでの証明書および構成のエクスポート
ttGridAdminユーティリティには、ウォレットを含むZIPファイル、データベースへのアクセスに使用できるsys.odbc.iniファイル、および適用可能なその他のファイル(tnsnames.oraなど)を出力するgridClientExportAllコマンドがあります。ウォレットには、相互認証のためのCA公開キーおよびクライアント証明書が含まれています。
管理インスタンスからgridClientExportAllコマンドを実行し、コマンドラインで目的のZIPファイルのパスと名前を指定します。ttGridAdminユーティリティは、gridCreateコマンドでのグリッドの作成時に作成された証明書を取得します。この例では、管理インスタンスのtimesten_home/infoディレクトリに出力ZIPファイルclientexport.zipを配置しています:
% ttGridAdmin gridClientExportAll timesten_home/info/clientexport.zip Definitions exported to timesten_home/info/clientexport.zip
ZIPファイルの内容は次のとおりです:
-
クライアント・ウォレットを含むディレクトリ
-
TLS設定など、クライアントでデータベースへの接続に使用する
sys.ocbc.iniファイル -
TimesTenリリース、グリッドおよびTLS設定に関する情報を含むJSONファイル
-
その他のファイル(
tnsnames.oraなど) (該当する場合)
タスク5: TimesTen Scaleoutでの証明書および構成のインポート
クライアントからttClientImportユーティリティを実行して、ttGridAdmin -gridClientExportAllコマンドで作成されたエクスポートZIPファイルの内容をインポートします。
証明書をZIPファイルにエクスポートしたら、ZIPファイルを各クライアント上の目的の場所にコピーしてから、ttClientImportを実行して内容をインポートします。これには、エクスポートされたウォレットおよびsys.odbc.iniファイルが含まれています。ユーティリティは、グリッド名に基づくディレクトリtimesten_home/conf/wallets/gridnameWalletにウォレットを配置します。
% ttClientImport path/clientexport.zip
Client definitions imported.この例では、グリッド名はgrid1です。クライアントのsys.odbc.iniファイル内のクライアントDSNエントリが更新され、TLSおよびウォレット設定が追加されます:
[mydbcs] TTC_SERVER_DSN=MYDB # External address/port info for datahost1.instance_1 TTC_SERVER1=extsys1.example.com/16012 ... CipherSuites=SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 Encryption=required # Wallet=wallet_dir/wallets/clientWallet ConnectionCharacterSet=AL32UTF8 TTC_Timeout=360 Wallet=timesten_home/conf/wallets/grid1Wallet
インポートが完了したら、互換性のある暗号化フラグおよび暗号スイート設定を持つクライアントおよびサーバー構成を想定して、TLSを介してサーバーに接続できます。「クライアント/サーバー用のTLSの操作の確認」を参照してください。
これらのユーティリティの構文およびオプションの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のグリッド外でのクライアント/サーバー接続用のsys.odbc.iniのエクスポート(gridClientExport)およびttClientImportを参照してください。
TimesTen Classicでのクライアント/サーバー用のCA署名証明書の使用
この章のTLSの使用に関するほとんどの説明は、ttCreateCertsユーティリティによって生成された自己署名証明書を使用するためのものですが、TimesTenではサード・パーティの認証局(CA)によって署名された証明書の使用もサポートされています。この項では、そのためのプロセスについて説明します。
CA署名証明書の使用の概要
通常はopensslを使用して秘密キーと証明書リクエスト(.csrファイル)を取得し、認証局(CA)に証明書リクエストを送信し、CAが署名チェーンで署名証明書を返したことを想定しています。
x509証明書を含む.pemファイルから、CAによって提供される証明書からルートに順に証明書を連結します。(証明書が.pem形式でない場合は、opensslまたはその他の適切なユーティリティを使用して証明書を変換します。)後続の項の説明では、結果がcomplete.pemと呼ばれ、秘密キーがprivkey.pemにあると想定しています。次に、証明書をpkcs12ファイルにパッケージ化します。
このプロセスの最後に、サーバー・ウォレットには次のものが含まれます:
- 証明書チェーン全体。これは、CAからの証明書、中間証明書、およびルート証明書で構成されます。
- CAからの証明書の秘密キー。
クライアント・ウォレットには次のものが含まれています:
- CA証明書を除いた証明書チェーン。これは、中間証明書とルート証明書で構成されます。
サーバー・ウォレットの作成
TimesTenでCA署名証明書を使用するには、サーバー・ウォレットおよびクライアント・ウォレットに証明書を手動でインポートする必要があります。サーバー・ウォレットに対して次のステップを実行します。
クライアント・ウォレットの作成
TimesTenでCA署名証明書を使用するには、サーバー・ウォレットおよびクライアント・ウォレットに証明書を手動でインポートする必要があります。クライアント・ウォレットに対して次のステップを実行します。
クライアント・ウォレットおよびサーバー・ウォレットに移入したら、互換性のある暗号化フラグおよび暗号スイート設定を持つクライアントおよびサーバー構成を想定して、TLSを介してサーバーに接続できます。「クライアント/サーバー用のTLSの操作の確認」を参照してください。
クライアント/サーバー用のTLSの操作の確認
TLSがEncryptionとCipherSuiteの設定が十分に一致するサーバーとクライアントの両方で構成されている場合は、接続が確立され次第、TLSが使用されます。
これを確認するには、クライアント上でttIsqlCSからsqlgetconnectattr tt_tls_sessionをコールします。戻り値1は、TLSが使用されていることを示します。
次の一連の例は、サーバーとクライアントの暗号化設定のいくつかの組合せの結果を示しています。
シナリオ1: サーバーとクライアントで、同じ暗号スイート設定を使用して暗号化が要求されます。接続に成功し、TLSが使用されます。
サーバーDSN定義:
[mydb] Driver=timesten_home/install/lib/libtten.so DataStore=/db/databases/mydb PermSize=512 TempSize=128 LogBufMB=256 LogFileSize=256 LogDir=/db/logs DatabaseCharacterSet=AL32UTF8 OracleNetServiceName=ttorcl Wallet=timesten_home/conf/mywallets/serverWallet Encryption=requested CipherSuites=SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
クライアントDSN定義:
[mydbCS]
TTC_SERVER=myserverhost.example.com
TTC_SERVER_DSN=mydb
UID=myuser
PWD=welcome
Wallet=timesten_home/conf/mywallets/clientWallet
Encryption=requested
CipherSuites=SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384timesten_home/binディレクトリからttIsqlCSを実行して接続(出力は読みやすく書式設定されています):
% ttIsqlCS mydbCS Copyright (c) 1996, 2022, Oracle and/or its affiliates. All rights reserved. Type ? or "help" for help, type "exit" to quit ttIsql. connect "DSN=mydbCS"; Connection successful: DSN=mydbCS;TTC_SERVER=myserverhost.example.com; TTC_SERVER_DSN=mydb;UID=myuser;DATASTORE=/db/databases/mydb; DATABASECHARACTERSET=AL32UTF8;CONNECTIONCHARACTERSET=US7ASCII;LOGFILESIZE=256; LOGBUFMB=256;LOGDIR=/db/logs;PERMSIZE=512;TEMPSIZE=128; ORACLENETSERVICENAME=ttorcl;(SERVER)ENCRYPTION=Requested; (SERVER)WALLET=file:timesten_home/conf/mywallets/serverWallet; (client)Encryption=Requested; (client)Wallet=/timesten_home/conf/mywallets/clientWallet; (client)CipherSuites=SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384; (Default setting AutoCommit=1)
TLSが有効になっていることを確認:
Command> sqlgetconnectattr tt_tls_session; TT_TLS_SESSION = 1 (SQL_TRUE)
シナリオ2: サーバーとクライアントで暗号化が要求されますが、暗号スイート設定が一致していません。接続には成功しますが、TLSが使用されていないことを示す警告メッセージが表示されます。(ここに表示されるものを除き、設定はシナリオ1と同じです。)
サーバーDSN定義から:
CipherSuites=SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
クライアントDSN定義から:
CipherSuites=SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
接続:
% ttIsqlCS mydbCS Copyright (c) 1996, 2022, Oracle and/or its affiliates. All rights reserved. Type ? or "help" for help, type "exit" to quit ttIsql. connect "DSN=mydbCS"; Warning 01000: Unable to create requested TLS session; unencrypted session created. Check Wallet and CipherSuites on client and server. SSL error: SSL Fatal Alert Connection successful: ...
シナリオ3: サーバーおよびクライアントで暗号化が受け入れられます。表3-1に示すように、これはTLSの使用に十分ではありません。接続に成功しますが、TLSは使用されません。(ここに表示されるものを除き、設定はシナリオ1と同じです。)
サーバーDSN定義から:
Encryption=accepted
クライアントDSN定義から:
Encryption=accepted
接続:
% ttIsqlCS mydbCS Copyright (c) 1996, 2022, Oracle and/or its affiliates. All rights reserved. Type ? or "help" for help, type "exit" to quit ttIsql. connect "DSN=mydbCS"; Connection successful: ... Command> sqlgetconnectattr tt_tls_session; TT_TLS_SESSION = 0 (SQL_FALSE)
シナリオ4: クライアントでは暗号化が要求されますが、サーバーでは拒否されます。接続試行に失敗します。(ここに表示されるものを除き、設定はシナリオ1と同じです。)
サーバーDSN定義から:
Encryption=rejected
クライアントDSN定義から:
Encryption=required
接続を試行:
% ttIsqlCS mydbCS Copyright (c) 1996, 2022, Oracle and/or its affiliates. All rights reserved. Type ? or "help" for help, type "exit" to quit ttIsql. connect "DSN=mydbCS"; HY000: Connection rejected: inconsistent encryption attributes The command failed. Done.