25 PKI証明書による認証の構成
エンド・ユーザー認証にPKI証明書を使用するようにOracle Databaseを構成できます。
- Oracle DatabaseでのTransport Layer Securityを使用した認証
Transport Layer Securityは、暗号化およびデータ・アクセス・コントロールなど、Oracle Databaseの中核機能と連携します。 - Oracle Internet DirectoryによるTransport Layer Security認証の使用の有効化
Oracle Internet Directory (OID)でTransport Layer Security (TLS)を使用できるようにするには、ウォレットと証明書を作成し、tnsnames.ora
およびsqlnet.ora
を変更します。 - Transport Layer Securityを使用したユーザー認証の構成
Transport Layer Security (TLS)を使用して、クライアント側とサーバー側の両方で管理ユーザーを認証できます。 - X.509証明書を使用したクライアント認証および暗号化のためのTransport Layer Securityの構成
このタイプの構成は、最初にサーバー、次にクライアントで実行する必要があります。 - Oracle Walletを使用したTransport Layer Securityを介した電子メールの構成
Oracleウォレット、PL/SQLパッケージおよびセキュリティ・アクセス制御リスト(ACL)を使用して、Transport Layer Security (TLS)接続を介した電子メールを構成できます。 - Transport Layer Securityエラーのトラブルシューティング
PKI証明書の構成のトラブルシューティングに役立つユーティリティの他、次の追加のガイダンスが用意されています。サポートのWebサイトから、PKI証明書による認証のクライアントおよびサーバー構成を確認してフィードバックを提供するためのユーティリティを入手できます。
親トピック: 厳密認証の管理
25.1 Oracle DatabaseでのTransport Layer Securityを使用した認証
Transport Layer Securityは、暗号化およびデータ・アクセス・コントロールなど、Oracle Databaseの中核機能と連携します。
Oracle DatabaseのTLS機能を使用してクライアントとサーバー間の通信を保護すると、次の操作を実行できます
-
TLSを使用したクライアントとサーバー間の接続の暗号化
-
TLS通信用に構成されたOracleデータベース・サーバーに対するクライアントまたはサーバー(Oracle Application Server 10gなど)の認証
TLS機能は、単独で使用するか、Oracle Databaseでサポートされている他の認証方式と組み合せて使用できます。たとえば、TLSから提供されている暗号化をKerberosから提供されている認証と組み合せて使用できます。TLSでは、次の認証モードがサポートされます。
-
サーバーのみ、クライアントに対して自己認証を行います。
-
クライアントとサーバーは、互いに自己認証を行います。
親トピック: PKI証明書による認証の構成
25.2 Oracle Internet DirectoryによるTransport Layer Security認証の使用の有効化
Oracle Internet Directory (OID)でTransport Layer Security (TLS)を使用できるようにするには、ウォレットと証明書を作成し、tnsnames.ora
およびsqlnet.ora
を変更します。
親トピック: PKI証明書による認証の構成
25.3 Transport Layer Securityを使用したユーザー認証の構成
Transport Layer Security (TLS)を使用して、クライアント側とサーバー側の両方で管理ユーザーを認証できます。
CONNECT
文にネット・サービス名を指定してログインできるようになります。たとえば、ネット・サービス名がorcl
の場合、SYSDBA
としてログインするには、次のように入力します。CONNECT /@orcl AS SYSDBA
25.4 X.509証明書を使用したクライアント認証および暗号化のためのTransport Layer Securityの構成
このタイプの構成は、最初にサーバー、次にクライアントで実行する必要があります。
- X.509証明書を使用したクライアント認証および暗号化のためのTLSの構成について
X.509証明書を使用したOracle DatabaseクライアントとOracleデータベースの間の公開キー・インフラストラクチャ(PKI)認証を有効にできます。 - X.509証明書を使用した認証および暗号化のためのサーバーの構成
サーバーのlistener.ora
、sqlnet.ora
および初期化ファイルを構成し、X.509証明書を使用した認証および暗号化のためのデータベース・ユーザー・アカウントを作成する必要があります。 - X.509証明書を使用した認証および暗号化のためのクライアントの構成
クライアントのsqlnet.ora
、tnsnames.ora
listener.ora
ファイルを構成し、X.509証明書を使用した認証および暗号化のためのMicrosoft証明書ストア(MCS)を構成する必要があります。
親トピック: PKI証明書による認証の構成
25.4.1 X.509証明書を使用したクライアント認証および暗号化のためのTLSの構成について
X.509証明書を使用したOracle DatabaseクライアントとOracleデータベースの間の公開キー・インフラストラクチャ(PKI)認証を有効にできます。
この構成では、Oracle DatabaseクライアントとOracleデータベース間の公開キー・インフラストラクチャ(PKI)認証を有効にする必要があります。これは、WindowsオペレーティングシステムでMicrosoft証明書ストア(MCS)を使用した外部キーストアとして、米国連邦政府のPIV (Personal Identity Verification)および米国国防総省のCAC (Common Access Card)カードと一緒に使用できます。また、この構成により、JavaベースのOracle Databaseクライアントが、Oracleウォレットに格納されているクライアント証明書を使用してOracle Databaseに対して認証できるようになります。
構成プロセスを開始する前に、次の点に注意してください:
- TLS通信は、通常のデータベース接続とは別のネットワーク・ポートで実行する必要があります。これは、ファイアウォール例外の要件に影響する可能性があります。
- 鍵交換プロセスでは追加のオーバーヘッドが発生するため、TLS接続の確立には、ネイティブ暗号化を使用した接続や暗号化を使用しない接続よりも時間がかかる場合があります。
25.4.2 X.509証明書を使用した認証および暗号化のためのサーバーの構成
サーバーのlistener.ora
、sqlnet.ora
および初期化ファイルを構成し、X.509証明書を使用した認証および暗号化のためのデータベース・ユーザー・アカウントを作成する必要があります。
- ステップ1: X.509証明書用のサーバー・ウォレットの作成および構成
orapki
ユーティリティを使用して、この構成を実行できます。 - ステップ2: サーバーでのOracle Listenerの停止
サーバー上のOracleリスナーを停止するには、様々な方法を使用します。 - ステップ3: サーバーでのsqlnet.oraファイルの構成
サーバー上で複数のsqlnet.ora
パラメータを追加または変更する必要があります。 - ステップ4: 論理ボリューム管理の場合のサーバーのlistener.oraファイルの構成
論理ボリューム管理環境では、サーバー上のlistener.ora
ファイルに特別な設定が必要です。 - ステップ5: Grid Infrastructureの場合のサーバー・リスナー・プロセスの構成
Grid Infrastructure環境では、サーバー上のlistener.ora
ファイルに特別な設定が必要です。 - ステップ6: サーバーでの初期化パラメータの設定
接頭辞付きユーザー名の問題を回避するために、サーバー上で一部のOracleデータベース初期化パラメータの設定が必要になる場合があります。 - ステップ7: サーバーでの外部データベース・ユーザーの作成
ユーザーのクライアント証明書の識別名(DN)を指定して、データベース・ユーザーを作成する必要があります。 - ステップ8: サーバーでのリスナー・プロセスの再起動および確認
OracleデータベースでGrid Infrastructureが使用されていない場合、サーバーでリスナーを再起動し、そのプロセスを確認する必要があります。
25.4.2.1 ステップ1: X.509証明書用のサーバー・ウォレットの作成および構成
orapki
ユーティリティを使用して、この構成を実行できます。
wallet_file_directory
にあるOracleウォレット・ディレクトリおよびファイルをgridユーザーが読み取ることができるように構成します。また、Oracle RACデータベースである場合は、Oracleウォレットをサポートしているすべてのデータベース・ノードで同様の方法で使用可能にします。
25.4.2.2 ステップ2: サーバーでのOracle Listenerの停止
サーバー上でOracleリスナーを停止するには、様々な方法を使用します。
- OracleデータベースでOracle Real Applications (Oracle RAC)またはOracle Grid Infrastructure Storage Managementが使用されていない場合は、
oracle
ユーザーとして次のlsnrctl
コマンドを使用します:lsnrctl stop
- OracleデータベースでOracle Grid Infrastructure Storage Managementを使用している場合は、gridユーザーとして次の
lsnrctl
コマンドを使用します:srvctl stop listener
- OracleデータベースがOracle RACデータベースである場合、gridユーザーとして次の
srvctl
コマンドを使用します:srvctl stop scan_listener
25.4.2.4 ステップ4: 論理ボリューム管理の場合のサーバーのlistener.oraファイルの構成
論理ボリューム管理環境では、サーバー上のlistener.ora
ファイルに特別な設定が必要です。
listener.ora
ファイルを変更することを前提としています。ただし、Net Manager (netmgr
)を使用して、新しく作成されたリスナーを構成することもできます。標準のTCPSポート設定2484を使用することをお薦めしますが、別のポート番号を引き続き使用してもかまいません。ファイアウォール、セキュリティ・リストおよびネットワーク・セキュリティ・グループは、クライアントから指定したTCPSポートへのトラフィックを許可するように構成する必要があります。
25.4.2.5 ステップ5: Grid Infrastructureの場合のサーバー・リスナー・プロセスの構成
Grid Infrastructure環境では、サーバー上のlistener.ora
ファイルに特別な設定が必要です。
25.4.2.6 ステップ6: サーバーでの初期化パラメータの設定
接頭辞付きユーザー名の問題を回避するために、サーバー上で一部のOracleデータベース初期化パラメータの設定が必要になる場合があります。
25.4.2.7 ステップ7: サーバーでの外部データベース・ユーザーの作成
ユーザーのクライアント証明書の識別名(DN)を指定して、データベース・ユーザーを作成する必要があります。
SYSDBA
などの権限は付与できません。
25.4.2.8 ステップ8: サーバーでのリスナー・プロセスの再起動および確認
OracleデータベースでGrid Infrastructureが使用されていない場合、サーバーでリスナーを再起動し、そのプロセスを確認する必要があります。
- OracleデータベースでOracle Real Applications (Oracle RAC)またはOracle Grid Infrastructure Storage Managementが使用されていない場合は、
oracle
ユーザーとして次のlsnrctl
コマンドを使用します:lsnrctl start lsnrctl status
- OracleデータベースでOracle Grid Infrastructure Storage Managementを使用している場合は、gridユーザーとして次の
lsnrctl
コマンドを使用します:srvctl start listener srvctl status listener
- OracleデータベースがOracle RACデータベースである場合、gridユーザーとして次の
srvctl
コマンドを使用します:srvctl start scan_listener srvctl status scan_listener
25.4.3 X.509証明書を使用した認証および暗号化のためのクライアントの構成
クライアントのsqlnet.ora
ファイル、tnsnames.ora
listener.ora
ファイルを構成し、X.509証明書を使用した認証および暗号化のためにMicrosoft証明書ストア(MCS)を構成する必要があります。
- ステップ1: クライアントでのsqlnet.oraファイルの構成
クライアント上で複数のsqlnet.ora
パラメータを追加または変更する必要があります。 - ステップ2: クライアントでのtnsnames.oraファイルの構成
クライアントでtnsnames.ora
ファイルを変更する必要があります。 - ステップ3: クライアントでのMicrosoft証明書ストアの構成
証明書をローカルに格納および管理できるMicrosoft証明書ストア(MCS)をOracle Database Windowsクライアントで構成できます。
25.4.3.1 ステップ1: クライアントでのsqlnet.oraファイルの構成
クライアント上で複数のsqlnet.ora
パラメータを追加または変更する必要があります。
25.4.3.3 ステップ3: クライアントでのMicrosoft証明書ストアの構成
証明書をローカルに格納および管理できるMicrosoft証明書ストア(MCS)をOracle Database Windowsクライアントで構成できます。
- クライアントでのMicrosoft証明書ストアの構成について
クライアントでMicrosoft証明書ストア(MCS)を構成する前に、クライアント環境が適切に設定されていることを確認する必要があります。 - TNS_ADMIN環境変数の設定
MCS操作を容易にするために、TNS_ADMIN
環境変数を特別な方法で設定する必要があります。 - クライアントでのMicrosoft証明書ストアの構成
mTLS構成が機能するには、データベース・サーバーが使用した証明書に署名したルートCAおよび中間CAの証明書をMCSに追加する必要があります。 - tnspingを使用したMicrosoft証明書ストア構成のテスト
tnsping
ユーティリティにより、Oracleサービスに正常に到達できるかどうかが決まります。 - SQL*Plusを使用したMicrosoft証明書ストア構成のテスト
SQL*Plusは、ユーザー、管理者およびプログラマによって一般的に使用されている最も基本的なOracle Databaseユーティリティで、データベースに対するmTLSおよびユーザー認証の確認に使用できます。
25.4.3.3.1 クライアントでのMicrosoft証明書ストアの構成について
クライアントでMicrosoft証明書ストア(MCS)を構成する前に、クライアント環境が適切に設定されていることを確認する必要があります。
この手順では、次の点が前提です。
- Oracle Databaseクライアントがインストールされており、Oracle Databaseサーバーと通信するように構成されている。
- すべてのクライアントに最新のパッチがインストールされている。
- MCSがX509スマート・カード(共通アクセス・カード(CAC)、個人識別情報検証(PIV))から証明書を読み取ることができるように、適切なハードウェアとソフトウェアがインストールされている
また、SQL Developerを使用して、およびJDBC Type 4ドライバによるJavaを使用してクライアントを操作するためにMCSを構成することもできます。My Oracle Supportノート2959952.1を参照してください。
次の図は、Oracle Database環境のスマート・カードおよびMCSを示しています。
この図についての説明を次に示します:
- ユーザーがOracleデータベースにログインします。ユーザーのユーザー証明書、秘密キーおよびその他必要な証明書は、スマートカード上にあります。
- クライアントからのデータベース接続は、MCSを使用するように構成されています。
- Oracleデータベースのウォレットは、秘密キーが証明書であるPKCS11ウォレットです。Oracle Databaseウォレットには、サーバーの秘密キーと信頼できるルート証明書が保持されています。
25.4.3.3.2 TNS_ADMIN環境変数の設定
MCS操作を容易にするために、TNS_ADMIN
環境変数を特別な方法で設定する必要があります。
*.ora
ファイルをすべて配置できるようになります。また、システムの各ユーザーがパーソナライズされた個別の構成を持つこともできます。
25.4.3.3.3 クライアントでのMicrosoft証明書ストアの構成
mTLS構成が機能するには、データベース・サーバーが使用した証明書に署名したルートCAおよび中間CAの証明書をMCSに追加する必要があります。
- サーバー・ウォレットを作成および構成したときにデータベース・サーバー証明書の署名に使用したルートCAと中間CAの証明書をダウンロードします。
- MCS証明書のインポート・ウィザードを起動します。
- 「証明書インポート・ウィザードへようこそ」ページで、「現在のユーザー」オプションを選択し、「次へ」をクリックします。
- 「証明書ストア」ページで、「証明書の種類に基づいて、証明書ストアを自動的に選択する」オプションを選択し、「次へ」をクリックします。
- 「証明書インポート・ウィザードの完了」ページで、作成した設定を確認し、「終了」をクリックします。証明書インポート・ウィザードの確認ウィンドウで「OK」をクリックします。
- CAがMCSに正常にロードされたことを確認します。
- 左側の「コンソール・ルート」ツリーの「証明書 - 現在のユーザー」で、「信頼できるルート証明書」フォルダを展開します。
- 「証明書」フォルダを選択して、「証明書」ウィンドウを表示します。
- コンテンツを確認します。このウィンドウには、証明書の目的、発行先、発行者、および証明書の有効期限が記載されます。「OK」をクリックしてウィンドウを閉じます。
25.5 Oracleウォレットを使用するTransport Layer Securityを介した電子メールの構成
Oracleウォレット、PL/SQLパッケージおよびセキュリティ・アクセス制御リスト(ACL)を使用して、Transport Layer Security (TLS)接続を介した電子メールを構成できます。
親トピック: PKI証明書による認証の構成
25.6 Transport Layer Securityエラーのトラブルシューティング
PKI証明書の構成のトラブルシューティングに役立つユーティリティの他、次の追加のガイダンスが用意されています。サポートのWebサイトから、PKI証明書による認証のクライアントおよびサーバー構成を確認してフィードバックを提供するためのユーティリティを入手できます。
- ステップ1: tnspingユーティリティを使用したTLS接続の確認
tnsping
ユーティリティを使用した接続の確立により、データベース・サービスがTCPSエンドポイントのリスナーに登録されたことが示されます。 - ステップ2: SSL_VERSIONパラメータの確認
正しく設定されていないSSL_VERSION
パラメータによって、Transport Layer Security (TLS)の問題が発生する可能性があります。 - ステップ3: ウォレット・ファイル権限の確認
Transport Layer Security (TLS)接続では、データベースとリスナーが自動ログイン・ウォレット・ファイル(cwallet.sso
)にアクセスできる必要があります。 - ステップ4: sqlnet.oraおよびlistener.oraファイルのウォレット設定の確認
Transparent Layer Security (TLS)の問題は、sqlnet.ora
およびlistener.ora
ファイルのウォレットと証明書の構成エラーから発生する可能性があります。 - ステップ5: SQL*Netおよびリスナー接続のトレースの有効化
sqlnet.ora
ファイルで、SQL*Netおよびリスナー接続のトレースを有効にできます。
親トピック: PKI証明書による認証の構成
25.6.1 ステップ1: tnspingユーティリティを使用したTLS接続の確認
tnsping
ユーティリティを使用した接続の確立により、データベース・サービスがTCPSエンドポイントのリスナーに登録されたことが示されます。
25.6.2 ステップ2: SSL_VERSIONパラメータの確認
正しく設定されていないSSL_VERSION
パラメータによって、Transport Layer Security (TLS)の問題が発生する可能性があります。
接続を確立できるように、サーバーおよびクライアントのsqlnet.ora
ファイルでSSL_VERSION
パラメータが正しいバージョンのTLSに設定されていることを確認する必要があります。たとえば:
SSL_VERSION= TLSv1.3
デフォルトでは、Oracle Databaseは、SSL_VERSION
が設定されていないときに使用できる最もセキュアなプロトコルを使用します。
正しいバージョンのTLSに対してSSL_VERSION
パラメータを設定する方法の詳細は、Oracle Database Net Servicesリファレンスを参照してください。
25.6.3 ステップ3: ウォレット・ファイル権限の確認
Transport Layer Security (TLS)接続では、データベースとリスナーが自動ログイン・ウォレット・ファイル(cwallet.sso
)にアクセスできる必要があります。
Oracle Real Application Clusters (Oracle RAC)データベースの場合、Grid Infrastructure Oracle Home所有者とDatabase Oracle Home所有者の両方が、正しい証明書を含むcwallet.sso
ファイルのコンテンツにアクセスできる必要があります。多くの場合、構成は両方の環境で同じcwallet.sso
ファイルの使用を意味します。この場合、ファイルの所有者が誰であれ、両方のユーザーがファイルにアクセスできるように、権限を適切に設定する必要があります。
デフォルトでは、ウォレット権限は次のとおりです。
$ ls -ltr
-rw-------. 1 ewallet.p12
-rw-------. 1 cwallet.sso
cwallet.sso
ファイルがGrid Infrastructure Oracle Home所有者(通常はgrid
)によって使用される場合、ユーザーgrid
はoinstall
グループのメンバーである必要があります。権限は次のように変更できます。
$ chmod 640 cwallet.sso
$ ls -ltr
-rw-------. 1 oracle oinstall 75 Mar 6 10:47 ewallet.p12
-rw-r-----. 1 oracle oinstall 120 Mar 6 10:47 cwallet.sso
25.6.4 ステップ4: sqlnet.oraおよびlistener.oraファイルのウォレット設定の確認
Transparent Layer Security (TLS)の問題は、sqlnet.ora
およびlistener.ora
ファイルのウォレットと証明書の構成エラーから発生する可能性があります。
これらの設定により、データベースとそのクライアントの間の接続を暗号化できます。(この暗号化を処理する別の方法は、外部ネットワーク・サービスのPL/SQLパッケージ、UTL_SMTP
、UTL_HTTP
およびUTL_TCP
を使用することです。)
次のことに注意してください。
- サーバーの場合:
WALLET_ROOT
パラメータを設定します。(WALLET_LOCATION
パラメータは引き続き使用できます。)信頼できる証明書とサーバー証明書の両方が必要です。 - クライアントの場合:
sqlnet.ora
にWALLET_LOCATION
を設定します。一方向TLSが構成されている場合、信頼できる証明書のみが必要です。mTLSが構成されている場合は、信頼できる証明書とサーバー証明書の両方が必要です。 - リスナーの場合:
listener.ora
ファイルでWALLET_LOCATION
パラメータを設定します。信頼できる証明書とサーバー証明書の両方が必要です。
WALLET_LOCATION
パラメータ設定の例は次のとおりです。
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = wallet_location)
)
)
証明書は、自己署名付きにすることも、サード・パーティの認証局によって署名することもできます。
orapki wallet display -wallet
コマンドを使用してウォレットの内容を表示し、自己署名証明書があるかどうかを確認できます。たとえば:
$ orapki wallet display -wallet .
Requested Certificates:
User Certificates:
Subject: C=US,CN=MYROOT
Trusted Certificates:
Subject: C=US,CN=MYROOT
次の例は、サード・パーティ権限によって提供された証明書のあるウォレットの出力を示しています。
Requested Certificates:
User Certificates:
Subject: CN=*.us.example.com,O=Example Corporation,L=Redwood City,ST=California,C=US
Trusted Certificates:
Subject: CN=DigiCert Global Root CA,O=DigiCert Inc,C=US
Subject: CN=DigiCert TLS RSA SHA256 2020 CA1,O=DigiCert Inc,C=US
25.6.5 ステップ5: SQL*Netおよびリスナー接続のトレースの有効化
sqlnet.ora
ファイルでは、SQL*Netおよびリスナー接続に対してトレースを有効にできます。
たとえば、SQL*Netのトレースを有効にするには:
TRACE_LEVEL_CLIENT=SUPPORT
TRACE_DIRECTORY_CLIENT=trace_dir
TRACE_LEVEL_SERVER=SUPPORT
TRACE_DIRECTORY_SERVER=trace_dir
DIAG_ADR_ENABLED=OFF
リスナーでは、次のトレース・パラメータを設定できます。
TRACE_FILE_LISTENER = LISTENER.TRC
TRACE_DIRECTORY_LISTENER = trace_dir
TRACE_LEVEL_LISTENER = SUPPORT
TRACE_FILELEN_LISTENER = 10240
TRACE_FILENO_LISTENER=10
次の出力は、間違ったTLSプロトコルが使用されたためにTLS接続が失敗したことを示しています。これらのエラーに対処する方法については、My Oracle Supportノート244527.1を参照してください。
[<DATE AND TIME>] ntzdosecneg: entry
[<DATE AND TIME>] nttrd: entry
[<DATE AND TIME>] nttrd: socket 13 had bytes read=11
[<DATE AND TIME>] nttrd: exit
[<DATE AND TIME>] ntzdosecneg: SSL handshake failed with error 29019.
[<DATE AND TIME>] ntzdosecneg: exit
[<DATE AND TIME>] ntzcontrol: failed with error 542
[<DATE AND TIME>] ntzcontrol: exit
[<DATE AND TIME>] nserror: entry
[<DATE AND TIME>] nserror: nsres: id=0, op=79, ns=12561, ns2=0; nt[0]=0, nt[1]=0, nt[2]=0; ora[0]=0, ora[1]=0, ora[2]=0
[<DATE AND TIME>] nsclose: entry
[<DATE AND TIME>] nsvntx_dei: entry
[<DATE AND TIME>] nsvntx_dei: exit
一般的なエラー・コードの詳細は、トランスポート・レイヤー・セキュリティ構成のトラブルシューティングを参照してください。
トレース設定を使用して接続を追跡する方法の詳細は、『Oracle Database Net Services管理者ガイド』も参照してください。