26 Transport Layer Security認証の構成
Transport Layer Security認証を使用するように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)を使用して、クライアント側とサーバー側の両方で管理ユーザーを認証できます。 - Oracle Walletを使用したTransport Layer Securityを介した電子メールの構成
Oracleウォレット、PL/SQLパッケージおよびセキュリティ・アクセス制御リスト(ACL)を使用して、Transport Layer Security (TLS)接続を介した電子メールを構成できます。 - Transport Layer Securityエラーのトラブルシューティング
Oracleでは、接続エラーや認証エラーなど、Transport Layer Security (TLS)構成に問題がある場合、いくつかのトラブルシューティング・タスクが提供されます。
親トピック: 厳密認証の管理
26.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では、次の認証モードがサポートされます。
-
サーバーのみ、クライアントに対して自己認証を行います。
-
クライアントとサーバーは、互いに自己認証を行います。
26.2 Oracle Internet DirectoryによるTransport Layer Security認証の使用の有効化
Oracle Internet Directory (OID)でTransport Layer Security (TLS)を使用できるようにするには、ウォレットと証明書を作成し、tnsnames.ora
およびsqlnet.ora
を変更します。
26.3 Transport Layer Securityを使用したユーザー認証の構成
Transport Layer Security (TLS)を使用して、クライアント側とサーバー側の両方で管理ユーザーを認証できます。
CONNECT
文にネット・サービス名を指定してログインできるようになります。たとえば、ネット・サービス名がorcl
の場合、SYSDBA
としてログインするには、次のように入力します。CONNECT /@orcl AS SYSDBA
26.4 Oracleウォレットを使用するTransport Layer Securityを介した電子メールの構成
Oracleウォレット、PL/SQLパッケージおよびセキュリティ・アクセス制御リスト(ACL)を使用して、Transport Layer Security (TLS)接続を介した電子メールを構成できます。
26.5 Transport Layer Securityエラーのトラブルシューティング
Oracleでは、接続エラーや認証エラーなど、Transport Layer Security (TLS)構成に問題がある場合、いくつかのトラブルシューティング・タスクが提供されます。
- ステップ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およびリスナー接続のトレースを有効にできます。
26.5.1 ステップ1: tnspingユーティリティを使用したTLS接続の確認
tnsping
ユーティリティを使用した接続の確立により、データベース・サービスがTCPSエンドポイントのリスナーに登録されたことが示されます。
26.5.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リファレンスを参照してください。
26.5.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
26.5.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,OU=www.digicert.com,O=DigiCert Inc,C=US
Subject: CN=DigiCert TLS RSA SHA256 2020 CA1,O=DigiCert Inc,C=US
26.5.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管理者ガイド』も参照してください。