21 Transport Layer Security暗号化の構成
セキュアで標準のプロトコルであるTransport Layer Security (TLS)を使用して、データベース・クライアントおよびサーバー接続を暗号化します。
- Transport Layer Security (TLS)およびOracle Database
TLSは、Oracle Databaseクライアントとサーバー間の接続を保護します。データベース・サーバーは、TLSバージョン1.3 (デフォルト)または1.2を使用して、他のデータベースおよびその他のサービスに接続することもできます。この章では、主にOracle Databaseクライアントとサーバー間のTLSの構成に焦点を当てます。 - Oracle DatabaseおよびクライアントのTLSの構成
このトピックでは、最も一般的な3つのTLS構成について説明します。詳細な構成とオプションの構成については、この章の後半で説明します。 - 拡張構成とオプション構成
Oracle Database 23aiでは、デフォルトのTransport Layer Security構成がセキュアで汎用性があります。ただし、Oracleには、この構成をカスタマイズおよび制御するためのパラメータが用意されています。 - TLSおよびその他のOracle製品
Transport Layer Security (TLS)は、他のOracle Database製品を使用する場合に構成できます。 - Transport Layer Security構成のトラブルシューティング
Oracle Database Transport Layer Securityの使用時に、一般的なエラーが発生する可能性があります。 - Transport Layer Securityバージョン1.3への移行および構成
Transport Layer Security (TLS)のバージョン1.3は、以前のバージョンのTLSと比較すると、セキュリティが強化され、TLSハンドシェイクが高速になっています。
親トピック: ネットワーク上のデータの保護
21.1 Transport Layer Security (TLS)とOracle Database
TLSは、Oracle Databaseクライアントとサーバー間の接続を保護します。データベース・サーバーは、TLSバージョン1.3 (デフォルト)または1.2を使用して、他のデータベースおよびその他のサービスに接続することもできます。この章では、主にOracle Databaseクライアントとサーバー間のTLSの構成に焦点を当てます。
データベース・クライアントおよびサーバーは、要件に応じてTLSを使用するように構成できます。次に説明するいくつかのオプションを検討します。主なユースケースについては、次のトピックで説明します。詳細な考慮事項については、「詳細構成とオプション構成」を参照してください。
クライアント・サーバーTLS接続を構成するには、データベース・サーバーにウォレットが必要です。サーバー・ウォレットには、秘密キー、署名付きユーザー証明書、信頼のルート証明書およびデータベース・サーバー・ユーザー証明書の中間証明書が含まれます。
データベース・サーバー上のTLSウォレットは、WALLET_ROOT
の場所に格納する必要があります。(パラメータWALLET_LOCATION
は、Oracle DatabaseサーバーのOracle Database 23aiでの使用は非推奨です。Oracle Databaseクライアントまたはリスナーでの使用は非推奨ではありません。) WALLET_ROOT
の下にTLS用のディレクトリを作成して、WALLET_ROOT/<PDB GUID>/tls
とします。各コンテナ(CDBルートを含む)には独自のTLSウォレットがあり、WALLET_ROOT
の使用時に1つのウォレットが複数のコンテナまたはすべてのコンテナで動作するように構成することはできません。
データベース・クライアントとサーバー間にTLSを構成する場合は、いくつかのオプションを検討する必要があります:
- 自己署名証明書と公開認証局(CA)署名証明書
自己署名証明書または公開認証局署名証明書がデータベース構成に適しているかどうかを確認します。 - 一方向TLSと相互TLS
一方向TLSまたは相互TLS (mTLS)がデータベース構成に適しているかどうかを確認します。 - クライアント・ウォレットの使用の有無を問わないTLS
クライアント・ウォレットの使用がデータベース構成に適しているかどうかを確認します。 - 証明書DN一致
証明書DN一致がデータベース構成に適しているかどうかを確認します。
21.1.1 自己署名証明書と公開認証局(CA)署名証明書
自己署名証明書または公開認証局署名証明書がデータベース構成に適しているかどうかを確認します。
自己署名証明書: 自己署名ルート証明書は自分で作成でき、無料であるため、内部向けのITリソースに対して一般的です。リソース(ここではデータベース・サーバー)は、自己署名ルート証明書を使用して独自のデータベース・サーバー証明書に署名します。サーバー証明書と自己署名ルート証明書は、データベース・サーバー・ウォレットに格納されます。データベース・クライアントがデータベース・サーバー証明書を信頼できるようにするには、自己署名ルート証明書のコピーもクライアントに必要になります。この自己署名ルート証明書は、クライアント側のウォレットに格納することも、クライアント・システムのデフォルト証明書ストアにインストールすることもできます。すべてのOSのシステム証明書ストアの場所は、「Oracleウォレットの検索順序」に記載されています。
セッションの確立前に、データベース・クライアントは、サーバー証明書がクライアントにインストールされているものと同じルート証明書によって署名されているかどうかを確認します。ルート信頼証明書は、クライアント・システムのデフォルトの証明書ストアに格納すると、クライアント・マシンの他のアプリケーションやブラウザでも使用できるため便利です。会社で自己署名証明書を使用している場合、ルート信頼証明書はすべてのクライアントのデフォルト信頼ストアにすでにインストールされている可能性があります。
公開認証局(CA): CA署名証明書は、サード・パーティのパブリックで信頼できる認証局(CA)によって署名されます。公開認証局の例には、Symantec、DigiCert、Thawte、GeoTrust、GlobalSign、GoDaddyおよびEntrustがあります。これらのエンティティは、各証明書を要求する個人または組織の検証を担当します。
信頼のルートの公開認証局を使用すると、場合によってはルート信頼証明書がクライアント・システムのデフォルト証明書ストアにすでに格納されているというメリットがあります。公開認証局からの場合、クライアントがルート信頼証明書を格納するための追加のステップはありません。デメリットとしては、通常はサード・パーティの認証局への支払があることです。
21.1.2 一方向TLSと相互TLS
一方向TLSまたは相互TLS (mTLS)がデータベース構成に適しているかどうかを確認します。
一方向TLS: 一方向TLSは、TLSプロトコルを使用するサーバー検証暗号化チャネルです。標準のTLSセッションでは、サーバーのみがクライアントに証明書を提供し、自身を認証します。クライアントは、サーバーに対して自身を認証するために個別のクライアント証明書を必要としません(HTTPSセッションの確立方法と同様)。データベース・サーバーにはサーバー・ユーザー証明書および秘密キーを格納するためのウォレットが必要ですが、データベース・クライアントは信頼できるCAルート証明書にアクセスするだけで、サーバー・ユーザー証明書が信頼できるCAルート証明書によって署名されていることを検証します。OSプラットフォームおよびデータベース・クライアントによっては、信頼できるCAルート証明書がローカルのデフォルトの証明書システム・ストアまたはクライアント・ウォレットに存在する場合があります。一方向TLSは最も一般的なTLS構成であり、詳細な構成ステップは、「データベース・サーバー証明書に公開認証局の信頼のルートを使用したTLSの構成」を参照してください。
双方向TLS(相互TLS、mTLSとも呼ばれる): mTLSでは、クライアントとサーバーの両方がユーザー証明書を相互に提示します。ほとんどの場合、同じCAルート証明書がこれらの証明書の両方に署名するため、データベース・サーバーとクライアントで同じルートCA証明書を他方の証明書の認証に使用できます。この方法で使用されるmTLSは、データベースとクライアント間のリンクの暗号化、およびデータベースとクライアントの証明書の両方の検証に使用されます。データベース・ユーザー認証は、たとえば、mTLS暗号化リンクの確立に加え、データベース・ユーザー名とパスワードを使用してユーザーを認証するなど、個別に実行されます。プリンシパル(人間またはアプリケーション)は、クライアント側ユーザー証明書を認証メカニズムとして使用することもできます。これはPKI証明書による認証と呼ばれ、「PKI証明書による認証の構成」で説明されています。この場合、ユーザー証明書は二重の義務を果たし、データベースへのmTLS接続およびPKI証明書による認証を確立します。mTLSの構成ステップの詳細は、「相互Transport Layer Security (mTLS)」を参照してください。
21.1.3 クライアント・ウォレットの使用の有無を問わないTLS
クライアント・ウォレットの使用がデータベース構成に適しているかどうかを確認します。
ウォレットを使用するクライアント: mTLSを使用する場合、クライアント証明書が必要です。クライアント証明書は、Windowsのクライアント・ウォレットまたはMicrosot証明書ストア(MCS)に格納する必要があります。ウォレットには、信頼できるCAルート証明書と必要な中間証明書も格納する必要があります。
ウォレットを使用しないクライアント: TLSを次の条件で使用する場合、クライアントはウォレットなしで構成できます:
- クライアントに独自の証明書がない一方向TLSが構成されています。
- データベース・サーバー証明書に署名したルート証明書は、システムのデフォルトの証明書ストアに格納されます。サーバー証明書が公開認証局によって署名されている場合、ルート証明書はすでに存在しています。自己署名証明書を使用してサーバー証明書に署名した場合は、クライアント・ウォレットを使用しないように、この自己署名証明書をシステムのデフォルトの証明書ストアにインストールする必要があります。
- これはLinuxおよびWindowsクライアントにのみ適用されます。これは、Windows MCSおよびネイティブLinuxキーストアでネイティブに機能します。Windows以外のクライアントおよびLinux OS以外のクライアントでは、OCI-Cクライアントは、「Oracleウォレットの検索順序」で説明されている複数の場所に格納されているPEMファイルを検索します。
21.1.4 証明書DN一致
証明書DN一致がデータベース構成に適しているかどうかを確認します。
ヒント:
Oracleでは、TLSセッションを構成するときにこのオプションを使用することをお薦めします。- 部分DN一致:
SQLNET.ora
または接続文字列で、SSL_SERVER_DN_MATCH=YES
を指定します。部分DN一致では、接続文字列のHOST
パラメータをチェックして、CN、DNまたはSAN名と一致するかどうかを確認します。接続を確立させるには一致する必要があります。 - 完全DN一致:
SSL_SERVER_DN_MATCH=YES
の設定に加えて、完全なDN一致を強制するようにSSL_SERVER_CERT_DN=<certificate DN>
も設定する必要があります。これにより、HOST
値がIPアドレスまたは証明書で使用可能な名前以外にする必要がある場合に、DN証明書の一致を引き続き使用できます。
21.2 Oracle DatabaseおよびクライアントのTLSの構成
このトピックでは、最も一般的な3つのTLS構成について説明します。詳細な構成とオプションの構成については、この章の後半で説明します。
- Oracle DatabaseのTLSの構成について
このトピックでは、最も一般的な3つのTLS構成について説明します。 - データベース・サーバー証明書に公開認証局の信頼のルートを使用したTLSの構成
クライアント・ウォレットを使用せずにTLSを構成するには、最初にサーバー・ウォレットを作成し、データベースとリスナーが正しく構成されていることを確認する必要があります。 - 自己署名ルート証明書を使用したTLSの構成
自己署名ルート証明書の使用は、前述のユース・ケースと非常に似ていますが、ルート・ウォレットを作成し、自己署名ルート証明書でデータベース証明書に署名する必要があります。 - クライアント・ウォレットを使用したTLS接続の構成
公開認証局または自己署名CA信頼証明書を使用してTLSを構成する場合は、クライアント・ウォレットが必要になることがあります。 - 識別名(DN)一致の有効化
DN一致では、サーバー証明書名またはDNがクライアントで想定されるものと一致する場合に、Oracle Databaseサーバーに接続できます。
21.2.1 Oracle DatabaseのTLSの構成について
このトピックでは、最も一般的な3つのTLS構成について詳しく説明します。
最初に決定するのは、自己署名証明書の信頼ルートまたは信頼のパブリックCAルートを使用することです。Oracleでは、使用している環境でサポートされ、セキュリティ・ポリシーで許可されていて、これを決定した場合にウォレットなしでTLSを使用することをお薦めします。これにより、データベース・クライアントの管理が大幅に簡素化されます。最小限の必須パラメータ・セットで構成を開始します。次に完了したら、推奨パラメータとオプション・パラメータを1つずつ追加します。
このトピックの次の構成では、次のパラメータが使用されます。
表21-1 一方向TLSを構成するための必須パラメータと推奨パラメータ
パラメータ | 説明 | サーバー(sqlnet.ora で定義) |
リスナー(listener.ora で定義) |
静的クライアント(sqlnet.ora で定義) |
動的クライアント(接続文字列で定義) |
---|---|---|---|---|---|
WALLET_ROOT |
データベース・サーバーのシステム・パラメータ(WALLET_LOCATION と置換)
|
必須 | いいえ | いいえ | いいえ |
WALLET_LOCATION |
必要に応じて、ウォレットの場所を指定します | いいえ | 必須 | オプション | オプション |
Protocol=tcps |
TLS接続を有効化します | いいえ | 必須 | いいえ | 必須 |
SSL_CLIENT_AUTHENTICATION |
1方向TLSの許可を無効化します | 必須 | 必須 | オプション | オプション |
SSL_SERVER_DN_MATCH |
部分DN一致または完全DN一致を有効化します | いいえ | いいえ | 推奨 | 推奨 |
SSL_SERVER_CERT_DN |
完全DN一致が必要な場合に使用します | いいえ | いいえ | いいえ | オプション |
WALLET_ROOT
およびWALLET_LOCATION
パラメータ
Oracle Databaseサーバーには、WALLET_LOCATION
を使用するかわりにWALLET_ROOT
システム・パラメータを使用することをお薦めします。
パラメータWALLET_LOCATION
は、Oracle DatabaseサーバーのOracle Database 23aiでの使用は非推奨です。Oracle Databaseクライアントまたはリスナーでの使用は非推奨ではありません。PDBのTLSウォレットの場所はWALLET_ROOT/<PDB GUID>/tls
です。
WALLET_LOCATION
は、リスナーがウォレットを検索するために使用する必要があります。Oracleでは、リスナーとサーバーのDN一致に同じウォレットを使用することをお薦めします。DN一致は、クライアントが想定しているサーバーに接続していることを確認するために使用され、クライアントはリスナー証明書とサーバー証明書の両方をチェックします。
Protocol
パラメータ
クライアントおよびリスナーでは、Protocol
をtcps
に設定する必要があります。リスナーは、これをサービス接続文字列の一部として設定します。クライアントはこれを接続文字列に設定します。
SSL_CLIENT_AUTHENTICATON
パラメータ
TLSトラフィック(およびmTLS)がリスナーおよびサーバーに接続できるようにするには、データベース・サーバーおよびリスナーのSSL_CLIENT_AUTHENTICATON
をFALSE
に設定する必要があります。これはクライアントではオプションであり、そのクライアントで、他の接続に使用されるクライアント側ユーザー証明書を含むウォレットがすでにあるかによって異なります。
DN一致
DN一致を使用することをお薦めします。ただし、TLS接続の確認が完了してから、これらの設定を追加します。
Oracle Databaseの最も一般的なTLS構成は次のとおりです:
21.2.2 データベース・サーバー証明書に公開認証局の信頼のルートを使用したTLSの構成
クライアント・ウォレットを使用せずにTLSを構成する前に、サーバー・ウォレットを最初に作成し、データベースとリスナーが正しく構成されていることを確認する必要があります。
21.2.2.1 サーバーおよびリスナー・ウォレットの作成
21.2.3 自己署名ルート証明書を使用したTLSの構成
自己署名ルート証明書の使用は、前述のユースケースと非常によく似ていますが、ルート・ウォレットを作成し、自己署名ルート証明書でデータベース証明書に署名する必要があります。
21.2.3.2 サーバーおよびリスナー・ウォレットの作成
21.2.3.7 TLSのクライアント構成
21.2.3.7.1 自己署名の信頼できるルート証明書の、クライアント・システムのデフォルト・キーストアへの追加
Oracle Databaseシック・クライアント(OCI-C)は、WindowsおよびLinuxシステムのデフォルト・ストアとネイティブに連携します。他のオペレーティング・システムでは、Oracle Databaseクライアントは、次にリストされているディレクトリの場所でPEMファイルを検索します。OS用のPEMファイルが別の場所にある場合は、PEMファイルを検索した場所の1つにコピーするか、検索した場所へのシンボリックリンクを作成できます。OSごとの指示に従って、新しい信頼証明書をシステムの証明書ストア(PEMファイル)に追加します。Microsoft WindowsおよびRHEL/Oracle Linuxについては、このための指示が含まれています。
21.2.4 クライアント・ウォレットを使用したTLS接続の構成
公開認証局または自己署名CA信頼証明書を使用してTLSを構成する場合、クライアント・ウォレットが必要になることがあります。
TLS接続のクライアント・ウォレットには、データベース・サーバー証明書に署名した認証局の信頼証明書が含まれます。信頼証明書のルートのみが必要です。中間証明書は必要ありません。
システムのデフォルトの証明書ストアを使用できない場合は、クライアント・ウォレットを使用する必要があります。
21.2.5 識別名(DN)一致の有効化
DN一致では、サーバー証明書名またはDNがクライアントで想定されるものと一致する場合に、Oracle Databaseサーバーに接続できます。
ヒント:
Oracleでは、クライアントが正しいホストに接続するように、部分DN一致または完全DN一致を使用することをお薦めします。DN一致が有効な場合、リスナー証明書とデータベース・サーバー証明書の両方が、クライアントで想定される証明書と照合されます。DN一致を使用しない場合、同じまたは有効な公開CAによって署名されたサーバー証明書がクライアントに受け入れられ、TLSセッションが確立されます。
DN一致を設定する前に、まずテスト環境でTLSを正常に構成することをお薦めします。「データベース・サーバー証明書に公開認証局の信頼のルートを使用したTLSの構成」を参照してください。
DN一致を有効にするには:
-
sqlnet.ora
ファイルでSSL_SERVER_DN_MATCH
パラメータをTRUE
に設定します:SSL_SERVER_DN_MATCH = TRUE
sqlnet.ora
ファイルは次のようになります:SSL_CLIENT_AUTHENTICATION = FALSE WALLET_LOCATION = (SOURCE= (METHOD=File) (METHOD_DATA= (DIRECTORY=wallet_location))) SSL_SERVER_DN_MATCH = TRUE
ノート:
このステップのみを完了すると、部分DN一致になります。ステップ3を実行して、完全DN一致を確立します。部分DN一致では、接続文字列のホスト・パラメータ値が証明書の共通名(CN)と照合されます。一致が見つからない場合、クライアントはホスト・パラメータ値を証明書のサブジェクト代替名(SAN)フィールドのエントリと比較します。一致しない場合、接続は拒否されます。
-
tnsnames.ora
の接続文字列で、ホスト名パラメータを証明書DN文字列の共通名(CN)およびサブジェクト代替名(SAN)フィールドにリストされているホスト名と照合して確認します。部分DNが一致するには、接続文字列ホスト名が一致している必要があります。tnsnames.ora
ファイルは、クライアントまたはLDAPディレクトリに配置できます。tnsnames.ora
ファイルは、通常、TNS_ADMIN
環境変数で指定された設定にあります。TNS_ADMIN
が設定されていない場合、tnsnames.ora
は次のディレクトリの場所に存在します:- Linuxの場合:
$ORACLE_HOME/network/admin/
- Windowsの場合:
ORACLE_BASE\ORACLE_HOME\network\admin\
- Linuxの場合:
- 部分DN一致を使用できない場合は、
tnsnames.ora
ファイルでSSL_SERVER_CERT_DN
パラメータ接続文字列を設定し、完全DN一致を構成します:ノート:
tnsnames.ora
またはsqlnet.ora
のホスト値を証明書の共通名(CN)の値またはSANフィールドのいずれかのエントリに設定できない場合は、完全DN一致の使用を検討してください。リスナー証明書とサーバー証明書の両方が、部分DNと完全DNの両方の一致でチェックされます。完全DN一致を使用する場合、サーバー証明書とリスナー証明書は異なる可能性がありますが、接続を確立するにはDNが同じである必要があります。
tnsnames.ora
ファイルは次のようになります:finance= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL = tcps)(HOST = finance) (PORT = 1575))) (CONNECT_DATA= (SERVICE_NAME= finance.us.example.com)) (SECURITY= (SSL_SERVER_DN_MATCH = TRUE) (SSL_SERVER_CERT_DN="cn=finance,cn=OracleContext,c=us,o=example")))
21.3 拡張構成とオプション構成
Oracle Database 23aiでは、デフォルトのTransport Layer Security構成がセキュアで汎用性があります。ただし、Oracleには、この構成をカスタマイズおよび制御するためのパラメータが用意されています。
ノート:
セキュアな構成を確保するために、Oracleでは、使用している環境で必須パラメータおよび推奨パラメータのみを構成することをお薦めします。Oracle Databaseクライアントおよびサーバーが接続を構成している場合、サーバーとクライアントの両方に共通する、最もセキュアなプロトコルおよび暗号スイートが選択されます。TLSプロトコルまたは暗号スイートを選択すると、そのプロトコルまたは暗号スイートを使用できないクライアントがブロックされます。これらの構成はデータベースの更新やアップグレード中にチェックして、選択した値がデータベースのアップグレードまたは更新後にサポートされていることを確認する必要があります。- Transport Layer Securityのオプション・パラメータ
サーバー側のTLS構成は、サーバーが提供するすべての接続に適用されます。これらはデータベース・サーバーのサーバー側構成ファイルsqlnet.ora、およびデータベース・リスナーのlistener.oraで指定されます。 - 相互Transport Layer Security (mTLS)
従来のTransport Layer Security (TLS)では、サーバーのみが証明書を提示してクライアントに対して認証されます。相互Transport Layer Security (mTLS)では、サーバーとクライアントの両方が証明書を提示し、相互に認証されるようにします。 - Oracle Walletの場所
TLSに使用される証明書は、Oracleウォレットに格納されます。ウォレットを配置できるデフォルトの場所がいくつかあります。ウォレットの場所は、クライアントおよびリスナーのウォレットの場所パラメータを使用して構成することもできます。データベース・サーバーのウォレットの場所には、WALLET_ROOT
システム・パラメータを使用する必要があります。 - 弱いDN一致の有効化
SSL_ALLOW_WEAK_DN_MATCH
パラメータ制御は、DN一致の動作を以前のデータベース・バージョンに戻します。 - 秘密キー/証明書の選択
証明書に使用するOracleウォレットまたはシステム証明書ストアのいずれかに、複数の秘密キー/証明書ペアを格納できます。これは、Autonomous Databaseなど、異なるデータベースがmTLSの異なるクライアント資格証明を割り当てる場合に必要になることがあります。 - Transport Layer Security暗号化と認証方式の併用
データベース・ユーザーの名前およびパスワード、RADIUS、Kerberos、PKI証明書、MS-EI、OCI IAMなど、すべての認証メカニズムとTLSを同時に使用するようにOracle Databaseを構成できます。 - TLSプロトコルおよびTLS暗号スイートの指定
Oracle Database 23aiでは、TLSプロトコル・バージョン1.2および1.3と、それに関連付けられたTransport Layer Security (TLS)の暗号スイートがサポートされています。 - 証明書失効リストによる証明書の検証
オラクル社では、証明書失効リストを使用して証明書を検証できるツールを提供しています。
21.3.1 Transport Layer Securityのオプション・パラメータ
サーバー側のTLS構成は、サーバーが提供するすべての接続に適用されます。これらはデータベース・サーバーのサーバー側構成ファイルsqlnet.ora、およびデータベース・リスナーのlistener.oraで指定されます。
クライアント側のTLS構成は、接続固有にすることも、sqlnet.ora
を介してすべての接続に適用することもできます。クライアント用のTransport Layer Security (TLS)パラメータの構成方法は2つあります。
-
静的: これらは構成ファイル
sqlnet.ora
で指定されたパラメータであり、クライアントによるすべての接続に均一に適用されます。 -
動的: 必要に応じて、特定のTLSパラメータをTNS接続文字列に直接指定して、
sqlnet.ora
内の同じまたは類似するパラメータをオーバーライドできます。
表21-2 一般的なTLSパラメータ
パラメータ | 説明 | サーバー | リスナー | 静的クライアント | 動的クライアント |
---|---|---|---|---|---|
HTTPS_CLIENT_AUTHENTICATION |
HTTPS接続用のTLSを使用してクライアントを認証するかどうかを指定します | はい | はい | はい | はい |
SSL_CLIENT_AUTHENTICATION |
TLSまたはmTLSを使用してクライアントが認証されるかどうかを指定します | はい | はい | はい | はい |
WALLET_LOCATION |
TLSウォレットの場所を指定します。 | はい* | はい | はい | はい |
*パラメータWALLET_LOCATION
は、Oracle DatabaseサーバーのOracle Database 23aiでの使用は非推奨です。Oracle Databaseクライアントまたはリスナーでの使用は非推奨ではありません。
Oracle Databaseサーバーには、WALLET_LOCATION
を使用するかわりにWALLET_ROOT
システム・パラメータを使用することをお薦めします。
表21-3 ユーザー証明書を選択するためのTLSパラメータ
パラメータ | 説明 | サーバー | リスナー | 静的クライアント | 動的クライアント |
---|---|---|---|---|---|
SSL_CERTIFICATE_ALIAS |
別名に基づいて証明書を指定します。 | はい | はい | はい | はい |
SSL_EXTENDED_KEY_USAGE |
キー使用値に基づいて証明書を指定します。 | はい | はい | はい | はい |
SSL_CERTIFICATE_THUMBPRINT |
サムプリントに基づいて証明書を指定します。 | はい | はい | はい | はい |
ノート:
クライアント側ユーザー証明書の選択は、Windows MCSおよびOracleウォレットでユーザー証明書を操作する場合にのみ適用されます。表21-4 TLS証明書DN一致パラメータ
パラメータ | 説明 | サーバー | リスナー | 静的クライアント | 動的クライアント |
---|---|---|---|---|---|
SSL_ALLOW_WEAK_DN_MATCH |
サーバー側の証明書の検証中に、以前の弱い識別名(DN)の照合動作を許可します | いいえ | いいえ | はい | はい |
SSL_SERVER_CERT_DN |
データベース・サーバーの識別名(DN)を指定します | いいえ | いいえ | いいえ | はい |
SSL_SERVER_DN_MATCH |
識別名(DN)一致によるサーバーのクライアント側検証を強制します | いいえ | いいえ | はい | はい |
TLS_CERT_VALIDATION_MODE |
RFC 5280に従ったより厳しいチェックを強制するかどうかを指定します。 | いいえ | いいえ | はい | いいえ |
表21-5 TLSプロトコルおよび暗号スイートの選択パラメータ
パラメータ | 説明 | サーバー | リスナー | 静的クライアント | 動的クライアント |
---|---|---|---|---|---|
SSL_CIPHER_SUITES |
TLS接続に許可されるTLS暗号スイートを指定します | はい | はい | はい | はい |
SSL_ENABLE_WEAK_CIPHERS |
非推奨のTLS暗号スイートを有効化します | はい | はい | はい | はい |
SSL_VERSION |
接続に使用するTLSプロトコルを指定します | はい | はい | はい | はい |
TLS_DISABLE_VERSION |
接続で許可されないTLSプロトコル(ある場合)を指定します。 | はい | はい | はい | はい |
親トピック: 拡張構成とオプション構成
21.3.2 相互Transport Layer Security (mTLS)
従来のTransport Layer Security (TLS)では、サーバーのみが証明書を提示してクライアントに対して認証されます。相互Transport Layer Security (mTLS)では、サーバーとクライアントの両方が証明書を提示し、相互に認証されるようにします。
SSL_CLIENT_AUTHENTICATION
パラメータは、クライアント証明書を認証する必要があるかどうかを制御します。これはエンド・ユーザーを認証または認可しません。サーバーとクライアントの両方で使用される証明書が有効であり、既知の認証局(CA)によって署名されていることを認証します。「PKI証明書による認証の構成」では、PKI証明書を使用したエンド・ユーザー認証について詳しく説明します。
SSL_CLIENT_AUTHENTICATION
のデフォルトはデータベース・サーバー、リスナー、クライアントについてTRUE
であり、mTLS (クライアント・ウォレット内のクライアント証明書を必要とする相互TLS)が必要になります。次の設定があります。
OFF
/FALSE
は一方向TLSを有効にするmTLSを無効にします。ON
/TRUE
はmTLSを有効にします。サーバーでOn/TRUEに設定されている場合、一方向TLSは無効になります。クライアントでOn/TRUEに設定されている場合、クライアントはmTLSの確立を試みますが、サーバーが一方向TLSで構成されている場合、一方向TLSは引き続き許可されます。OPTIONAL
(サーバーのみの構成値)を使用すると、サーバーは次のように動作できます:- クライアントが証明書を送信すると、接続はクライアント証明書の認証後にmTLS接続として完了します。
- クライアントが証明書を送信していないと、接続は一方向TLS接続として完了します。
- サーバー証明書DN一致
Oracleでは、サーバー証明書DN一致を使用することをお薦めします。これは、一方向TLSでサーバーDN一致を使用する場合と同様に、クライアントが目的のサーバーに接続していることを確認するためです。
親トピック: 拡張構成とオプション構成
21.3.2.1 サーバーおよびリスナー・ウォレットの作成
21.3.2.7 サーバー証明書DN一致
Oracleでは、サーバー証明書DN一致を使用することをお薦めします。これは、一方向TLSでサーバーDN一致を使用する場合と同様に、クライアントが目的のサーバーに接続していることを確認するためです。
tnsnames.ora
ファイルでSSL_SERVER_CERT_DN
パラメータ接続文字列を設定し、完全DN一致を構成します:
ノート:
tnsnames.ora
またはsqlnet.ora
のホスト値を証明書の共通名(CN)の値またはSANフィールドのいずれかのエントリに設定できない場合は、完全DN一致の使用を検討してください。
リスナー証明書とサーバー証明書の両方が、部分DNと完全DNの両方の一致でチェックされます。完全DN一致を使用する場合、サーバー証明書とリスナー証明書は異なる可能性がありますが、接続を確立するにはDNが同じである必要があります。
tnsnames.ora
ファイルは次のようになります:finance=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL = tcps)(HOST = finance)
(PORT = 1575)))
(CONNECT_DATA=
(SERVICE_NAME= finance.us.example.com))
(SECURITY=
(SSL_SERVER_DN_MATCH = TRUE)
(SSL_SERVER_CERT_DN="cn=finance,cn=OracleContext,c=us,o=example")))
21.3.3 Oracleウォレットの場所
TLSに使用される証明書は、Oracleウォレットに格納されます。ウォレットを配置できるデフォルトの場所がいくつかあります。ウォレットの場所は、クライアントおよびリスナーのウォレットの場所パラメータを使用して構成することもできます。データベース・サーバーのウォレットの場所には、WALLET_ROOT
システム・パラメータを使用する必要があります。
- クライアントのウォレットの場所の構成
クライアントのウォレットの場所は、パラメータWALLET_LOCATION
を使用して構成できます。sqlnet.ora
でWALLET_LOCATION
パラメータを構成すると、すべての接続に適用されます。接続固有のウォレットが必要な場合は、接続用のWALLET_LOCATION
を構成して、sqlnet.ora
のWALLET_LOCATION
をオーバーライドできます。 - リスナーのウォレットの場所の構成
リスナーのウォレットの場所は、listener.ora
のWALLET_LOCATION
パラメータを使用して構成できます。 - サーバーのPDBウォレットの場所の構成
マルチテナント・アーキテクチャを使用すると、Oracle Databaseを、ユーザーが作成した1つ以上のプラガブル・データベース(PDB)を含むマルチテナント・コンテナ・データベース(CDB)として機能させることができます。 - Oracleウォレットの検索順序
Oracle Databaseは、Transport Layer Security (TLS)環境でサーバーのウォレットを検索するための複数のルートを用意しています。
親トピック: 拡張構成とオプション構成
21.3.3.1 クライアントのウォレットの場所の構成
クライアントのウォレットの場所は、パラメータWALLET_LOCATION
を使用して構成できます。sqlnet.ora
で WALLET_LOCATION
パラメータを構成すると、すべての接続に適用されます。接続固有のウォレットが必要な場合は、接続用のWALLET_LOCATION
を構成して、sqlnet.ora
のWALLET_LOCATION
をオーバーライドできます。
特定のプラットフォームでは、一方向TLS認証用のクライアントを設定する際にウォレットは不要であり、構成にウォレットの場所も不要です。Oracle Databaseでは、システムにインストールされている信頼できるCA証明書を使用して、一方向TLSに対応できます。詳細およびサポートされているプラットフォームのリストは、前のトピック「クライアント・ウォレットを使用しないTransport Layer Security接続」を参照してください。
(sqlnet.ora)
WALLET_LOCATION =
(SOURCE=
(METHOD=File)
(METHOD_DATA=
(DIRECTORY=your_wallet_dir)
)
)
(tnsnames.ora)
svc_name=(DESCRIPTION=
(ADDRESS=(...))
(CONNECT_DATA=(...))
(SECURITY=
(WALLET_LOCATION=your_wallet_dir)
)
)
親トピック: Oracleウォレットの場所
21.3.3.2 リスナーのウォレットの場所の構成
リスナーのウォレットの場所は、listener.ora
のWALLET_LOCATION
パラメータを使用して構成できます。
WALLET_LOCATION
は、listener.ora
の各リスナーに指定できます。
LISTENER =
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=tcps)
(HOST=)
(PORT=5678))
(SECURITY=
(WALLET_LOCATION=dir1)))
LISTENER2 =
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=tcps)
(HOST=)
(PORT=5679))
(SECURITY=
(WALLET_LOCATION=dir2)))
親トピック: Oracleウォレットの場所
21.3.3.3 サーバーのPDBウォレットの場所の構成
マルチテナント・アーキテクチャを使用すると、Oracle Databaseを、ユーザーが作成した1つ以上のプラガブル・データベース(PDB)を含むマルチテナント・コンテナ・データベース(CDB)として機能させることができます。
CDB$ROOTと各PDBは、init.ora
ファイルで定義されたWALLET_ROOT
システム・パラメータで構成できる独自のローカル・ウォレットを持つことができます。
WALLET_ROOT/tls
WALLET_ROOT/<pdb_GUID>/tls
ノート:
パラメータWALLET_LOCATION
は、Oracle DatabaseサーバーのOracle Database 23aiでの使用は非推奨です。Oracle Databaseクライアントまたはリスナーでの使用は非推奨ではありません。Oracle Databaseサーバーには、WALLET_LOCATION
を使用するかわりにWALLET_ROOT
システム・パラメータを使用することをお薦めします。
親トピック: Oracleウォレットの場所
21.3.3.4 Oracleウォレットの検索順序
Oracle Databaseは、Transport Layer Security (TLS)環境でサーバーのウォレットを検索するための複数のルートを用意しています。
Oracle DatabaseサーバーがTLSで使用するウォレットを特定する方法
Oracle Databaseサーバーは、次の場所を指定の順序で検索して、ウォレットを特定します。データベースに1つ以上のプラガブル・データベース(PDB)がある場合は、pdb_GUID
の値をPDBのグローバル識別子(GUID)に置き換える必要があります。
init.ora
ファイルのWALLET_ROOT
システム・パラメータによって定義された場所:- PDBの場合は
WALLET_ROOT/<pdb_ID>/tls
- CDBルート・コンテナ
CDB$ROOT
の場合はWALLET_ROOT/tls
、
- PDBの場合は
sqlnet.ora
ファイルのWALLET_LOCATION
によって定義された場所:WALLET_LOCATION
ノート:
パラメータWALLET_LOCATION
は、Oracle DatabaseサーバーのOracle Database 23aiでの使用は非推奨です。Oracle Databaseクライアントまたはリスナーでの使用は非推奨ではありません。Oracle Databaseサーバーには、
WALLET_LOCATION
を使用するかわりにWALLET_ROOT
システム・パラメータを使用することをお薦めします。
$TNS_ADMIN
環境変数によって定義された場所。これは、チェックされる唯一のディレクトリの場所であり、この場所の下にあるサブディレクトリではありません。- デフォルトのウォレットの場所:
- Linux:
/etc/ORACLE/WALLETS/user_name
これは、チェックされる唯一のディレクトリの場所であり、この場所の下にあるサブディレクトリではありません。
- Windows:
C:\Users\user_name\ORACLE\WALLETS
これは、チェックされる唯一のディレクトリの場所であり、この場所の下にあるサブディレクトリではありません。
- Linux:
- CDBコンテナ・データベースの一部またはすべてに単一のウォレットが必要な場合は、
TNS_ADMIN
またはデフォルトのウォレットの場所にウォレットを配置します。WALLET_ROOT
の下にウォレットが見つからない場合、PDBはその場所にデフォルト設定されます。
Oracle DatabaseリスナーがTLSで使用するウォレットを特定する方法
Oracle Databaseリスナーは、これらの場所を指定の順序で検索して、ウォレットの場所を特定します:
listener.ora
ファイルのWALLET_LOCATION
パラメータによって定義された場所$TNS_ADMIN
環境変数によって定義された場所- デフォルトのウォレットの場所:
- Linux:
/etc/ORACLE/WALLETS/user_name
- Windows:
C:\Users\user_name\ORACLE\WALLETS
- Linux:
Oracle DatabaseクライアントがTLSで使用するウォレットを特定する方法
Oracle Databaseクライアントは、これらの場所を指定の順序で検索して、ウォレットを特定します:
- 接続文字列の
WALLET_LOCATION
パラメータによって定義された場所 sqlnet.ora
ファイルのWALLET_LOCATION
パラメータによって定義された場所$TNS_ADMIN
環境変数によって定義された場所- デフォルトのウォレットの場所:
- Linux:
/etc/ORACLE/WALLETS/user_name
- Windows:
C:\Users\user_name\ORACLE\WALLETS
- Linux:
- システム証明書ストア
一方向TLS認証が必要な場合、Oracle Databaseクライアントは、システム証明書ストアに格納されている信頼できるCA証明書を使用できます。クライアントが接続でクライアント認証に対応する必要がある場合は、必要とされる信頼できるCA証明書とともに独自の証明書を含むウォレットを設定する必要があります。
デフォルトの証明書ストアの場所はプラットフォームによって異なります。現在、Oracle Databaseでは、Microsoft WindowsおよびLinuxでこの方法をネイティブにサポートしています。
Windowsの場合は、Microsoft Windows用のMicrosoft証明書ストアにあります。
Linuxの場合、その場所は次のとおりです。
- RHEL/Oracle Linux:
/etc/pki/tls/cert.pem
- Debian/Ubuntu/Gentoo:
/etc/ssl/certs/ca-certificates.crt
- Fedora/RHEL:
/etc/pki/tls/certs/ca-bundle.crt
- OpenSUSE:
/etc/ssl/ca-bundle.pem
- OpenELEC:
/etc/pki/tls/cacert.pem
- CentOS/RHEL7:
/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
- Alpine Linux:
/etc/ssl/cert.pem
- RHEL/Oracle Linux:
ノート:
証明書ストアのデフォルトの場所は変更できません。親トピック: Oracleウォレットの場所
21.3.4 弱いDN一致の有効化
SSL_ALLOW_WEAK_DN_MATCH
パラメータ制御は、DN一致の動作を以前のデータベース・バージョンに戻します。
Oracle Database 23ai以降、SSL_SERVER_DN_MATCH
パラメータの動作が変更されました。
識別名(DN)によるサーバー側の証明書の検証が、リスナー証明書とデータベース・サーバー証明書の両方がチェックされるように変更されました。以前のOracle Databaseリリースでは、データベース・サーバー証明書のみがチェックされていました。本番ではほとんどのケースで、リスナーとデータベースで同じ証明書が使用されます。異なる証明書が使用されている場合、DN一致では、SANまたはホスト名証明書情報での部分DN一致を可能にするために新しい証明書が必要になることがあります。リスナー証明書の確認に加えて、部分DN一致を使用する際にはSERVICE_NAME
パラメータが無視されて、ホスト名接続文字列パラメータのみが証明書共通名(CN)およびサブジェクト代替名(SAN)フィールドに対してチェックされます。以前のリリースでの動作(ホスト名に加えてサービス名を使用し、データベース・サーバー証明書のみをチェックする)に戻すには、新しいパラメータSSL_ALLOW_WEAK_DN_MATCH=TRUE
を設定します。デフォルトはFALSE
です。
SSL_ALLOW_WEAK_DN_MATCH
は次のように設定できます。
TRUE
は、SSL_SERVER_DN_MATCH
でデータベース・サーバーの証明書をチェックし(ただし、リスナーはチェックしません)、サービス名を部分DN一致に使用できるようにします。クライアント側での検索順序は次のとおりです。最初に、クライアントsqlnet.oraまたは接続文字列ホスト名の値が証明書CNと比較され、次にサブジェクト代替名(SAN)フィールドの名前のリストが比較されます。次に、クライアントのsqlnet.oraまたは接続文字列のservice_name値が、CNおよびSANの名前のリストと比較されます。FALSE
(デフォルト)は、SSL_SERVER_DN_MATCH
でサービス名一致をチェックできないようにします。かわりに、クライアント側での一致は、証明書DNでのHOST
値の検索に基づき、それが使用できない場合はサブジェクト代替名(SAN)フィールドで行います(ただし、サービス名は使用できません)。DNチェックは、リスナーおよびサーバー証明書で実行されます。
以前に部分DN一致にサービス名を使用した場合は、新しい証明書を取得するか、SSL_ALLOW_WEAK_DN_MATCH
をTRUE
に設定してリリース23aiより前の動作に戻す必要があります。ほとんどの場合、データベース・サーバーとリスナーの両方に同じ証明書を使用していますが、そうでない場合は、次のいずれかを実行する必要があります。
- 新しい証明書を取得します(自己署名証明書には
orapki wallet add
コマンドを使用します)。 - DN一致方針を変更または削除します。
SSL_SERVER_DN_MATCH
を古い動作に戻すには、SSL_ALLOW_WEAK_DN_MATCH
パラメータをTRUE
に設定します。
SSL_ALLOW_WEAK_DN_MATCH
をTRUE
に設定する際は、次の点に注意してください。
- クライアントが完全DN一致(
SSL_SERVER_MATCH=TRUE
、SSL_SERVER_CERT_DN="certificate_DN"
)を実行する場合、データベース・サーバーの証明書DNのみがSSL_SERVER_CERT_DN
値と一致する必要があります。 - クライアントが部分DN一致(
SSL_SERVER_MATCH=TRUE
、SSL_SERVER_CERT_DN
が設定されていない)を実行する場合、Oracle Databaseは接続文字列パラメータHOST
をデータベース・サーバー証明書DNの共通名(CN)および証明書のサブジェクト代替名フィールド(SAN)と比較します。部分一致がない場合、Oracle Databaseは引き続き、CNでSERVICE_NAME
パラメータをチェックします。
親トピック: 拡張構成とオプション構成
21.3.5 秘密キー/証明書の選択
証明書に使用するOracleウォレットまたはシステム証明書ストアのいずれかに、複数の秘密キー/証明書ペアを格納できます。これは、Autonomous Databaseなど、異なるデータベースがmTLSの異なるクライアント資格証明を割り当てる場合に必要になることがあります。
Windows MCSおよびOracleウォレットで使用する秘密キー/証明書のみを指定できます。
データベース接続に使用する正しい秘密キー/証明書を指定する必要があります。Windowsでクライアント認証用の証明書選択パラメータを設定すると、MSCAPI証明書の選択ボックスが表示されなくなり、一致する証明書がTransport Layer Securityに自動的に使用されます。
クライアントはMCSまたはウォレットから特定の秘密キー/証明書を選択する必要がある可能性が高くなりますが、ウォレットに複数の証明書がある場合、サーバーおよびリスナーも使用する特定の証明書を選択する必要があります。
- SSL_CERTIFICATE_ALIASパラメータの設定
SSL_CERTIFICATE_ALIAS
パラメータを使用して、クライアント証明書の別名を指定できます。 - SSL_CERTIFICATE_THUMBPRINTパラメータの設定
SSL_CERTIFICATE_THUMBPRINT
パラメータを使用して、クライアント証明書のサムプリントを指定できます。 - SSL_EXTENDED_KEY_USAGEパラメータの設定
SSL_EXTENDED_KEY_USAGE
パラメータを使用して、クライアント証明書の拡張キーの使用を指定できます。
親トピック: 拡張構成とオプション構成
21.3.5.1 SSL_CERTIFICATE_ALIASパラメータの設定
SSL_CERTIFICATE_ALIAS
パラメータを使用して、クライアント証明書の別名を指定できます。
-
別名値を取得するには、次の
orapki
コマンドを実行します:orapki wallet display -wallet wallet_directory -pwd wallet_password -complete
出力は次のようになりますAlias
フィールドを参照してください。User Certificates: Alias: sslClient Subject: CN=ssl ClientIssuer: CN=sslRoot,C=US Not Before: Thu Jul 18 22:29:17 UTC 2024 Not After: Sun Jul 16 22:29:17 UTC 2034 Serial Number: 01 Key Length: 2048 MD5 digest: 06:DD:79:AF:E6:D6:70:CE:C3:98:DE:8C:D7:FC:7E:C2 SHA-256 digest: 09:B2:EC:FE:A1:B8:C3:F3:F5:A7:DC:C6:00:26:86:BE:39:54:16:93:B6:A8:42:CC:69:24:0F:B5:59:43:3F:AA SHA-1 digest: 51:25:6F:45:F8:64:E5:CB:9E:56:D2:F2:0C:5C:A6:D5:61:DA:DB:FE
SSL_CERTIFICATE_ALIAS
パラメータを使用して、Alias
値を設定します。たとえば、
tnsnames.ora
の場合:net_service_name= (DESCRIPTION= (ADDRESS=(PROTOCOL=tcps)(HOST=sales-svr)(PORT=1522)) (SECURITY=(SSL_CERTIFICATE_ALIAS=sslClient)) )
この例では、
sqlnet.ora
ファイルでSSL_CERTIFICATE_ALIAS
を設定する方法を示します:SSL_CERTIFICATE_ALIAS=sslClient
親トピック: 秘密キー/証明書の選択
21.3.5.2 SSL_CERTIFICATE_THUMBPRINTパラメータの設定
SSL_CERTIFICATE_THUMBPRINT
を使用して、クライアント証明書のサムプリントを指定できます。
algorithm:hash
形式)です
-
サムプリント値を取得するには、次の
orapki
コマンドを実行します:orapki wallet display -wallet wallet_directory -pwd wallet_password -complete
出力は次のようになりますサムプリント値については、SHA-1 digest
またはSHA-256 digest
フィールドを参照してください。User Certificates: Alias: sslClient Subject: CN=ssl ClientIssuer: CN=sslRoot,C=US Not Before: Thu Jul 18 22:29:17 UTC 2024 Not After: Sun Jul 16 22:29:17 UTC 2034 Serial Number: 01 Key Length: 2048 MD5 digest: 06:DD:79:AF:E6:D6:70:CE:C3:98:DE:8C:D7:FC:7E:C2 SHA-256 digest: 09:B2:EC:FE:A1:B8:C3:F3:F5:A7:DC:C6:00:26:86:BE:39:54:16:93:B6:A8:42:CC:69:24:0F:B5:59:43:3F:AA SHA-1 digest: 51:25:6F:45:F8:64:E5:CB:9E:56:D2:F2:0C:5C:A6:D5:61:DA:DB:FE
SSL_CERTIFICATE_THUMBPRINT
パラメータを使用してこの値を設定します。次の例は、これをtnsnames.ora
ファイルで設定する方法を示しています。たとえば、
tnsname.ora
ファイルでは次のようになります:net_service_name= (DESCRIPTION= (ADDRESS=(PROTOCOL=tcps)(HOST=sales-svr)(PORT=1522)) (SECURITY=(SSL_CERTIFICATE_THUMBPRINT=SHA1:1B:11:01:5A:B1:2C:20:B2:12:34:3E:04:7B:83:47:DE:70:2E:4E:11)) )
この例では、
sqlnet.ora
ファイルでSSL_CERTIFICATE_THUMBPRINT
を設定する方法を示します:SSL_CERTIFICATE_THUMBPRINT=SHA256:B38A5B1A036383922B5DE15361EE03940A56B456417E4124419B88EBC61E1123
親トピック: 秘密キー/証明書の選択
21.3.5.3 SSL_EXTENDED_KEY_USAGEパラメータの設定
SSL_EXTENDED_KEY_USAGE
パラメータを使用して、クライアント証明書の拡張キーの使用を指定できます。
SQLNET.SSL_EXTENDED_KEY_USAGE
パラメータを設定する必要があります。
-
たとえば、
sqlnet.ora
ファイルでは次のようになります:SSL_EXTENDED_KEY_USAGE = "client authentication"
orapki
を使用して証明書から確認できます:orapki cert display -cert <certificate> -complete
親トピック: 秘密キー/証明書の選択
21.3.6 Transport Layer Security暗号化と認証方式の併用
データベース・ユーザーの名前およびパスワード、RADIUS、Kerberos、PKI証明書、MS-EI、OCI IAMなど、すべての認証メカニズムとTLSを同時に使用するようにOracle Databaseを構成できます。
アーキテクチャ: Oracle DatabaseとTransport Layer Security
Transport Layer SecurityアーキテクチャのOracle Databaseの実装を示す認証アダプタを使用したOracle Net Servicesの図では、Oracle DatabaseがTLSの上位のセッション・レイヤーで動作し、トランスポート・レイヤーでTCP/IPを使用していることを示しています。セッション・レイヤーは、プレゼンテーション・レイヤー・エンティティが必要とするサービスを提供するネットワーク・レイヤーであり、プレゼンテーション・レイヤー・エンティティがダイアログの編成と同期およびデータ交換の管理を行えるようにします。このレイヤーは、クライアントとサーバー間でネットワーク・セッションを確立、管理および終了する。トランスポート・レイヤーは、データ・フロー制御とエラー・リカバリ方式を通じてエンドツーエンドの信頼性を維持するネットワーキング・レイヤーです。
このように機能が分離されているため、TLSを他のサポートされているプロトコルと同時に利用できます。
Transport Layer Securityと他の認証方式の併用
Transport Layer Securityは、Oracle Databaseでサポートされているその他の認証方式との併用が可能です。
**INTERNAL XREF ERROR**に、Transport Layer Securityが別の認証方式と併用されている構成を示します。
この例では、クライアントとサーバー間の暗号化されたネットワーク接続を確立するためにTransport Layer Securityが使用され、データベースへのクライアントの認証に別の認証方式が使用されています。このプロセスは、次のとおりです。
-
クライアントがOracleデータベース・サーバーに接続しようとします。
-
Transport Layer Securityによってハンドシェイクが実行され、その間にサーバーがクライアントに対して自己認証を行い、クライアントとサーバーの両方が使用する暗号スイートを設定します。
-
Transport Layer Securityハンドシェイクが正常に完了すると、ユーザーはデータベースにアクセスしようとします。
-
Oracleデータベース・サーバーは、TLS以外の認証方法を使用する認証サーバーでユーザーを認証します。たとえば、パスワード、Kerberos、RADIUS、クラウド・アイデンティティ・トークン(Oracle Cloud Infrastructure (OCI) Identity and Access Management (IAM)、Microsoft Azure AD)などの認証方法です。
-
その認証方法による検証が完了すると、Oracleデータベース・サーバーによってアクセス権と認可がユーザーに付与され、ユーザーはTLSを使用してデータベースに安全にアクセスできるようになります。
親トピック: 拡張構成とオプション構成
21.3.7 TLSプロトコルおよびTLS暗号スイートの指定
Oracle Database 23aiでは、TLSプロトコル・バージョン1.2および1.3、およびそれに関連付けられたTransport Layer Security (TLS)の暗号スイートがサポートされています。
Oracleには、特定のプロトコル・バージョンおよび暗号スイートを構成するための構成パラメータSSL_VERSION
およびSSL_CIPHER_SUITE
があります。ただし、Oracleでは、必要でないかぎりこれらのパラメータを指定しないことをお薦めします。これらの値を省略すると、(使用可能な最上位バージョンが選択されていることが保証される)最強の共通TLSバージョンおよび関連する暗号スイートの自動検出が容易になります。Oracle Databaseでは、TLS_AES_256_GCM_SHA384
暗号スイートがデフォルトとして使用されます。
- TLSプロトコル・バージョンの構成
SSL_VERSION
パラメータとTLS_DISABLE_VERSION
パラメータは、指定されたコンポーネントのエンド・ポイントで強制されるTLSのプロトコル・バージョンを定義します。 - TLS暗号スイートの構成
暗号スイートは、ネットワーク・エンティティ間のメッセージ交換に使用される認証、暗号化およびデータ整合性アルゴリズムのセットです。 - 以前のアルゴリズムからの証明書の許可
ALLOWED_WEAK_CERT_ALGORITHMS
sqlnet.ora
またはlistener.ora
パラメータを設定することで、以前の非推奨(および脆弱な)アルゴリズムに関連付けられた証明書を使用できます。
親トピック: 拡張構成とオプション構成
21.3.7.1 TLSプロトコル・バージョンの構成
SSL_VERSION
パラメータとTLS_DISABLE_VERSION
パラメータは、指定されたコンポーネントのエンド・ポイントで強制されるTLSのプロトコル・バージョンを定義します。
SSL_VERSION
およびTLS_DISABLE_VERSION
は、データベース・サーバー、リスナー、クライアントまたはこれらのコンポーネントの組合せで指定できます。TLSプロトコル・バージョンがこれらの場所の1つ以上で指定されている場合は、すべてのコンポーネントで少なくとも1つのバージョンが共通している必要があります。そうでない場合、接続は拒否されます。また、別のコンポーネントでサポートされていないTLSプロトコル・バージョンが指定されている場合、接続リクエストも拒否されます。
SSL_VERSION
パラメータとTLS_DISABLE_VERSION
パラメータは、クライアントまたはサーバーのsqlnet.ora
ファイルまたはlistener.ora
ファイルに設定できます。
SSL_VERSION
パラメータ
サーバーのsqlnet.ora
ファイルで、SSL_VERSION
パラメータを設定して、サーバーでサポートされているTLSバージョンを指定します。
undetermined
(デフォルト)、TLSv1.2
およびTLSv1.3
です。複数のエントリはカンマで区切ります。次に例を示します:SSL_VERSION=(TLSv1.2,TLSv1.3)
+
を付加して、最小バージョンを指定します。次に例を示します:SSL_VERSION=TLSv1.2+
TLS1.2以降を許可します。SSL_VERSION
およびTLS_DISABLE_VERSION
が設定されていないか、SSL_VERSION
がundetermined
に設定されている場合、サポートされているすべてのTLSバージョンが有効になります。
ヒント:
Oracleでは、サーバーとクライアント間で最高バージョンが自動的に検出されるように、これらのパラメータを指定しないことをお薦めします。TLSv1.3 を明示的に強制する環境では、次のようにプロトコル・バージョンを指定できます:
SSL_VERSION = TLSv1.3
TLS_DISABLE_VERSION
パラメータ
サーバーのsqlnet.ora
ファイルで、TLS_DISABLE_VERSION
パラメータを設定して、サーバーで許可されないTLSバージョンを指定します。
TLSv1.2
およびTLSv1.3
です。複数のエントリはカンマで区切ります。次に例を示します:TLS_DISABLE_VERSION
=(TLSv1.2,TLSv1.3)
TLS1.2およびTLS1.3は許可されません。親トピック: TLSプロトコルおよびTLS暗号スイートの指定
21.3.7.2 TLS暗号スイートの構成
暗号スイートは、ネットワーク・エンティティ間のメッセージ交換に使用される認証、暗号化およびデータ整合性アルゴリズムのセットです。
Transport Layer Securityハンドシェイク時に、2つのエンティティがネゴシエーションし、ネットワークを介してメッセージを相互に送信するときに使用する暗号スイートを選択します。
Oracle Databaseをインストールすると、Transport Layer Security暗号スイートがデフォルトで設定され、最も強力な暗号スイートからリスト順にネゴシエートされます。デフォルトの順序は、SSL_CIPHER_SUITES
パラメータを設定して上書きできます。SSL_CIPHER_SUITES
パラメータの設定は必ずカッコで囲んでください(例: SSL_CIPHER_SUITES=(TLS_AES_256_GCM_SHA384)
)。そうしないと、暗号スイート設定が正しく解析されません。
暗号スイートの優先順位を設定できます。クライアントが使用する暗号スイートを決定するためにサーバーとネゴシエートする場合、設定されている優先順位に従います。暗号スイートの優先順位を設定する場合は、次の点を考慮してください。
-
互換性: 正常に接続するには、互換性のある暗号スイートを使用するようにサーバーとクライアントを構成する必要があります。
-
暗号の優先順位と強度: 可能なかぎり最高レベルのセキュリティを確保するために、暗号スイートを最強のものから最弱のものへと優先順位を付けます。
-
使用するセキュリティのレベル: これを使用して、暗号スイートの弱い、古いクライアントがデータベースに接続しないようにします
- 強力なTLS暗号スイート
Oracleは、デフォルトで強力なTransport Layer Security (TLS)暗号スイートを提供します。ただし、Oracle Database 23ai以降では、TLSv1.2以上のみをサポートしています。次の表に、Oracleでサポートされているデフォルトの暗号を示します。 - 非推奨のTLS暗号スイート
レガシー製品に対応するために、Oracleでは、安全性が低いと考えられるTLS暗号スイートを提供しています。これらの暗号は、デフォルトで非推奨および無効になっています。次の表に、Oracleでサポートされている非推奨の暗号を示します。 - 脆弱な暗号スイートの有効化
SSL_ENABLE_WEAK_CIPHERS
パラメータを設定して、非推奨の暗号スイートを有効にできます。弱い暗号スイートで接続を確立するには、3つのコンポーネント(クライアント、リスナーおよびサーバー)すべてで弱い暗号スイートを有効にする必要があります。
親トピック: TLSプロトコルおよびTLS暗号スイートの指定
21.3.7.2.1 強力なTLS暗号スイート
Oracleは、デフォルトで強力なTransport Layer Security (TLS)暗号スイートを提供します。ただし、Oracle Database 23ai以降では、TLSv1.2以上のみをサポートしています。次の表に、Oracleでサポートされているデフォルトの暗号を示します。
表21-6 承認済TLS暗号スイート
暗号スイート | 認証 | 暗号化 | データ整合性 | TLSの互換性 |
---|---|---|---|---|
TLS_AES_128_CCM_SHA256 | ECDHE_RSA, DHE_RSA, ECDHE_ECDSA | AES 128 CCM | SHA256 (SHA 2) | TLS 1.3 |
TLS_AES_128_GCM_SHA256 | ECDHE_RSA, DHE_RSA, ECDHE_ECDSA | AES 128 GCM | SHA256 (SHA-2) | TLS 1.3 |
TLS_AES_256_GCM_SHA384 | ECDHE_RSA, DHE_RSA, ECDHE_ECDSA | AES 256 GCM | SHA384 (SHA-2) | TLS 1.3 |
TLS_CHACHA20_POLY1305_SHA256 (FIPS以外のみ) | ECDHE_RSA, DHE_RSA, ECDHE_ECDSA | CHACHA20 POLY1305 | SHA256 (SHA-2) | TLS 1.3 |
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 | DHE_RSA | AES 128 GCM | SHA256 (SHA-2) | TLS 1.2 |
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 | DHE_RSA | AES 256 GCM | SHA384 (SHA-2) | TLS 1.2 |
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 | ECDHE_ECDSA | AES 128 GCM | SHA256 (SHA-2) | TLS 1.2 |
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 | ECDHE_ECDSA | AES 256 GCM | SHA384 (SHA-2) | TLS 1.2 |
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 | ECDHE_RSA | AES 128 GCM | SHA256 (SHA-2) | TLS 1.2 |
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 | ECDHE_RSA | AES 256 GCM | SHA384 (SHA-2) | TLS 1.2 |
親トピック: TLS暗号スイートの構成
21.3.7.2.2 非推奨のTLS暗号スイート
Oracleではレガシー製品に対応するために、安全性が低いと考えられるTLS暗号スイートを提供しています。これらの暗号は、デフォルトで非推奨および無効になっています。次の表に、Oracleでサポートされている非推奨の暗号を示します。
表21-7 非推奨のTLS暗号スイート
暗号スイート | 認証 | 暗号化 | データ整合性 | TLSの互換性 |
---|---|---|---|---|
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 |
DHE_RSA |
AES 128 CBC |
SHA256 (SHA-2) |
TLS 1.2 |
TLS_DHE_RSA_WITH_AES_256_CBC_SHA |
DHE_RSA |
AES 256 CBC |
SHA (SHA-1) |
TLS 1.2 |
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 |
DHE_RSA |
AES 256 CBC |
SHA256 (SHA-2) |
TLS 1.2 |
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA |
ECDHE_ECDSA |
AES 128 CBC |
SHA (SHA-1) |
TLS 1.2 |
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA |
ECDHE_ECDSA |
AES 128 CBC |
SHA (SHA-1) |
TLS 1.2 |
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 |
ECDHE_ECDSA |
AES 128 CBC |
SHA256 (SHA-2) |
TLS 1.2 |
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA |
ECDHE_ECDSA |
AES 256 CBC |
SHA (SHA-1) |
TLS 1.2 |
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 |
ECDHE_ECDSA |
AES 256 CBC |
SHA384 (SHA-2) |
TLS 1.2 |
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA |
ECDHE_RSA |
AES 128 CBC |
SHA (SHA-1) |
TLS 1.2 |
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 |
ECDHE_RSA |
AES 128 CBC |
SHA256 (SHA-2) |
TLS 1.2 |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA |
ECDHE_RSA |
AES 256 CBC |
SHA (SHA-1) |
TLS 1.2 |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 |
ECDHE_RSA |
AES 256 CBC |
SHA384 (SHA-2) |
TLS 1.2 |
TLS_RSA_WITH_AES_128_CBC_SHA |
RSA |
AES 128 CBC |
SHA (SHA-1) |
TLS 1.2 |
TLS_RSA_WITH_AES_128_CBC_SHA256 |
RSA |
AES 128 CBC |
SHA256 (SHA-2) |
TLS 1.2 |
TLS_RSA_WITH_AES_128_GCM_SHA256 |
RSA |
AES 128 GCM |
SHA256 (SHA-2) |
TLS 1.2 |
TLS_RSA_WITH_AES_256_CBC_SHA |
RSA |
AES 256 CBC |
SHA (SHA-1) |
TLS 1.2 |
TLS_RSA_WITH_AES_256_CBC_SHA256 |
RSA |
AES 256 CBC |
SHA256 (SHA-2) |
TLS 1.2 |
TLS_RSA_WITH_AES_256_GCM_SHA384 |
RSA |
AES 256 GCM |
SHA384 (SHA-2) |
TLS 1.2 |
親トピック: TLS暗号スイートの構成
21.3.7.2.3 脆弱な暗号スイートの有効化
SSL_ENABLE_WEAK_CIPHERS
パラメータを設定することにより、非推奨の暗号スイートを有効にできます。弱い暗号スイートで接続を確立するには、3つのコンポーネント(クライアント、リスナーおよびサーバー)すべてで弱い暗号スイートを有効にする必要があります。
この指定では、value
は次のいずれかになります:
FALSE
(またはOFF
、NO
、0
)は、脆弱な暗号を無効化します。この設定はデフォルトです。脆弱な暗号を使用しようとすると、現在の場所に応じて次のエラーが表示されます。- データベース・サーバー:
ORA-28860: 致命的なSSLエラーが発生しました
- データベース・クライアント:
ORA-29039: 一致するCipher Suiteがありません。
- データベース・サーバー:
TRUE
(またはON
、YES
、1
)は、脆弱な暗号を有効にします。
たとえば、非推奨の暗号スイートを有効にするには、次のようにします。
SSL_ENABLE_WEAK_CIPHERS=TRUE
親トピック: TLS暗号スイートの構成
21.3.7.3 以前のアルゴリズムからの証明書の許可
ALLOWED_WEAK_CERT_ALGORITHMS
sqlnet.ora
またはlistener.ora
パラメータを設定することで、以前の非推奨(および脆弱な)アルゴリズムに関連付けられた証明書を使用できます。
ALLOWED_WEAK_CERT_ALGORITHMS
を使用すると、以前のアルゴリズムを明示的に有効にできます。ただし、以前のアルゴリズムは新しいアルゴリズムより安全ではないことに注意してください。このパラメータは、Oracle Databaseリリース23ai以降は非推奨であるALLOW_MD5_CERTS
およびALLOW_SHA1_CERTS
パラメータに置き換ります。
親トピック: TLSプロトコルおよびTLS暗号スイートの指定
21.3.8 証明書失効リストによる証明書の検証
オラクル社では、証明書失効リストを使用して証明書を検証できるツールを提供しています。
- 証明書失効リストによる証明書検証について
指定の証明書を指定のコンテキストで使用できるかどうかを判定するプロセスは、証明書の検証と呼ばれます。 - 使用するCRLの選択方法
使用するトラスト・ポイントすべてについてCRLが必要です。 - CRLチェックの動作の仕組み
Oracle Databaseでは証明書の失効状態をCRLに照らして確認します。 - 証明書失効リストによる証明書検証の構成
sqlnet.ora
ファイルを編集して、証明書失効リストによる証明書検証を構成できます。 - 証明書失効リストの管理
証明書失効リストの管理では、証明書失効チェックを有効にする前に、CRLが正しい書式であることを確認する必要があります。 - CRL証明書検証のトラブルシューティング
CRLに対して証明書を検証するかどうかを判断するには、Oracle Netトレースを有効にできます。 - 証明書検証に関連するOracle Netトレース・ファイルのエラー・メッセージ
証明書検証に関連するトレース・メッセージが生成されます。
親トピック: 拡張構成とオプション構成
21.3.8.1 証明書失効リストによる証明書検証について
指定の証明書を指定のコンテキストで使用できるかどうかを判定するプロセスは、証明書の検証と呼ばれます。
証明書の検証には、次が該当するかどうかの判定が含まれます。
-
信頼できる認証局(CA)にデジタル署名された証明書があるかどうか。
-
証明書のデジタル署名が、証明書自体の別個に計算されたハッシュ値および証明書の署名者の(CAの)公開キーに対応しているかどうか。
-
証明書が期限切れになっていないかどうか。
-
証明書が失効していないかどうか。
Transport Layer Securityネットワーク・レイヤーは、自動的に最初の3つの検証チェックを実行しますが、証明書が失効していないことを確認するには、証明書失効リスト(CRL)のチェックを構成する必要があります。CRLは、失効した証明書のリストを含む署名付きデータ構造体です。これは通常、元の証明書を発行したエンティティと同じエンティティによって発行され署名されます。
親トピック: 証明書失効リストによる証明書の検証
21.3.8.2 使用するCRLの選択方法
使用するトラスト・ポイントすべてについてCRLが必要です。
トラスト・ポイントは、一定の信頼レベルで資格を与えられたサード・パーティ・アイデンティティからの信頼できる証明書です。
通常、信頼する認証局はトラスト・ポイントと呼ばれます。
親トピック: 証明書失効リストによる証明書の検証
21.3.8.3 CRLチェックの動作の仕組み
Oracle Databaseでは証明書の失効状態をCRLに照らして確認します。
CRLはファイル・システム・ディレクトリ(Oracle Internet Directory)に存在するか、または証明書のCRL配布ポイント(CRL DP)拡張で指定された場所からダウンロードして入手します。
通常、CRL定義は数日間有効です。CRLをローカル・ファイル・システムまたはディレクトリに格納する場合、CRLを定期的に更新する必要があります。 CRL配布ポイント(CRL DP)を使用する場合、証明書が使用されるたびにCRLがダウンロードされるため、CRLを定期的に更新する必要はありません。
サーバーは、次の場所で(ここに示されている順番で)CRLを検索します。システムは、証明書のCAのDNと一致するCRLを検出すると、検索を停止します。
-
ローカル・ファイル・システム
サーバーは、まず
sqlnet.ora
ファイルのSSL_CRL_FILE
パラメータを確認し、それからSSL_CRL_PATH
パラメータを確認します。サーバーは、これらの2つのパラメータが指定されていない場合、ウォレット・ロケーションで任意のCRLをチェックします。ノート:
CRLをローカル・ファイル・システムに格納する場合、orapki
ユーティリティを使用してCRLを定期的に更新する必要があります(証明書検証用ハッシュ値によるCRLの名前変更など)。 -
Oracle Internet Directory
サーバーは、ローカル・ファイル・システムでCRLを検出できず、
ldap.ora
ファイルでディレクトリ接続情報が構成されている場合、このディレクトリを検索します。これは、CAの識別名(DN)およびCRLサブツリーのDNを使用してCRLサブツリーを検索します。ディレクトリでCRLを検索するためには、サーバーに、適切に構成された
ldap.ora
ファイルが存在している必要があります。Oracle Internet Directoryのドメイン・ネーム・システム(DNS)検出機能は使用できません。また、CRLをディレクトリに格納する場合、orapki
ユーティリティを使用してCRLを定期的に更新する必要があることに注意してください。 -
CRL DP
CAが、証明書が発行されたときのCRL DP X.509、バージョン3、証明書拡張子内の位置を指定すると、その証明書用の失効情報を含む適切なCRLがダウンロードされます。現在、Oracle Databaseは、LDAPを介したCRLのダウンロードをサポートしています。
次のことに注意してください。
-
パフォーマンス上の理由から、ユーザー証明書のみがチェックされます。
-
CRLをローカル・ファイル・システムではなくディレクトリに格納することをお薦めします。
-
21.3.8.4 証明書失効リストによる証明書検証の構成
sqlnet.ora
ファイルを編集して、証明書失効リストによる証明書検証を構成できます。
- 証明書失効リストによる証明書検証の構成について
証明書失効ステータス・チェックを有効にするには、sqlnet.ora
ファイルでSSL_CERT_REVOCATION
パラメータをREQUIRED
またはREQUESTED
に設定する必要があります。 - クライアントまたはサーバー用の証明書失効ステータス・チェックの有効化
クライアントまたはサーバー用の証明書失効ステータス・チェックを有効にできます。 - 証明書失効ステータス・チェックの無効化
証明書失効ステータス・チェックを無効にできます。
親トピック: 証明書失効リストによる証明書の検証
21.3.8.4.1 証明書失効リストによる証明書検証の構成について
証明書失効ステータス・チェックを有効にするには、sqlnet.ora
ファイルでSSL_CERT_REVOCATION
パラメータをREQUIRED
またはREQUESTED
に設定する必要があります。
デフォルトでは、このパラメータはNONE
に設定され、証明書失効ステータス・チェックはオフになっています。
ノート:
CRLをローカル・ファイル・システムまたはOracle Internet Directoryに格納する場合は、コマンドライン・ユーティリティorapki
を使用して、ファイル・システム内のCRLの名前を変更するか、CRLをディレクトリにアップロードします。
関連トピック
親トピック: 証明書失効リストによる証明書検証の構成
21.3.8.4.2 クライアントまたはサーバー用の証明書失効ステータス・チェックの有効化
クライアントまたはサーバー用の証明書失効ステータス・チェックを有効にできます。
関連トピック
親トピック: 証明書失効リストによる証明書検証の構成
21.3.8.5 証明書失効リストの管理
証明書失効リストの管理では、証明書失効チェックを有効にする前に、CRLが正しい書式であることを確認する必要があります。
- 証明書失効リストの管理について
Oracle Databaseには、証明書失効リスト(CRL)を管理するために使用できるコマンドライン・ユーティリティorapki
が用意されています。 - CRLを管理するコマンドのorapkiヘルプの表示
CRLの管理に使用可能なorapki
コマンドをすべて表示できます。 - 証明書検証用ハッシュ値によるCRLの名前変更
システムは、証明書を検証するとき、証明書を作成したCAが発行するCRLを見つける必要があります。 - Oracle Internet DirectoryへのCRLのアップロード
ディレクトリでCRLを発行すると、企業全体でのCRL検証が可能になり、個々のアプリケーションに固有のCRLを構成する必要がなくなります。 - Oracle Internet Directoryに格納されているCRLの一覧表示
orapki
を使用してディレクトリに格納されているすべてのCRLのリストを表示できます。特定のCRLを検出してローカル・コンピュータで表示またはダウンロードする際に、このリストを参照すると便利です。 - Oracle Internet DirectoryでのCRLの表示
Oracle Internet Directory CRLは要約された形式で表示できることに加え、CRLの失効した証明書のリストを要求することもできます。 - Oracle Internet DirectoryからのCRLの削除
orapki
を使用してディレクトリからCRLを削除するユーザーは、ディレクトリ・グループCRLAdmins
のメンバーである必要があります。
親トピック: 証明書失効リストによる証明書の検証
21.3.8.5.1 証明書失効リストの管理について
Oracle Databaseには、証明書失効リスト(CRL)の管理を実行するために使用できるコマンドライン・ユーティリティorapki
があります。
証明書失効ステータス・チェックを有効にするには、まず、使用するCAから受信したCRLがコンピュータで使用できるフォームである(ハッシュ値で名前変更されている)こと、またはコンピュータで使用できる場所にある(ディレクトリにアップロードされている)ことを確認してください。
LDAPコマンド行ツールを使用して、Oracle Internet DirectoryでCRLを管理することもできます。
ノート:
CRLは、正常な検証を行うために、(期限切れになる前に)定期的に更新する必要があります。このタスクは、スクリプトでorapki
コマンドを使用して自動化できます。
親トピック: 証明書失効リストの管理
21.3.8.5.2 CRLを管理するコマンドのorapkiヘルプの表示
CRLの管理に使用可能なorapki
コマンドをすべて表示できます。
-
CRLの管理に使用可能な
orapki
コマンドとそのオプションをすべての表示するには、コマンドラインに次のように入力します。orapki crl help
ノート:
-summary
、-complete
または-wallet
コマンド・オプションの使用は、常にオプションです。これらのコマンド・オプションが指定されていなくても、コマンドは実行されます。
親トピック: 証明書失効リストの管理
21.3.8.5.3 証明書検証用ハッシュ値によるCRLの名前変更
システムは、証明書を検証するとき、証明書を作成したCAが発行するCRLを見つける必要があります。
システムは、証明書の発行者名とCRLにある発行者名を照合して適切なCRLを検出します。
Oracle Net Managerの「証明書失効リスト・パス」フィールドにCRL格納場所を指定する(sqlnet.ora
ファイルのSSL_CRL_PATH
パラメータを設定する)場合、orapki
ユーティリティを使用して発行者名を表すハッシュ値を使用してCRLを名前変更します。ハッシュ値を作成すると、サーバーでCRLをロードできます。
UNIXオペレーティング・システムでは、orapki
によってCRLへのシンボリック・リンクが作成されます。Windowsオペレーティング・システムでは、CRLファイルのコピーが作成されます。どちらの場合も、orapki
によって作成されたシンボリック・リンクまたはコピーは、発行者名のハッシュ値を使用して名前が付けられます。その後、システムが証明書を検証するとき、同じハッシュ関数が使用されて、適切なCRLをロードできるようにリンク(またはコピー)の名前が計算されます。
-
オペレーティング・システムに応じて、次のコマンドのいずれかを入力して、ファイル・システムに格納されているCRLの名前を変更します。
-
UNIXファイル・システムに格納されているCRLの名前を変更するには:
orapki crl hash -crl crl_filename [-wallet wallet_location] -symlink crl_directory [-summary]
-
Windowsファイル・システムに格納されているCRLの名前を変更するには:
orapki crl hash -crl crl_filename [-wallet wallet_location] -copy crl_directory [-summary]
-
この指定では、crl_filename
はCRLファイルの名前、wallet_location
はCRLを発行したCAの証明書を含むウォレットの場所、crl_directory
はCRLがあるディレクトリです。
-wallet
および-summary
の使用はオプションです。-wallet
を指定すると、CRLの名前を変更する前に、ツールによってCAの証明書に対するCRLの有効性が確認されます。-summary
オプションを指定すると、ツールによってCRL発行者名が表示されます。
親トピック: 証明書失効リストの管理
21.3.8.5.4 Oracle Internet DirectoryへのCRLのアップロード
ディレクトリでCRLを発行すると、企業全体でのCRL検証が可能になり、個々のアプリケーションに固有のCRLを構成する必要がなくなります。
すべてのアプリケーションで、一元的に管理可能なディレクトリに格納されたCRLを使用できるので、CRL管理および使用の管理オーバーヘッドが大幅に減ります。orapki
を使用してディレクトリにCRLをアップロードするユーザーは、ディレクトリ・グループCRLAdmins
(cn=CRLAdmins,cn=groups,%s_OracleContextDN%
)のメンバーである必要があります。これらのCRLには企業全体でアクセスできるため、これは特権操作です。この管理ディレクトリ・グループに追加するには、ディレクトリ管理者に連絡してください。
-
CRLをディレクトリにアップロードするには:
orapki crl upload -crl crl_location -ldap hostname:ssl_port -user username [-wallet wallet_location] [-summary]
この指定では、
crl_location
はCRLがあるファイル名またはURL、hostname
およびssl_port
(認証なしのTLSポート)はディレクトリがインストールされているシステムに対するもの、username
はCRLをCRLサブツリーに追加する権限があるディレクトリ・ユーザー、wallet_location
はCRLを発行したCAの証明書を含むウォレットの場所です。
-wallet
および-summary
の使用はオプションです。-wallet
を指定すると、CRLをディレクトリにアップロードする前に、ツールによってCAの証明書に対するCRLの有効性が確認されます。-summary
オプションを指定すると、CRL発行者名、およびCRLがディレクトリに格納されているLDAPエントリがツールによって出力されます。
次の例では、orapki
ユーティリティを使用してCRLをアップロードする方法を示しています。
orapki crl upload -crl /home/user1/wallet/crldir/crl.txt -ldap host1.example.com:3533 -user cn=orcladmin
ノート:
-
orapki
ユーティリティを使用すると、この操作の実行時にディレクトリ・パスワードの入力を求めるプロンプトが表示されます。 -
Diffie-HellmanベースのTLSサーバーが実行されているディレクトリのSSLポートを指定していることを確認してください。これは、認証を実行しないTLSポートです。サーバー認証も相互認証TLSポートも、
orapki
ユーティリティではサポートされていません。
親トピック: 証明書失効リストの管理
21.3.8.5.5 Oracle Internet Directoryに格納されているCRLの一覧表示
orapki
を使用してディレクトリに格納されているすべてのCRLのリストを表示できます。特定のCRLを検出してローカル・コンピュータで表示またはダウンロードする際に、このリストを参照すると便利です。
このコマンドを使用すると、CRLを発行したCA(発行者)およびディレクトリのCRLサブツリー内の場所(DN)が表示されます。
-
Oracle Internet DirectoryでCRLを一覧表示するには:
orapki crl list -ldap hostname:ssl_port
hostname
およびssl_port
は、ディレクトリがインストールされているシステムに対するものです。ノート:
これは、前の項で説明した認証なしのディレクトリのSSLポートです。Oracle Internet DirectoryへのCRLのアップロード
親トピック: 証明書失効リストの管理
21.3.8.5.6 Oracle Internet DirectoryでのCRLの表示
Oracle Internet Directory CRLは要約された形式で表示できるほか、CRLの失効した証明書のリストを要求することもできます。
親トピック: 証明書失効リストの管理
21.3.8.5.7 Oracle Internet DirectoryからのCRLの削除
orapki
を使用してディレクトリからCRLを削除するユーザーは、ディレクトリ・グループCRLAdmins
のメンバーである必要があります。
親トピック: 証明書失効リストの管理
21.3.8.6 CRL証明書検証のトラブルシューティング
CRLに対して証明書を検証するかどうかを判断するには、Oracle Netトレースを有効にできます。
CRLを使用して失効した証明書を検証すると、Oracle Netトレース・ファイルに次のエントリが記録され、entry
とexit
の間にエラー・メッセージは記録されません。
nzcrlVCS_VerifyCRLSignature: entry nzcrlVCS_VerifyCRLSignature: exit nzcrlVCD_VerifyCRLDate: entry nzcrlVCD_VerifyCRLDate: exit nzcrlCCS_CheckCertStatus: entry nzcrlCCS_CheckCertStatus: Certificate is listed in CRL nzcrlCCS_CheckCertStatus: exit
ノート:
証明書検証に失敗した場合は、SSLハンドシェイク時にピアに「ORA-29024: 証明書の検証に失敗しました」
というメッセージが表示されます。
21.3.8.7 証明書検証に関連するOracle Netトレース・ファイルのエラー・メッセージ
証明書検証に関連するトレース・メッセージが生成されます。
これらのトレースメッセージは、Oracle Netトレース・ファイルのentry
エントリとexit
エントリの間に記録されることがあります。Oracle SSLは複数の場所でCRLを検索するため、トレースに複数のエラーが記録されることがあります。
エラーの解決方法の詳細は、次の表示される可能性があるエラー・メッセージのリストを確認できます。
- CRLの署名検証に失敗しました
-
原因: CRLの署名を検証できません。
- CRLの日付検証に失敗しました
-
原因: 現在の時刻が次の更新フィールド内の時刻より後になっています。このエラーは、CRL DPを使用している場合には表示されません。CRLは次の順番で検索されます:
-
ファイル・システム
-
Oracle Internet Directory
-
CRL DP
この検索で最初に見つかったCRLが最新であるとはかぎりません。
-
- CRLが見つかりませんでした
-
原因: 構成されている場所にCRLがありませんでした。構成で証明書検証が必須に指定されている場合、エラーORA-29024が戻されます。
- Oracle Internet Directoryのホスト名またはポート番号が設定されていません
-
原因: Oracle Internet Directoryの接続情報が設定されていません。これはリカバリ不能なエラーではありません。続いてCRL DPが検索されます。
- CRL DPからのCRLのフェッチ: CRLが見つかりません
-
原因: CRL配布ポイント(CRL DP)を使用してCRLをフェッチできませんでした。このことは、証明書にCRL DP拡張で指定された場所がないか、CRL DP拡張で指定されたURLが正しくない場合に発生します。
親トピック: 証明書失効リストによる証明書の検証
21.4 TLSおよびその他のOracle製品
Transport Layer Security (TLS)は、他のOracle Database製品を使用する場合に構成できます。
- Oracle Real Application Clusters環境でのTransport Layer Security接続
Oracle RACツールを使用してOracle Real Application Clusters (Oracle RAC)環境でTransport Layer Security (TLS)接続を構成し、Oracle Database構成ファイルを変更できます。
21.4.1 Oracle Real Application Clusters環境でのTransport Layer Security接続
Oracle RACツールを使用してOracle Database構成ファイルを変更することで、Oracle Real Application Clusters (Oracle RAC)環境でTransport Layer Security (TLS)接続を構成できます。
- ステップ1: TCPSプロトコル・エンドポイントの構成
Oracle Real Application Clusters (Oracle RAC)では、クライアントは3つのスキャン・リスナーのいずれかにアクセスし、その後、データベース・リスナーにルーティングされます。Transport Layer Security (TLS)をサポートするには、これらのリスナーすべてにTCPSプロトコル・エンドポイントが必要です。 - ステップ2: 各ノードでLOCAL_LISTENERパラメータが正しく設定されていることの確認
Oracle Agentは、各ノードでLOCAL_LISTENER
パラメータを自動的に設定しますが、正しいことを再確認する必要があります。 - ステップ3: Transport Layer Securityウォレットおよび証明書の作成
クラスタ用、およびTLS経由でクラスタに接続するクライアント用のTransport Layer Security (TLS)ウォレットおよび証明書を作成する必要があります。 - ステップ4: Oracle RACクラスタの各ノードでのウォレットの作成
クラスタ・ウォレットの作成後、Oracle Real Applications (Oracle RAC)クラスタの各ノードにコピーできます。 - ステップ5: listener.oraおよびsqlnet.oraファイルでのウォレットの場所の定義
データベース・サーバーおよびリスナーがウォレットにアクセスできるようにするには、listener.ora
およびsqlnet.ora
ファイルでウォレットの場所を定義する必要があります。 - ステップ6: データベース・インスタンスおよびリスナーの再起動
ウォレットが配置され、*.ora
ファイルが編集された状態で、データベース・サーバーおよびリスナー・プロセスを再起動して、新しい設定を取得する必要があります。 - ステップ7: クラスタ・ノード構成のテスト
クラスタ・ノード構成をテストするには、ノードの接続記述子を作成し、このノードへの接続を試行します。 - ステップ8: リモート・クライアント構成のテスト
Oracle Real Applications (Oracle RAC)クラスタ・ノードでウォレットをテストした後、リモート・クライアント構成をテストする準備ができます。
親トピック: TLSおよびその他のOracle製品
21.4.1.1 ステップ1: TCPSプロトコル・エンドポイントの構成
Oracle Real Application Clusters (Oracle RAC)では、クライアントは3つのSCANリスナーのいずれかにアクセスし、それからデータベース・リスナーにルーティングされます。Transport Layer Security (TLS)をサポートするには、これらのリスナーすべてにTCPSプロトコル・エンドポイントが必要です。
21.4.1.2 ステップ2: 各ノードでLOCAL_LISTENERパラメータが正しく設定されていることの確認
Oracle Agentは、各ノードでLOCAL_LISTENER
パラメータを自動的に設定しますが、正しいことを再確認する必要があります。
21.4.1.3 ステップ3: Transport Layer Securityウォレットおよび証明書の作成
クラスタ用、およびTLS経由でクラスタに接続するクライアント用のTransport Layer Security (TLS)ウォレットおよび証明書を作成する必要があります。
- 証明書が必要なOracle Real Application Clustersコンポーネント
Transport Layer Security (TLS)接続を構成する場合、Oracle Real Application Clusters (Oracle RAC)の特定のコンポーネントに証明書が必要です。 - Transport Layer Securityウォレットおよび証明書の作成
Transport Layer Securityウォレットおよび証明書を作成するには、最初にルートCA証明書を作成し、次にクラスタ・ウォレットおよびクライアント・ウォレットを作成する必要があります。
21.4.1.3.1 証明書が必要なOracle Real Application Clustersコンポーネント
Oracle Real Application Clusters (Oracle RAC)の特定のコンポーネントでは、Transport Layer Security (TLS)接続を構成するときに証明書が必要です。
- 各クラスタ・ノード(サーバー)およびリスナーには、ユーザー証明書およびCA証明書を含むウォレットが必要です。
- 一方向のTLSが構成されている場合、クライアントはリスナーおよびサーバーのCA証明書(ウォレットまたはシステムの証明書ストア内)のみを必要とします。
- mTLSが構成されている場合、クライアントには、ユーザー証明書とリスナーおよびサーバーのCA証明書を含むウォレットが必要です。
21.4.1.4 ステップ4: Oracle RACクラスタの各ノードでのウォレットの作成
クラスタ・ウォレットを作成した後、それをOracle Real Applications (Oracle RAC)クラスタの各ノードにコピーできます。
21.4.1.5 ステップ5: listener.oraおよびsqlnet.oraファイルへのウォレットの場所の定義
データベース・サーバーおよびリスナーがウォレットにアクセスできるようにするには、listener.ora
およびsqlnet.ora
ファイルにウォレットの場所を定義する必要があります。
21.4.1.6 ステップ6: データベース・インスタンスおよびリスナーの再起動
ウォレットを配置して*.ora
ファイルを編集した後、データベース・サーバーおよびリスナー・プロセスを再起動して新しい設定を取得する必要があります。
LOCAL_LISTENER
パラメータを設定したOracle Real Application Clusters (Oracle RAC)インスタンスも有効になります。
21.5 Transport Layer Security構成のトラブルシューティング
Oracle Database Transport Layer Securityの使用時に、一般的なエラーが発生する可能性があります。
My Oracle Supportから、TLSのクライアントおよびサーバー構成を確認してフィードバックを提供するためのユーティリティを入手できます。「DBSecChk Utility 2.0.0.5 (ドキュメントID 3066006.1)」を参照してください。
Oracle Netトレースを有効にして、エラーの原因を特定することが必要になる場合があります。トレース・パラメータを設定してOracle Netトレースを有効にする方法の詳細は、『Oracle Database Net Services管理者ガイド』のOracle Net Servicesのエラー情報のトレースに関する項を参照してください。
- ORA-28759: ファイルのオープンに失敗しました
-
原因: 指定されたファイルをオープンできませんでした。通常、このエラーはウォレットが見つからないために発生します。
- ORA-28786: 暗号化された秘密キーの復号化に失敗しました
-
原因: 暗号化された秘密キーの復号化に不正なパスワードが使用されました。このことは、多くの場合、自動ログイン・ウォレットが使用されていないために発生します。
- ORA-28858: SSLプロトコル・エラーが発生しました
-
原因: これは、2つのプロセス間のTLSハンドシェイク・ネゴシエーション中に発生する可能性がある一般的なエラーです。
- ORA-28859 SSLでネゴシエーションに失敗しました
-
原因: TLSプロトコルの一部である2つのプロセス間のネゴシエーション中にエラーが発生しました。このエラーは、両プロセスの接続で同じ暗号スイートがサポートされていない場合に発生する可能性があります。
- ORA-28862: SSL接続に失敗しました。
-
原因: このエラーは、ピアが接続をクローズしたために発生しました。
- ORA-28865: SSL接続はクローズしました。
-
原因: 基礎となるトランスポート層でエラーが発生したか、ピア・プロセスが突然停止したため、TLS接続がクローズしました。
- ORA-28868: ピア証明連鎖のチェックに失敗しました。
-
原因: ピアが証明連鎖を提示したときに、その証明連鎖のチェックに失敗しました。この失敗の原因として、いくつかの問題が考えられます。
-
連鎖内のいずれかの証明書が期限切れになっています。
-
連鎖内のいずれかの証明書の認証局がトラスト・ポイントとして認識されていません。
-
いずれかの証明書の署名を検証できません。
-
- ORA-28885: 必須のキー使用方法のある証明書が見つかりません。
-
原因: 証明書は、適切なX.509バージョン3のキー使用方法の拡張機能を使用して作成されていません。
- ORA-29019: プロトコル・バージョンが無効です
-
原因: 2つのピア間でプロトコルのバージョンが一致していません。
- ORA-29024: 証明書の検証に失敗しました
-
原因: 反対側から送信された証明書の妥当性チェックに失敗しました。このエラーは、証明書が期限切れか、失効済か、または他の理由で無効になっている場合に発生する可能性があります。
- ORA-29223: 証明連鎖を作成できませんでした
-
原因: インストールする証明書の既存のトラスト・ポイントを使用して証明書チェーンを作成できません。通常、このエラーは、ピアによって完全な連鎖が提供されず、連鎖を完了するのに適切なトラスト・ポイントがない場合に戻されます。
21.6 Transport Layer Securityバージョン1.3への移行および構成
Transport Layer Security (TLS)のバージョン1.3は、以前のバージョンのTLSと比較すると、セキュリティが強化され、TLSハンドシェイクが高速になっています。
TLSバージョン1.3は、データベース・サーバーとクライアントの両方がバージョン23aiの場合、デフォルトで23aiでサポートおよび有効化されています。
使用している環境で構成ファイルにSSL_VERSION
パラメータが指定されていない場合、TLSバージョン1.3はデフォルトで有効になります。SSL_CIPHER_SUITES
パラメータが明示的に構成されていない場合、TLS 1.3暗号スイートが自動的に選択されます。この製品は、最も強力なTLSバージョンと、そのバージョンで最も強力かつ使用可能な暗号を選択するように設計されています。
Transport Layer Security (TLS)バージョン1.3の拡張は、次のパラメータのいずれかまたは両方が指定されている場合、現在のTLS構成に影響を与える可能性があります。
SSL_VERSION
: 構成ファイルからこのパラメータを削除して、サポートされているすべてのTLSバージョンを有効にするか、指定された値に文字列TLSv1.3を含めます次に例を示します。SSL_VERSION = (TLSv1.3, TLSv1.2)
SSL_CIPHER_SUITES
: 構成ファイルからこのパラメータを削除して、サポートされているすべてのTLS暗号スイートを有効にするか、TLSバージョン1.3暗号スイートを1つ以上含めます次に例を示します。SSL_CIPHER_SUITES = (TLS_AES_256_GCM_SHA384, TLS_AES_128_GCM_SHA256, TLS_AES_128_CCM_SHA256)