TimesTenレプリケーション用のTransport Layer Security
TimesTen ClassicでTimesTenレプリケーションを使用する場合、オプションでTransport Layer Security (TLS)を構成および使用して、レプリケーション・エージェント間またはTimesTenユーティリティ(ttRepAdmin
など)とレプリケーション・エージェント間のセキュアな暗号化されたネットワーク通信を実現できます。相互認証はすべての接続に使用されます。
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を使用する主なステップは次のとおりです:
タスク1: レプリケーション用の証明書の生成
TimesTenインスタンスの作成時にttInstanceCreate
ユーティリティを使用して、またはttCreateCerts
ユーティリティを直接使用して、レプリケーション用の証明書を作成できます。
ttInstanceCreate
の使用は、クライアント/サーバーについてこの章で前述したもの(「タスク1: ttInstanceCreateを使用した証明書の生成およびTLS属性の設定」)と基本的に同じです。ttInstanceCreate
は、ttCreateCerts
ユーティリティを使用して証明書を生成することに注意してください。または、ttCreateCerts
の構文、オプションおよび直接使用する方法の詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttCreateCertsを参照してください。
レプリケーションとクライアント/サーバーの両方で証明書を使用する場合は、2つの機能に別々の証明書を使用することをお薦めします。必要に応じて、ttCreateCerts
ユーティリティを使用して追加の証明書を生成できます。
TimesTenによって生成された証明書に関して、次の点に注意してください:
-
生成される証明書は自己署名で、Oracleウォレットに格納されます。
-
証明書は自己署名であるため、取り消すことはできません。ただし、証明書は必要に応じて再生成できます。
-
ルートCAにはデフォルトの有効期限があります。この確認はユーザーが各自で行ってください。ルートCAが期限切れになると、すべての証明書を再生成する必要があります。ルートCAを再生成する場合は、各TimesTenインスタンスにコピーする必要があります。
-
インスタンスは、ルート証明書(公開キー)をローカル・ウォレットに格納します。
-
作成されたウォレットは、パスワードなしの自動ログインまたはシングル・サインオン(SSO)ウォレットです。ウォレットへのアクセスは、ファイル・システム権限によって制御されます。
-
ウォレットはプラットフォームに依存しません。
TimesTenは、Oracleウォレットを使用して証明書を格納します。「キーストア」とも呼ばれるこれらのウォレットの一般的な情報については、『Oracle Database Advanced Securityガイド』のTDEマスター暗号化キーの格納のためのキーストアの動作を参照してください。
タスク2: レプリケーション用の証明書のコピー
% ls timesten_home/conf/wallets client1.cert clientWallet root.cert rootWallet server1.cert serverWallet % ls timesten_home/conf/wallets/serverWallet cwallet.sso
レプリケーション用のTLSでは、serverWallet
のみが使用されます。ルート証明書を含むserverWallet
ディレクトリを目的の場所にコピーします。これは、各TimesTenインスタンスで同じ場所にすることをお薦めします。
各インスタンス:
% mkdir timesten_home/conf/wallets [...Copy serverWallet from the instance where it was created...] % cd timesten_home/conf/wallets % ls serverWallet % ls serverWallet cwallet.sso
タスク3: レプリケーション用のTLSの構成
レプリケーションにTLSを使用するには、各TimesTenインスタンスのtimesten.conf
ファイルにTLS属性を設定します。この設定は、レプリケーション・エージェントによって、およびエージェントと通信可能なユーティリティによって各インスタンスで読み取られます。
ヒント:
レプリケーション用にTLSを構成する前に、証明書を生成してコピーします。そうしないと、レプリケーション・エージェントが起動し、まだ存在しない証明書にアクセスしようとした場合、構成によってエラー状態が発生する可能性があります。
-
replication_cipher_suite
: クライアントの設定に応じて、使用できる暗号スイートがリストされます。目的の暗号スイートをカンマで区切って、優先順位に従って指定します。サポートされている暗号スイートのリストは、「TimesTenレプリケーション用のTransport Layer Security」を参照してください。この設定は必須です。デフォルト値はありません。 -
replication_wallet
: ウォレット・ディレクトリ(生成した証明書を配置したディレクトリ)へのパスを指定します。この設定は必須です。デフォルトの場所はありません。各TimesTenインスタンスで同じ場所およびディレクトリ名を使用することをお薦めしますが、必須ではありません。(前の項の例の「タスク2: レプリケーション用の証明書のコピー」では、これはtimesten_home/conf/wallets/serverWallet
になります。) -
replication_ssl_mandatory
: TimesTenインスタンス間で一貫性のあるTLS構成にする必要があるかどうか(特に、TLSがreplication_cipher_suite
およびreplication_wallet
設定を介して構成されるかどうか、およびどの暗号スイートが指定されるか)を指定します。現在のインスタンスとレプリケーション・ピアの間に不一致があると、TimesTenの動作は次のように決定されます。-
replication_ssl_mandatory=0
(必須ではない、デフォルト)が設定されているインスタンスでは、このインスタンスとレプリケーション・ピアの間でレプリケーションが続行されますが、設定に一貫性がないかぎり、レプリケーション・エージェント間の通信にはTLSが使用されません。この設定は、TLSへのオンライン・スイッチオーバーに使用します。 -
replication_ssl_mandatory=1
(必須)が設定されているインスタンスでは、一貫性のある設定になるまで、このインスタンスとレプリケーション・ピアの間でレプリケーションを続行できません。この設定は、TLSへのオフライン・スイッチオーバーに使用します。
-
ノート:
-
これらの構成変更を任意のインスタンスで有効にするには、レプリケーション・エージェントを再起動する必要があります。(TimesTenデーモンを再起動する必要はありません。)
-
replication_cipher_suite
の値が無効か、スイートがTimesTenでサポートされていない場合は、エラーが報告され、問題が解決されるまでレプリケーションは機能しません。 -
replication_cipher_suite
を設定したが、replication_wallet
に設定していない場合、または指定した場所に証明書が見つからない場合は、エラーが報告され、問題が解決されるまでレプリケーションは機能しません。
タスク4: レプリケーション用のTLSのアクティブ化
指定されたreplication_wallet
ディレクトリにある証明書と、replication_cipher_suite
設定で指定された必要な暗号スイートを使用して、すべてのTimesTenインスタンスでTLSが構成されると、レプリケーション・エージェントの再起動によってTLSがアクティブ化され、レプリケーション・エージェントとの間の通信に使用されます。
TLSをアクティブ化するには、次の2つの方法があります:
レプリケーション用のTLSへのオンライン切替え
TLSを使用していない既存のレプリケーション・スキームがある場合は、レプリケーションが引き続き機能するため、レプリケーション・エージェントを1つずつ再起動することで、TLSへのオンライン・スイッチオーバーを実行できます。
-
各インスタンスで、証明書が存在する場所を示すように
replication_wallet
を設定していることを確認します。(「タスク2: レプリケーション用の証明書のコピー」の例では、これはtimesten_home/conf/wallets/serverWallet
になります。) -
各インスタンスで、使用している暗号スイートを示すように
replication_cipher_suite
が設定されていることを確認します。 -
各インスタンスで、
replication_ssl_mandatory=0
を確認します。これにより、TLSを使用して、一度に1つずつ開始するようにTimesTenインスタンスを更新できます。 -
各インスタンスで(一度に1つずつ、連続して)、レプリケーション・エージェントを停止して再起動します。
% ttAdmin -repStop DSN % ttAdmin -repStart DSN
たとえば、次のようだとします。
-
host1
にデータベースrep1
およびhost2
にrep2
を持ち、host3
にサブスクライバrep3
を持つアクティブ・スタンバイ・ペアがあります。 -
証明書が
rep1
に生成され、/swdir/mywalletloc
に配置された後、rep2
およびrep3
上の同じ場所にコピーされました。
レプリケーションが機能を続けるには、これらのステップを完了して、各レプリケーション・エージェントとの間の通信にTLSを使用します。
タスク5: レプリケーション用のTLS操作の確認
ttRepAdmin
ユーティリティの-showstatus -detail
オプションは、レプリケーション・エージェントの送信側および受信側がTLSを使用しているかどうかを示します(SSLと示されます)。
たとえば、次のように指定します:
TRANSMITTER thread(s) (TRANSMITTER(M):140427924887296): For : REP1 (track 0) (SSL) Start/Restart count : 1 Current state : STATE_META_PEER_INFO RECEIVER thread(s) (RECEIVER:140427327059712): For : REP1 (track 0) (SSL) Start/Restart count : 1 Current state : STATE_RCVR_READ_NETWORK_LOOP Current DB context : 0x7fb7bc4a41e0
『Oracle TimesTen In-Memory Databaseリファレンス』のttRepAdminを参照してください。
ノート:
この出力を確認するには、マスター・システムおよびサブスクライブ・システム上でレプリケーション・エージェントが実行され、互いに接続されている必要があります。