この章では、TimesTenでの暗号化の使用について説明します。
TimesTenの一部の機能(クライアント/サーバーおよびレプリケーションなど)では、TimesTenインスタンス間の通信に対してTransport Layer Security (TLS)の使用がサポートされています。
この項の内容は、次のとおりです。
ノート:
|
この項では、TimesTen用TLSの証明書の使用について説明します。内容は次のとおりです。
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のttCreateCerts
ユーティリティについて説明し、このユーティリティを使用して証明書を作成する方法を示します。証明書は、TimesTen Client/ServerまたはTimesTenレプリケーションのどちらかのTLSに使用できます。
ttCreateCerts
ユーティリティは、TimesTenインスタンスのbin
ディレクトリにあります。TIMESTEN_HOME
は、ttCreateCerts
の実行前に設定する必要があります。この設定は、bin
ディレクトリからスクリプトのttenv.sh
またはttenv.csh
をソーシングすることで実行できます。
このユーティリティにより、rootWallet
、clientWallet
およびserverWallet
の3つのOracleウォレットが作成されます。
ノート: ttCreateCerts を使用するには、システムにJavaが存在している必要があります。その検索の際に、このユーティリティはJRE_HOME 、JAVA_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
: 楕円曲線署名アルゴリズムを指定します。サポートされているアルゴリズムは、ecdsasha256
、ecdsasha384
(デフォルト)およびecdsasha512
です。
-eccurve
: 楕円曲線のサイズを指定します。サポートされる値は、p256
、p384
(デフォルト)およびp521
です。
この項では、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を使用する場合は、必要に応じて、TimesTenクライアントとTimesTenサーバー間の暗号化通信にTLSを構成して使用できます。この機能は、TimesTenリリース18.1.2.1.0以上でサポートされています。
この項では、TimesTenによるクライアント/サーバー用のTLSのサポートについて説明します。内容は次のとおりです。
ノート: TimesTenリリース18.1.2.1.0より前のサーバーまたはクライアントを使用する場合、もう一方の側で必要に応じて暗号化が指定されていないかぎり接続は暗号化されず、接続が失敗します。 |
この機能により、TimesTenクライアントとサーバー間でTLSを使用して、セキュアなTCP/IPネットワーク接続が可能になります。TLSセッションの証明書は、Oracleウォレットに含まれます。この機能を有効にしない場合、および以前のTimesTenリリースでは、ネットワーク通信は暗号化されません。
クライアント/サーバーにTLSを使用するためのステップの概要を次に示します。
TimesTenサーバー上に証明書を作成し、目的のウォレット・ディレクトリに配置します。
ウォレット・ディレクトリをTimesTenクライアントにコピーします。
ウォレット・ディレクトリおよび暗号スイートの指定も含めて、必要に応じてサーバーおよびクライアントでTLSを構成します。
TLS通信の操作を確認します。(TLSは構成が完了するとすぐに使用されます。)
この項では、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.cert
、root.cert
、rootWallet
、server1.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のこれらのサーバー側属性は、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 内に次のような同等の属性を設定できます。
TimesTenインスタンスに複数のデータベースがある場合、これらの設定はすべてのデータベースに適用されますが、サーバーDSN定義によって各データベースに対して上書きできます。 |
TimesTenは、アクティブなTLSセッションでより強固なセキュリティを確保するために新しいセッション・キーが生成されるTLSセッションの再ネゴシエーションもサポートしています。セッションの再ネゴシエーションは、転送されたデータ量、または経過した時間に応じて実行されます。この機能を有効にする場合は、サーバーDSN定義で次のいずれかの属性を使用します。
SSLRenegotiationSize
: セッションの再ネゴシエーションが実行されるまでの、クライアントとサーバーの間のいずれかの方向のデータ転送のMB数を指定します。デフォルト設定は0で、転送されたMBに基づく再ネゴシエーションは行われません。
SSLRenegotiationPeriod
: セッションの再ネゴシエーションが実行されるまでの時間を分単位で指定します。デフォルト設定は0で、時間に基づく再ネゴシエーションは行われません。
両方の属性がゼロ以外の値に設定されている場合、最初に発生した状況によって再ネゴシエーションが行われます。
表3-1に、暗号スイートの設定を考慮した、クライアントとサーバーの間で可能なすべての暗号化設定の組合せの結果を示します。
表3-1 サーバーとクライアントの暗号化設定の組合せの結果
サーバー暗号化設定 | クライアント暗号化設定 | 結果 |
---|---|---|
|
|
接続が受け入れられ、暗号化はオフです。 |
|
|
接続が受け入れられ、暗号化はオフです。 |
|
|
接続が受け入れられます。暗号スイートの設定間で重複がある場合は暗号化がオンになり、ない場合はオフになります。 |
|
|
暗号スイート設定間で重複がある場合、暗号化がオンになって接続が受け入れられます。ない場合は、接続が拒否されます。 |
|
|
接続が受け入れられ、暗号化はオフです。 |
|
|
接続が受け入れられ、暗号化はオフです。 |
|
|
接続が受け入れられ、暗号化はオフです。 |
|
|
接続が拒否されます。 |
|
|
接続が受け入れられます。暗号スイートの設定間で重複がある場合は暗号化がオンになり、ない場合はオフになります。 |
|
|
接続が受け入れられ、暗号化はオフです。 |
|
|
接続が受け入れられます。暗号スイートの設定間で重複がある場合は暗号化がオンになり、ない場合はオフになります。 |
|
|
暗号スイート設定間で重複がある場合、暗号化がオンになって接続が受け入れられます。ない場合は、接続が拒否されます。 |
|
|
暗号スイート設定間で重複がある場合、暗号化がオンになって接続が受け入れられます。ない場合は、接続が拒否されます。 |
|
|
接続が拒否されます。 |
|
|
暗号スイート設定間で重複がある場合、暗号化がオンになって接続が受け入れられます。ない場合は、接続が拒否されます。 |
|
|
暗号スイート設定間で重複がある場合、暗号化がオンになって接続が受け入れられます。ない場合は、接続が拒否されます。 |
ノート: 自動クライアント・フェイルオーバーが有効になっていてフェイルオーバーが発生した場合、元の接続の暗号化属性の設定が継続して使用されます。フェイルオーバーサーバーの暗号化設定は、元のサーバーと同じである必要があります。 |
クライアント/サーバー用の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 に次のような同等の属性を設定できます。
TimesTenインスタンスに複数のクライアントDSNがある場合、これらの設定はすべてのクライアントDSNに適用されますが、クライアントDSN定義によって各クライアントに対して上書きできます。 |
TLSがEncryption
とCipherSuite
の設定が十分に一致するサーバーとクライアントの両方で構成されている場合は、表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レプリケーションを使用すると、必要に応じて、TimesTenレプリケーション・エージェントとの間のセキュアなネットワーク通信にTransport Layer Security (TLS)を構成して使用できます。
この項では、TimesTenによるレプリケーション用のTLSのサポートについて説明します。内容は次のとおりです。
この機能により、TimesTenレプリケーション・エージェントに対してTLSを使用して、セキュアなTCP/IPネットワーク接続が可能になります。相互認証はすべての接続に使用されます。これは、レプリケーション・エージェント間、またはTimesTenユーティリティ(ttRepAdmin
など)とレプリケーション・エージェント間のTimesTenインスタンス間の通信に適用されます。この機能を有効にしない場合、および以前のTimesTenリリースでは、そのような通信は暗号化されません。
レプリケーションにTLSを使用するためのステップの概要を次に示します。
TimesTenインスタンスの1つに証明書を作成し、それを目的のウォレット・ディレクトリに配置します。
ウォレット・ディレクトリの内容を他のTimesTenインスタンスにコピーします。
TimesTenでTLSを構成し、ウォレット・ディレクトリおよび暗号スイートを指定します。
TLS通信を有効にします(レプリケーション・エージェントを再起動してTLSの使用を開始します)。
この項では、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.cert
、clientWallet
、root.cert
、rootWallet
および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を使用するには、各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
(必須)が設定されているインスタンスでは、一貫性のある設定になるまで、このインスタンスとレプリケーション・ピアの間でレプリケーションを続行できません。
ノート:
|
指定されたreplication_wallet
ディレクトリにある証明書と、replication_cipher_suite
設定で指定された必要な暗号スイートを使用して、すべてのTimesTenインスタンスでTLSが構成されると、レプリケーション・エージェントの再起動によってレプリケーション・エージェントとの間の通信にTLSが使用されます。
これを実行するには、次の2つの方法があります。
レプリケーション用のTLSをオンラインで有効にします。レプリケーションが機能するのに応じて、レプリケーション・エージェントを一度に1つずつ再起動します。
または
すべてのインスタンスでレプリケーション用のTLSを同時に有効化し、レプリケーションを停止してからすべてのレプリケーション・エージェントを一度に再起動します。
この項の内容は次のとおりです。
TLSを使用していない既存のレプリケーション・スキームがある場合、レプリケーションが引き続き機能するには、これらのステップを使用してオンラインでTLSに切り替えます。
TimesTen用の証明書の生成で説明したように証明書を生成し、TimesTenレプリケーション用の証明書で説明したように、各TimesTenインスタンスの目的の場所にその証明書をコピーします。
各インスタンスで、replication_wallet
を設定して、証明書が存在する場所を示します。
各インスタンスで、replication_cipher_suite
を設定して、使用する暗号スイートを示します。
各インスタンスでreplication_ssl_mandatory=0
を設定します。
これにより、TLSを使用して、一度に1つずつ開始するようにTimesTenインスタンスを更新できます。
各インスタンスで(一度に1つずつ、連続して)、レプリケーション・エージェントを停止して再起動します。
% ttAdmin -repStop DSN % ttAdmin -repStart DSN
たとえば、host1
にデータベースrep1
およびhost2
にrep2
を持ち、host3
にサブスクライバrep3
を持つアクティブ・スタンバイ・ペアがあるとします。レプリケーションが機能を続けるには、これらのステップを完了して、各レプリケーション・エージェントとの間の通信にTLSを使用します。
rep1
に証明書を作成し、/swdir/mywalletloc
などの目的のウォレット・ディレクトリに配置します。
ウォレット・ディレクトリを、rep2
およびrep3
の適切な場所(できれば同じ場所)にコピーします。
3つのインスタンスすべてでTLSを構成します。たとえば、各timesten.conf
ファイルで次のようにします。
replication_wallet=/swdir/mywalletloc replication_cipher_suite=SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 replication_ssl_mandatory=0
各インスタンスで、一度に1つずつレプリケーション・エージェントを再起動します。
host1
:
% ttAdmin -repStop rep1 % ttAdmin -repStart repl
host2
:
% ttAdmin -repStop rep2 % ttAdmin -repStart rep2
host3
:
% ttAdmin -repStop rep3 % ttAdmin -repStart rep3
TLSを起動するとすぐにすべてのインスタンスで同時に適用されるようにする場合は、各インスタンスにreplication_ssl_mandatory=1
を設定する前に、レプリケーションを停止してすべてのレプリケーション・エージェントを停止する必要があります。
TimesTen用の証明書の生成で説明したように証明書を生成し、TimesTenレプリケーション用の証明書で説明したように、各TimesTenインスタンスの目的の場所にその証明書をコピーします。
すべてのインスタンスで、レプリケーション・エージェントを停止します。
% ttAdmin -repStop DSN
ノート: Oracle Clusterwareを使用している場合、クラスタ内の任意のインスタンスからttCWAdmin ユーティリティを使用して、1つのコマンドですべてのインスタンスに対してこれを実行できます。
% ttCWAdmin -stop -dsn DSN
|
すべてのインスタンスで、replication_wallet
を設定して、証明書が存在する場所を示します。
すべてのインスタンスで、replication_cipher_suite
を設定して、使用する暗号スイートを示します。
すべてのインスタンスでreplication_ssl_mandatory=1
を設定します。
これには、すべてのレプリケーション・エージェントを一度に停止し、すべてのレプリケーション・エージェントが停止している間にすべてのtimesten.conf
ファイルを更新する必要があります。
すべてのインスタンスで、レプリケーション・エージェントを再起動します。
% ttAdmin -repStart DSN
注意: Oracle Clusterwareを使用している場合、クラスタ内の任意のインスタンスからttCWAdmin ユーティリティを使用して、1つのコマンドですべてのインスタンスに対してこれを実行できます。
% ttCWAdmin -start -dsn DSN
|
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を参照してください。
注意: この出力を確認するには、マスター・システムおよびサブスクライブ・システム上でレプリケーション・エージェントが実行され、互いに接続されている必要があります。 |