主コンテンツへ
Oracle® TimesTen In-Memory Databaseセキュリティ・ガイド
リリース18.1
E98622-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

3 TimesTenでの暗号化

この章では、TimesTenでの暗号化の使用について説明します。

TimesTenの一部の機能(クライアント/サーバーおよびレプリケーションなど)では、TimesTenインスタンス間の通信に対してTransport Layer Security (TLS)の使用がサポートされています。

この項の内容は、次のとおりです。


ノート:

  • TimesTenリリース18.1では、TLSがTimesTen Scaleoutでサポートされていません。

  • TimesTenはTLSバージョン1.2を使用します。

  • TimesTenのTLS構成は、TimesTen Cacheの使用時など、TimesTenとOracle Database間の通信には適用されません。暗号化されたTimesTen-Oracle通信の場合は、Oracle Databaseへの接続に使用するsqlnet.oraファイルの設定を通じてTLSを構成します。『Oracle Databaseセキュリティ・ガイド』のSecure Sockets Layer認証の構成に関する項を参照してください。


Transport Layer Securityの証明書

この項では、TimesTen用TLSの証明書の使用について説明します。内容は次のとおりです。

TimesTenでの証明書の使用について

TimesTenインスタンス間の通信では、TimesTen Client/ServerおよびレプリケーションがTransport Layer Securityを使用します。TimesTenには、TimesTenのTLS用の証明書を生成するttCreateCertsユーティリティが用意されています。

「Using ttCreateCerts」の結果では、TimesTenサーバーは独自の自己署名ルート証明書を保有していることが示されていますが、これがサード・パーティの商用認証局によって署名された証明書の使用を妨げることはありません。TimesTenは、自己署名証明書とCA署名証明書の両方をサポートします。ttCreateCertsによって生成される証明書は自己署名されています。ウォレットはプラットフォームに依存しません。

各TimesTenサーバーのウォレットには、ルート証明書によって署名された独自の公開キー/秘密キーのアイデンティティが必要です。TimesTenサーバーに接続する各クライアントには、そのサーバーのルート証明書が含まれるウォレットが必要です。(クライアントは、複数のデータベース・サービスに接続するために、オプションで複数のウォレットを持つことができます。)デフォルトでは、TimesTenはTLSサーバー認証を使用するため、接続先のサーバーが有効であることをクライアントが確認できます。

サーバーは、既存のTimesTenユーザーIDとパスワード・メカニズムを使用してユーザーを認証しますが、TimesTenでは、サーバーがクライアント・ウォレットでアイデンティティを検証するクライアント認証の形式もサポートしています。これは、接続するクライアントが正当なTimesTenクライアントであることをサーバーが確認するための方法ですが、ユーザーは引き続きユーザーIDとパスワードの資格証明を提供する必要があります。

ウォレットは、パスワードなしの自動ログインまたはシングル・サインオン(SSO)ウォレットです。ウォレットへのアクセスは、ファイル・システム権限によって制御されます。

TimesTenは、NSA Suite Bの暗号スイートSSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256およびSSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384をサポートしています。これらの暗号スイートの詳細は、Oracle Databaseセキュリティ・ガイドのSecure Sockets Layer認証の構成を参照してください。

TimesTen用の証明書の生成

次の各項では、TimesTenのttCreateCertsユーティリティについて説明し、このユーティリティを使用して証明書を作成する方法を示します。証明書は、TimesTen Client/ServerまたはTimesTenレプリケーションのどちらかのTLSに使用できます。

ttCreateCertsユーティリティの機能

ttCreateCertsユーティリティは、TimesTenインスタンスのbinディレクトリにあります。TIMESTEN_HOMEは、ttCreateCertsの実行前に設定する必要があります。この設定は、binディレクトリからスクリプトのttenv.shまたはttenv.cshをソーシングすることで実行できます。

このユーティリティにより、rootWalletclientWalletおよびserverWalletの3つのOracleウォレットが作成されます。


ノート:

ttCreateCertsを使用するには、システムにJavaが存在している必要があります。その検索の際に、このユーティリティはJRE_HOMEJAVA_HOMEおよびPATHの設定に従います。

次に、ttCreateCertsの構文を示します。

% ttCreateCerts -h
usage: ttCreateCerts [-dir WALLETDIR] [options...]
       ttCreateCerts [-h | -help]
       ttCreateCerts [-V | -version]
options:
  -f | -force
  -verbose
  -validity DAYS | -valid_from mm/dd/yyyy -valid_until mm/dd/yyyy
  -dryrun
  -sign_alg ALGORITHM (ecdsasha256 ecdsasha384 ecdsasha512)
  -eccurve TYPE  (p256 p384 p521)

次に、入力とオプションの説明を示します。

  • -dir: ウォレットを配置するディレクトリを絶対パスとして指定します。指定したディレクトリは、すでに存在している必要があります。また、-forceオプションを使用する場合を除いて、ttCreateCertsによって生成されたウォレットが含まれていない必要があります。デフォルトは、timesten_home/confです。

  • -hまたは-help: ヘルプを表示します(前述の構文を表示します)。

  • -Vまたは-version: TimesTenのリリース番号を表示します。

  • -fまたは-force: 指定したディレクトリ内に以前のウォレットがあれば上書きします。

  • -verbose: ユーティリティの実行からの追加出力を表示します。

  • -validity: 作成するウォレットの存続期間を指定する2つの方法のうちの1つです。その期間を作成からの日数として表します。デフォルトは3650日です。これは、-validityを設定するか、-valid_from-valid_untilを設定することで上書きできます。

  • -valid_from-valid_until: 作成するウォレットの存続期間を指定するもう1つの方法です。その期間は開始日および終了日としてmm/dd/yyyy形式で表します。

  • -dryrun: ttCreateCertsで指定したとおりの証明書を作成するために実行されるすべてのコマンドをエコーしますが、それらのコマンドを実行しません。設定していないオプションについては、これを使用することでデフォルト値を確認できます。

  • -sign_alg: 楕円曲線署名アルゴリズムを指定します。サポートされているアルゴリズムは、ecdsasha256ecdsasha384 (デフォルト)およびecdsasha512です。

  • -eccurve: 楕円曲線のサイズを指定します。サポートされる値は、p256p384 (デフォルト)およびp521です。

ttCreateCertsの使用

この項では、timesten_home/conf内のwalletsサブディレクトリにウォレットを配置するttCreateCertsの例を示します。このtimesten_homeは、TimesTenインスタンス・ホーム・ディレクトリへのフルパスです。

次の例には、詳細出力が含まれています。(-verboseオプションがない場合は、最後の行のみが表示されます。)

% ttCreateCerts -verbose -dir timesten_home/conf/wallets
Requested Certificates:
User Certificates:
Subject:        CN=server1,C=US
Trusted Certificates:
Subject:        CN=ecRoot,C=US
Requested Certificates:
User Certificates:
Subject:        CN=client1,C=US
Trusted Certificates:
Subject:        CN=ecRoot,C=US
ttCreateCerts : certificates created in timesten_home/conf/wallets

結果を次に示します。

% ls timesten_home/conf/wallets
client1.cert  clientWallet  root.cert  rootWallet  server1.cert  serverWallet
% ls timesten_home/conf/wallets/clientWallet
cwallet.sso
% ls timesten_home/conf/wallets/rootWallet
cwallet.sso
% ls timesten_home/conf/wallets/serverWallet
cwallet.sso

ノート:

任意の.lckファイルを無視できます。

TimesTen Client/Serverおよびレプリケーション用の証明書のコピー先については、TimesTen Client/Server用の証明書およびTimesTenレプリケーション用の証明書を参照してください。

次の例は、ドライ・ランです。証明書は作成されません(最終行の表示にかかわらず作成されません)。これは出力の一部のみを示しています。

% ttCreateCerts -dir timesten_home/conf/wallets -dryrun
...
+ /bin/java -Djava.security.egd=file:///dev/./urandom -Xms64m -Xmx512m -cp 
/scratch/classic181430/instances/tt181/install/lib/cryptoj_5_0.jar:
/scratch/classic181430/instances/tt181/install/lib/oraclepki.jar:
/scratch/classic181430/instances/tt181/install/lib/osdt_cert.jar:
/scratch/classic181430/instances/tt181/install/lib/osdt_core.jar 
oracle.security.pki.textui.OraclePKITextUI wallet add -wallet rootWallet -dn 
CN=ecRoot,C=US -sign_alg ecdsasha384 -self_signed -asym_alg ECC -eccurve p384 
-jsafe -validity 3650 -auto_login_only -nologo
...
ttCreateCerts : certificates created in timesten_home/conf/wallets

ここから、デフォルト設定が-sign_alg ecdsasha384-eccurve p384および-validity 3650 (日)になっていることがわかります。

次に、別の例を示します。この例では、楕円曲線の署名アルゴリズムとサイズを設定します。

% ttCreateCerts -dir timesten_home/conf/wallets -sign_alg ecdsasha256 
-eccurve p256
ttCreateCerts : certificates created in timesten_home/conf/wallets

この例では、証明書が作成されてから1年後に期限切れになることを指定しています。

% ttCreateCerts -dir timesten_home/conf/wallets -validity 365
ttCreateCerts : certificates created in timesten_home/conf/wallets

または、次のように指定します。

% ttCreateCerts -dir timesten_home/conf/wallets -valid_from 10/28/2020 
-valid_until 10/28/2021
ttCreateCerts : certificates created in timesten_home/conf/wallets

次の例は、ウォレットがすでに存在している場所にウォレットを作成しようとしています。

% ttCreateCerts -dir timesten_home/conf/wallets
ttCreateCerts: rootWallet is not empty, use -force to overwrite

この例では、-forceオプションを使用して再試行します。

% ttCreateCerts -dir timesten_home/conf/wallets -f
ttCreateCerts : certificates created in timesten_home/conf/wallets

TimesTen Client/Server用のTransport Layer Security

TimesTen Client/Serverを使用する場合は、必要に応じて、TimesTenクライアントとTimesTenサーバー間の暗号化通信にTLSを構成して使用できます。この機能は、TimesTenリリース18.1.2.1.0以上でサポートされています。

この項では、TimesTenによるクライアント/サーバー用のTLSのサポートについて説明します。内容は次のとおりです。


ノート:

TimesTenリリース18.1.2.1.0より前のサーバーまたはクライアントを使用する場合、もう一方の側で必要に応じて暗号化が指定されていないかぎり接続は暗号化されず、接続が失敗します。

クライアント/サーバー用のTLSの概要

この機能により、TimesTenクライアントとサーバー間でTLSを使用して、セキュアなTCP/IPネットワーク接続が可能になります。TLSセッションの証明書は、Oracleウォレットに含まれます。この機能を有効にしない場合、および以前のTimesTenリリースでは、ネットワーク通信は暗号化されません。

クライアント/サーバーにTLSを使用するためのステップの概要を次に示します。

  1. TimesTenサーバー上に証明書を作成し、目的のウォレット・ディレクトリに配置します。

  2. ウォレット・ディレクトリをTimesTenクライアントにコピーします。

  3. ウォレット・ディレクトリおよび暗号スイートの指定も含めて、必要に応じてサーバーおよびクライアントでTLSを構成します。

  4. TLS通信の操作を確認します。(TLSは構成が完了するとすぐに使用されます。)

TimesTen Client/Server用の証明書

この項では、TimesTen Client/Server用に生成した証明書のコピー先について説明します。「ttCreateCertsの使用」の例に示した結果のウォレットを再確認してください。

% ls timesten_home/conf/wallets
client1.cert  clientWallet  root.cert  rootWallet  server1.cert  serverWallet
% ls timesten_home/conf/wallets/clientWallet
cwallet.sso
% ls timesten_home/conf/wallets/rootWallet
cwallet.sso
% ls timesten_home/conf/wallets/serverWallet
cwallet.sso

クライアント/サーバーにTLSを使用する場合は、client1.certroot.certrootWalletserver1.certおよびserverWalletを無視します。ルート証明書を含むclientWalletディレクトリを目的の場所にコピーします。これは、各TimesTenクライアント・インスタンスで同じ場所にすることをお薦めします。

各クライアント:

% mkdir timesten_home/conf/wallets
[...Copy clientWallet from the server...]
% cd timesten_home/conf/wallets
% ls
clientWallet
% ls clientWallet
cwallet.sso

ノート:

ウォレットのファイルおよびディレクトリの権限を保持するように注意してください。

クライアント/サーバー用のTLSの構成

クライアント/サーバー用のTLSには、サーバー側とクライアント側の両方の構成があります。

サーバーの構成

クライアント/サーバー用のTLSのこれらのサーバー側属性は、timesten_home/conf/sys.odbc.iniのサーバーDSN定義で設定できます。ここで、timesten_homeはTimesTenインスタンス・ディレクトリです。

  • Wallet: 生成した証明書を配置したウォレットの場所を絶対パスとして指定します(クライアント上と同じディレクトリ・パスをお薦めします)。デフォルトの場所はありません。ttCreateCertsを使用した場合、これはserverWalletディレクトリのフルパスになります。

  • Encryption: 次のいずれかの設定を使用します。これらの説明では、サーバーとクライアントの間で暗号スイート設定が一致していることを前提としています(該当する場合)。

    • accepted: クライアントによって必要とされる場合またはリクエストされた場合は、暗号化されたセッションを有効にします。それ以外の場合は、暗号化されていないセッションを使用します。これはデフォルトです。

    • rejected: 暗号化されていないセッションを要求します。(サーバーが暗号化をサポートしていない場合、TimesTenは、これがサーバー上の設定であるかのように動作します。)クライアントが暗号化を必要とする場合、接続は拒否されます。

    • requested: クライアントで許可されている場合は暗号化されたセッションをリクエストします(クライアントでrejected以外の設定が使用されている場合)。それ以外の場合は暗号化されていないセッションを使用します。

    • required: 暗号化されたセッションを要求します。クライアントが暗号化を拒否した場合、接続を拒否します。

    暗号スイートの設定を考慮して、サーバーとクライアントの間で可能な各設定の組合せの結果の概要は、表3-1を参照してください。

  • CipherSuites: クライアントの設定に応じて、使用できる暗号スイートがリストされます。SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256またはSSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (あるいはその両方)をカンマで区切って優先順に指定します。デフォルト設定はありません。TLSを使用するには、サーバーおよびクライアントの設定に少なくとも1つの共通スイートが含まれている必要があります。

  • SSLClientAuthentication: TLSクライアント認証が必要か(1の設定)、または必要でないか(デフォルトの0の設定)を指定します。クライアント認証を使用する場合、サーバーはクライアントから提示されたアイデンティティを検証し、クライアント・ウォレットにアイデンティティ(公開キーまたは秘密キー)が必要です。クライアント認証の設定にかかわらず、サーバー認証が実行され、クライアントがサーバーを検証します。

    サーバーとクライアントのSSLClientAuthentication設定は同一である必要があります。


ノート:

sys.odbc.ini内の前述の属性のかわりに、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に、暗号スイートの設定を考慮した、クライアントとサーバーの間で可能なすべての暗号化設定の組合せの結果を示します。

表3-1 サーバーとクライアントの暗号化設定の組合せの結果

サーバー暗号化設定 クライアント暗号化設定 結果

accepted

accepted

接続が受け入れられ、暗号化はオフです。

accepted

rejected

接続が受け入れられ、暗号化はオフです。

accepted

requested

接続が受け入れられます。暗号スイートの設定間で重複がある場合は暗号化がオンになり、ない場合はオフになります。

accepted

required

暗号スイート設定間で重複がある場合、暗号化がオンになって接続が受け入れられます。ない場合は、接続が拒否されます。

rejected

accepted

接続が受け入れられ、暗号化はオフです。

rejected

rejected

接続が受け入れられ、暗号化はオフです。

rejected

requested

接続が受け入れられ、暗号化はオフです。

rejected

required

接続が拒否されます。

requested

accepted

接続が受け入れられます。暗号スイートの設定間で重複がある場合は暗号化がオンになり、ない場合はオフになります。

requested

rejected

接続が受け入れられ、暗号化はオフです。

requested

requested

接続が受け入れられます。暗号スイートの設定間で重複がある場合は暗号化がオンになり、ない場合はオフになります。

requested

required

暗号スイート設定間で重複がある場合、暗号化がオンになって接続が受け入れられます。ない場合は、接続が拒否されます。

required

accepted

暗号スイート設定間で重複がある場合、暗号化がオンになって接続が受け入れられます。ない場合は、接続が拒否されます。

required

rejected

接続が拒否されます。

required

requested

暗号スイート設定間で重複がある場合、暗号化がオンになって接続が受け入れられます。ない場合は、接続が拒否されます。

required

required

暗号スイート設定間で重複がある場合、暗号化がオンになって接続が受け入れられます。ない場合は、接続が拒否されます。



ノート:

自動クライアント・フェイルオーバーが有効になっていてフェイルオーバーが発生した場合、元の接続の暗号化属性の設定が継続して使用されます。フェイルオーバーサーバーの暗号化設定は、元のサーバーと同じである必要があります。

クライアントの構成

クライアント/サーバー用のTLSのこれらのクライアント側属性は、timesten_home/conf/sys.odbc.iniまたはクライアントのodbc.iniファイル、あるいは接続文字列の、クライアントDSN定義で設定できます。


ノート:

クライアントDSN定義と接続文字列の両方で属性が設定されている場合は、接続文字列の設定が優先されます。

  • Wallet: 生成した証明書を配置したウォレット・ディレクトリを絶対パスとして指定します(サーバー上と同じディレクトリ・パスをお薦めします)。デフォルトの場所はありません。ttCreateCertsを使用した場合、これはclientWalletディレクトリのフルパスになります。

  • Encryption: 次のいずれかの設定を使用します。これらの説明では、サーバーとクライアントの間で暗号スイート設定が一致していることを前提としています(該当する場合)。

    • accepted: サーバーによって必要とされる場合またはリクエストされた場合は、暗号化されたセッションを有効にします。それ以外の場合は、暗号化されていないセッションを使用します。これはデフォルトです。

    • rejected: 暗号化されていないセッションを要求します。(クライアントが暗号化をサポートしていない場合、TimesTenは、これがクライアント上の設定であるかのように動作します。)サーバーが暗号化を必要とする場合、接続は拒否されます。

    • requested: サーバーで許可されている場合は暗号化されたセッションをリクエストします(サーバーでrejected以外の設定が使用されている場合)。それ以外の場合は暗号化されていないセッションを使用します。

    • required: 暗号化されたセッションを要求します。サーバーが暗号化を拒否する場合、接続は拒否されます。

    暗号スイートの設定を考慮して、サーバーとクライアントの間で可能な各設定の組合せの結果の概要は、表3-1を参照してください。

  • CipherSuites: サーバーの設定に応じて、使用できる暗号スイートがリストされます。SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256またはSSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (あるいはその両方)をカンマで区切って優先順に指定します。デフォルト設定はありません。TLSを使用するには、サーバーおよびクライアントの設定に少なくとも1つの共通スイートが含まれている必要があります。

  • SSLClientAuthentication: TLSクライアント認証が必要か(1の設定)、または必要でないか(デフォルトの0の設定)を指定します。クライアント認証を使用する場合、サーバーはクライアントから提示されたアイデンティティを検証し、クライアント・ウォレットにアイデンティティ(公開キーまたは秘密キー)が必要です。クライアント認証の設定にかかわらず、サーバー認証が実行され、クライアントがサーバーを検証します。

    サーバーとクライアントのSSLClientAuthentication設定は同一である必要があります。


ノート:

sys.odbc.iniまたはクライアントのodbc.iniの前述の属性の一部のかわりに、TimesTen構成ファイルtimesten_home/conf/timesten.confに次のような同等の属性を設定できます。
  • client_wallet

  • client_cipher_suites

TimesTenインスタンスに複数のクライアントDSNがある場合、これらの設定はすべてのクライアントDSNに適用されますが、クライアントDSN定義によって各クライアントに対して上書きできます。


クライアント/サーバー用のTLSの操作

TLSがEncryptionCipherSuiteの設定が十分に一致するサーバーとクライアントの両方で構成されている場合は、表3-1で説明されているように、接続が確立され次第、TLSが使用されます。これを確認するには、クライアント上でttIsqlCSからsqlgetconnectattr tt_tls_sessionをコールします。戻り値1は、TLSが使用されていることを示します。

例3-1に、サーバーとクライアントの暗号化設定のいくつかの組合せの結果を示します。

例3-1 TLSを使用した接続

シナリオ1: サーバーとクライアントで、同じ暗号スイート設定を使用して暗号化が要求されます。接続に成功し、TLSが使用されます。

サーバーDSN定義:

[sampledb]
Driver=timesten_home/install/lib/libtten.so
DataStore=/db/databases/sampledb
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定義:

[sampledbCS]
TTC_SERVER=myserverhost.example.com
TTC_SERVER_DSN=sampledb
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 sampledbCS
 
Copyright (c) 1996, 2020, Oracle and/or its affiliates. All rights reserved.
Type ? or "help" for help, type "exit" to quit ttIsql.
 
connect "DSN=sampledbCS";
Connection successful: DSN=sampledbCS;TTC_SERVER=myserverhost.example.com;
TTC_SERVER_DSN=sampledb;UID=myuser;DATASTORE=/db/databases/sampledb;
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 sampledbCS
 
Copyright (c) 1996, 2020, Oracle and/or its affiliates. All rights reserved.
Type ? or "help" for help, type "exit" to quit ttIsql.
 
connect "DSN=sampledbCS";
 
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 sampledbCS
 
Copyright (c) 1996, 2020, Oracle and/or its affiliates. All rights reserved.
Type ? or "help" for help, type "exit" to quit ttIsql.
 
connect "DSN=sampledbCS";
Connection successful: 
...
Command> sqlgetconnectattr tt_tls_session;
TT_TLS_SESSION = 0 (SQL_FALSE)

シナリオ4: クライアントでは暗号化が要求されますが、サーバーでは拒否されます。接続試行に失敗します。(ここに表示されるものを除き、設定はシナリオ1と同じです。)

サーバーDSN定義から:

Encryption=rejected

クライアントDSN定義から:

Encryption=required

接続を試行:

% ttIsqlCS sampledbCS
 
Copyright (c) 1996, 2020, Oracle and/or its affiliates. All rights reserved.
Type ? or "help" for help, type "exit" to quit ttIsql.
 
connect "DSN=sampledbCS";
HY000: Connection rejected: inconsistent encryption attributes
The command failed.
Done.

TimesTenレプリケーション用のTransport Layer Security

TimesTenレプリケーションを使用すると、必要に応じて、TimesTenレプリケーション・エージェントとの間のセキュアなネットワーク通信にTransport Layer Security (TLS)を構成して使用できます。

この項では、TimesTenによるレプリケーション用のTLSのサポートについて説明します。内容は次のとおりです。

レプリケーション用のTLSの概要

この機能により、TimesTenレプリケーション・エージェントに対してTLSを使用して、セキュアなTCP/IPネットワーク接続が可能になります。相互認証はすべての接続に使用されます。これは、レプリケーション・エージェント間、またはTimesTenユーティリティ(ttRepAdminなど)とレプリケーション・エージェント間のTimesTenインスタンス間の通信に適用されます。この機能を有効にしない場合、および以前のTimesTenリリースでは、そのような通信は暗号化されません。

レプリケーションにTLSを使用するためのステップの概要を次に示します。

  1. TimesTenインスタンスの1つに証明書を作成し、それを目的のウォレット・ディレクトリに配置します。

  2. ウォレット・ディレクトリの内容を他のTimesTenインスタンスにコピーします。

  3. TimesTenでTLSを構成し、ウォレット・ディレクトリおよび暗号スイートを指定します。

  4. TLS通信を有効にします(レプリケーション・エージェントを再起動してTLSの使用を開始します)。

TimesTenレプリケーション用の証明書

この項では、TimesTenレプリケーション用に生成した証明書のコピー先について説明します。TimesTen用の証明書の生成の例から生成されるウォレットを再確認します。

% ls timesten_home/conf/wallets
client1.cert  clientWallet  root.cert  rootWallet  server1.cert  serverWallet
% ls timesten_home/conf/wallets/clientWallet
cwallet.sso
% ls timesten_home/conf/wallets/rootWallet
cwallet.sso
% ls timesten_home/conf/wallets/serverWallet
cwallet.sso

レプリケーションにTLSを使用する場合は、client1.certclientWalletroot.certrootWalletおよびserver1.certを無視します。ルート証明書を含む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

レプリケーション用のTLSの構成

レプリケーションにTLSを使用するには、各TimesTenインスタンスのtimesten.confファイルでこれらの属性を設定します。この設定は、レプリケーション・エージェントによって、およびエージェントと通信可能なユーティリティによって各インスタンスで読み取られます。


重要:

最初に、証明書を生成して配置します。証明書を生成して配置する前にレプリケーション用のTLSを構成し、レプリケーション・エージェントが再起動されると、存在しない証明書にレプリケーション・エージェントがアクセスしようとしてとエラー状態になります。

  • replication_cipher_suite: レプリケーション・エージェントとの通信の暗号化に使用される暗号スイート。この設定は必須です。デフォルト値はありません。

    TimesTenは、NSA Suite Bの暗号スイートSSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256およびSSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384をサポートしています。これらのスイートには楕円署名が必要です。

  • replication_wallet: ウォレット・ディレクトリ(生成した証明書を配置したディレクトリ)へのパスを指定します。この設定は必須です。デフォルトの場所はありません。各TimesTenインスタンスで同じ場所およびディレクトリ名を使用することをお薦めしますが、必須ではありません。

  • replication_ssl_mandatory: TimesTenインスタンス間で一貫性のあるTLS構成にする必要があるかどうか(特に、TLSがreplication_cipher_suiteおよびreplication_wallet設定を介して構成されるかどうか、およびどの暗号スイートが指定されるか)を指定します。現在のインスタンスとレプリケーション・ピアの間に不一致があると、TimesTenの動作は次のように決定されます。

    • replication_ssl_mandatory=0 (必須ではない、デフォルト)が設定されているインスタンスでは、このインスタンスとレプリケーション・ピアの間でレプリケーションが続行されますが、レプリケーション・エージェント間の通信にはTLSが使用されません。この設定は、セキュアな通信が重要でない場合(少なくとも最初)、TLSへの遷移を簡単にするために使用します。

    • replication_ssl_mandatory=1 (必須)が設定されているインスタンスでは、一貫性のある設定になるまで、このインスタンスとレプリケーション・ピアの間でレプリケーションを続行できません。


ノート:

  • これらの構成変更を任意のインスタンスで有効にするには、レプリケーション・エージェントを再起動する必要があります。(TimesTenデーモンを再起動する必要はありません。)

  • replication_cipher_suiteの値が無効か、スイートがTimesTenでサポートされていない場合は、エラーが報告され、問題が解決されるまでレプリケーションは機能しません。

  • replication_cipher_suiteを設定したが、replication_walletに設定していない場合、または指定した場所に証明書が見つからない場合は、エラーが報告され、問題が解決されるまでレプリケーションは機能しません。


レプリケーション用のTLSのアクティブ化

指定されたreplication_walletディレクトリにある証明書と、replication_cipher_suite設定で指定された必要な暗号スイートを使用して、すべてのTimesTenインスタンスでTLSが構成されると、レプリケーション・エージェントの再起動によってレプリケーション・エージェントとの間の通信にTLSが使用されます。

これを実行するには、次の2つの方法があります。

  • レプリケーション用のTLSをオンラインで有効にします。レプリケーションが機能するのに応じて、レプリケーション・エージェントを一度に1つずつ再起動します。

または

  • すべてのインスタンスでレプリケーション用のTLSを同時に有効化し、レプリケーションを停止してからすべてのレプリケーション・エージェントを一度に再起動します。


ノート:

これは、インスタンス間の設定が一貫していることを想定しているか、レプリケーション用のTLSの構成で説明したようにreplication_ssl_mandatory設定に影響されます。

この項の内容は次のとおりです。

レプリケーション用のTLSへのオンライン切替え

TLSを使用していない既存のレプリケーション・スキームがある場合、レプリケーションが引き続き機能するには、これらのステップを使用してオンラインでTLSに切り替えます。

  1. TimesTen用の証明書の生成で説明したように証明書を生成し、TimesTenレプリケーション用の証明書で説明したように、各TimesTenインスタンスの目的の場所にその証明書をコピーします。

  2. 各インスタンスで、replication_walletを設定して、証明書が存在する場所を示します。

  3. 各インスタンスで、replication_cipher_suiteを設定して、使用する暗号スイートを示します。

  4. 各インスタンスでreplication_ssl_mandatory=0を設定します。

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

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

    % ttAdmin -repStop DSN
    % ttAdmin -repStart DSN
    

たとえば、host1にデータベースrep1およびhost2rep2を持ち、host3にサブスクライバrep3を持つアクティブ・スタンバイ・ペアがあるとします。レプリケーションが機能を続けるには、これらのステップを完了して、各レプリケーション・エージェントとの間の通信にTLSを使用します。

  1. rep1に証明書を作成し、/swdir/mywalletlocなどの目的のウォレット・ディレクトリに配置します。

  2. ウォレット・ディレクトリを、rep2およびrep3の適切な場所(できれば同じ場所)にコピーします。

  3. 3つのインスタンスすべてでTLSを構成します。たとえば、各timesten.confファイルで次のようにします。

    replication_wallet=/swdir/mywalletloc
    replication_cipher_suite=SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
    replication_ssl_mandatory=0
    
  4. 各インスタンスで、一度に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. TimesTen用の証明書の生成で説明したように証明書を生成し、TimesTenレプリケーション用の証明書で説明したように、各TimesTenインスタンスの目的の場所にその証明書をコピーします。

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

    % ttAdmin -repStop DSN
    

    ノート:

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

  3. すべてのインスタンスで、replication_walletを設定して、証明書が存在する場所を示します。

  4. すべてのインスタンスで、replication_cipher_suiteを設定して、使用する暗号スイートを示します。

  5. すべてのインスタンスでreplication_ssl_mandatory=1を設定します。

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

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

    % ttAdmin -repStart DSN
    

    注意:

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

レプリケーション用の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を参照してください。


注意:

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