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_SHA384
timesten_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.