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: レプリケーション用の証明書のコピー

レプリケーション用の証明書を生成した後、他のTimesTenインスタンスにコピーします。『Oracle TimesTen In-Memory Databaseリファレンス』ttCreateCertsの例の結果のウォレットを再確認してください。
% 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へのオンライン・スイッチオーバーを実行できます。

  1. 各インスタンスで、証明書が存在する場所を示すようにreplication_walletを設定していることを確認します。(「タスク2: レプリケーション用の証明書のコピー」の例では、これはtimesten_home/conf/wallets/serverWalletになります。)

  2. 各インスタンスで、使用している暗号スイートを示すようにreplication_cipher_suiteが設定されていることを確認します。

  3. 各インスタンスで、replication_ssl_mandatory=0を確認します。これにより、TLSを使用して、一度に1つずつ開始するようにTimesTenインスタンスを更新できます。

  4. 各インスタンスで(一度に1つずつ、連続して)、レプリケーション・エージェントを停止して再起動します。

    % ttAdmin -repStop DSN
    % ttAdmin -repStart DSN

たとえば、次のようだとします。

  • host1にデータベースrep1およびhost2rep2を持ち、host3にサブスクライバrep3を持つアクティブ・スタンバイ・ペアがあります。

  • 証明書がrep1に生成され、/swdir/mywalletlocに配置された後、rep2およびrep3上の同じ場所にコピーされました。

レプリケーションが機能を続けるには、これらのステップを完了して、各レプリケーション・エージェントとの間の通信にTLSを使用します。

  1. 各インスタンスのtimesten.confファイルで次のTLS設定を使用します:
    replication_wallet=/swdir/mywalletloc
    replication_cipher_suite=SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
    replication_ssl_mandatory=0
  2. 各インスタンスで、一度に1つずつレプリケーション・エージェントを再起動します。

    host1:

    % ttAdmin -repStop rep1
    % ttAdmin -repStart repl

    host2:

    % ttAdmin -repStop rep2
    % ttAdmin -repStart rep2

    host3:

    % ttAdmin -repStop rep3
    % ttAdmin -repStart rep3

すべてのインスタンスをレプリケーション用のTLSに同時に切替え(オフライン)

TLSを起動するとすぐにすべてのインスタンスで同時に適用されるようにする場合は、各インスタンスにreplication_ssl_mandatory=1を設定する前に、レプリケーションを停止してすべてのレプリケーション・エージェントを停止する必要があります。

  1. すべてのインスタンスで、レプリケーション・エージェントを停止します。
    % ttAdmin -repStop DSN

    ノート:

    Oracle Clusterwareを使用している場合、クラスタ内の任意のインスタンスからttCWAdminユーティリティを使用して、1つのコマンドですべてのインスタンスに対してこれを実行できます。

    % ttCWAdmin -stop -dsn DSN
  2. すべてのインスタンスで、証明書が存在する場所を示すようにreplication_walletを設定していることを確認します。
  3. すべてのインスタンスで、使用している暗号スイートを示すようにreplication_cipher_suiteが設定されていることを確認します。
  4. すべてのインスタンスで、replication_ssl_mandatory=1を確認します。

    これには、すべてのレプリケーション・エージェントを一度に停止し、すべてのレプリケーション・エージェントが停止している間にすべてのtimesten.confファイルを更新する必要があります。

  5. すべてのインスタンスで、レプリケーション・エージェントを再起動します。
    % ttAdmin -repStart DSN

    ノート:

    Oracle Clusterwareを使用している場合、クラスタ内の任意のインスタンスからttCWAdminユーティリティを使用して、1つのコマンドですべてのインスタンスに対してこれを実行できます。

    %  ttCWAdmin -start -dsn DSN

タスク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を参照してください。

ノート:

この出力を確認するには、マスター・システムおよびサブスクライブ・システム上でレプリケーション・エージェントが実行され、互いに接続されている必要があります。