25 PKI証明書による認証の構成

エンド・ユーザー認証にPKI証明書を使用するようにOracle Databaseを構成できます。

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では、次の認証モードがサポートされます。

  • サーバーのみ、クライアントに対して自己認証を行います。

  • クライアントとサーバーは、互いに自己認証を行います。

25.2 Oracle Internet DirectoryによるTransport Layer Security認証の使用の有効化

Oracle Internet Directory (OID)でTransport Layer Security (TLS)を使用できるようにするには、ウォレットと証明書を作成し、tnsnames.oraおよびsqlnet.oraを変更します。

  1. Oracle Internet Directory (OID)がインストールされているデータベース・クライアント・サーバーにログインします。
  2. $ORACLE_HOME/ldap/libディレクトリに移動します
  3. 次のコマンドを実行します。
    make -f ins_ldap.mk install
  4. OID tnsnames.oraファイルがあるディレクトリに移動します。
    デフォルトでは、このディレクトリは$ORACLE_HOME/network/adminです。
  5. tnsnames.oraファイルを編集し、次のOID設定を組み込みます。この設定で、TCPSポートが指定されます。

    たとえば:

    OIDDB=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)
       (HOST=sales_db.us.example.com)(PORT=5500))
        (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl.us.example.com)))
         (SECURITY=(SSL_SERVER_CERT_DN="CN=Server,O=Example,ST=California,C=US"))

    この例では、SSL_SERVER_CERT_DNがデータベース・サーバー証明書のDNを指します。

  6. sqlnet.oraファイルでウォレットの場所を構成します。

    たとえば:

    ENCRYPTION_WALLET_LOCATION=
     (SOURCE=
      (METHOD=FILE)
       (METHOD_DATA=
        (DIRECTORY=/etc/ORACLE/WALLETS/$ORACLE_SID/)))
  7. sqlnet.oraファイルに次の設定があることを確認します。
    SSL_CLIENT_AUTHENTICATION = FALSE
    SSL_SERVER_DN_MATCH=OFF
  8. orapkiユーティリティを使用して新しいウォレットを作成し、ウォレットにデータベース証明書を追加します。
    たとえば:
    orapki wallet create -wallet /etc/ORACLE/WALLETS/$ORACLE_SID/oid_wallet
    -auto_login -pwd wallet_password
    orapki wallet add -wallet /etc/ORACLE/WALLETS/$ORACLE_SID/oid_wallet
    -trusted_cert -cert /etc/ORACLE/certificates/dbssl/root/b64certificate.txt 
    -pwd wallet_password
    ./orapki wallet add -wallet /etc/ORACLE/WALLETS/$ORACLE_SID/oid_gwallet
    -trusted_cert -cert /etc/ORACLE/certificates/dbssl/netadmin/cert.txt -pwd
    wallet_password

25.3 Transport Layer Securityを使用したユーザー認証の構成

Transport Layer Security (TLS)を使用して、クライアント側とサーバー側の両方で管理ユーザーを認証できます。

  1. クライアントは、エンドユーザーの認証のためにPKI証明書の使用を指定する必要があります。すべてのクライアント接続でこの認証方法を使用する場合は、AUTHENTICATION_SERVICES=(tcps)を設定します。
    または、接続文字列でAUTHENTICATION_SERVICE=tcpsを使用して、接続ごとに別々に設定できます。

    ノート:

    接続文字列パラメータは単一値ですが、sqlnet.oraパラメータは複数値です。
  2. クライアントとサーバーの両方で、ウォレットにユーザーの証明書およびサーバーの証明書に関する認証局(CA)証明書があることを確認します。これらのCA証明書は、クライアントとサーバーで異なる場合があります。
  3. TLSを使用するようにクライアントを構成します。
    1. クライアント・ウォレットに署名付きユーザー証明書を追加します。CAルート信頼証明書は、クライアント・ウォレットに存在している必要があります。ユーザー証明書の追加前に、ユーザー証明書に必要な中間証明書がウォレットに追加されていることを確認します。
      orapkiを使用して、クライアント・ウォレットおよびユーザー証明書を構成できます。
    2. sqlnet.oraファイルで認証サービスとしてTLSを設定します。
      SSL_CLIENT_AUTHENTICATION=TRUE
    3. オプションで、セキュリティを向上させるために、完全または部分的なDN一致を使用するようにクライアントを設定します。
      DN一致が有効になっている場合、クライアントはサーバー証明書をチェックして、ホスト名がクライアントで一致するように構成されたものと一致することを確認します。このステップは、Oracle Internet DirectoryでTLSの使用を有効にする場合に実行します。

      ノート:

      データベース・クライアントとサーバーは、最強のTLSプロトコルと暗号スイートを使用して接続を確立するようになります。そのため、このTLSバージョンと暗号スイートは、それが必要になる特定のセキュリティ要件がないかぎり、指定する必要はありません。特定のTLSバージョンと暗号スイートを設定する場合は、古いバージョンが使用されなくなったときに構成の更新が必要になる点に注意してください。
  4. TLSのリスナーを構成します。
    1. 安全なデータベース・ポート1522を使用して、TLS接続用に個別のリスナー・エントリを作成します。
      たとえば:
      LISTENER =
        (DESCRIPTION_LIST =
          (DESCRIPTION =
            (ADDRESS = (PROTOCOL = TCP)(HOST = example.com)(PORT = 1521))
            (ADDRESS = (PROTOCOL = TCPS)(HOST = example.com)(PORT = 1522))
          )
        )
    2. TLS以外のリスナー・エントリ(PROTOCOL = TCPの行など)をコメント・アウトするか、TLS以外の必須接続の場合はそのままにします。
      サーバーが使用するものと同じウォレットを、同じサーバー証明書とともにリスナーで使用できます。リスナーは、標準のOracle Databaseウォレット検索順序を使用してウォレットを検索するようになります。または、WALLET_LOCATIONパラメータを設定すると、リスナーのウォレットの場所を指定できます。(リスナーでは使用できないため、この目的にWALLET_ROOTパラメータは使用できません)。
  5. TLSを使用するようにサーバーを構成します。
    1. TLSサーバー・ウォレットの場合は、次を実行します。
      • WALLET_ROOTパラメータをTLSサーバーの場所に設定します。
      • WALLET_ROOT/pdb_guidの下にtlsディレクトリを作成します。
      • TLSサーバー・ウォレットをWALLET_ROOT/pdb_guid/tlsディレクトリに移動します。
    2. sqlnet.oraファイルで、次のパラメータを追加します。
      SSL_CLIENT_AUTHENTICATION=TRUE

      認証をTCPSのみに制限する場合は、AUTHENTICATION_SERVICESTCPSに設定します。

  6. 新しいスキーマを作成するか、ユーザーにマップするように既存のスキーマを変更します。
    CREATE USER user_name IDENTIFIED EXTERNALLY AS 'user DN on certificate';
  7. SYSDBASYSOPERなどの適切な管理権限にデータベース・スキーマを付与します。
    TLS認証を使用する管理ユーザーはTLSで認証できます。こうしたユーザーを有効にするには、適切な管理権限をユーザー・スキーマに付与します。管理ユーザーは、この管理権限を使用してログインする必要があります。SYSOPER管理権限を付与されたユーザーの例:
    CONNNECT /@pdb_name AS SYSOPER
この結果、ユーザーは、SQL*PlusでCONNECT文にネット・サービス名を指定してログインできるようになります。たとえば、ネット・サービス名がorclの場合、SYSDBAとしてログインするには、次のように入力します。
CONNECT /@orcl AS SYSDBA

25.4 X.509証明書を使用したクライアント認証および暗号化のためのTransport Layer Securityの構成

このタイプの構成は、最初にサーバー、次にクライアントで実行する必要があります。

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.orasqlnet.oraおよび初期化ファイルを構成し、X.509証明書を使用した認証および暗号化のためのデータベース・ユーザー・アカウントを作成する必要があります。

25.4.2.1 ステップ1: X.509証明書用のサーバー・ウォレットの作成および構成

orapkiユーティリティを使用して、この構成を実行できます。

  1. サーバーにoracleユーザーとして接続します。
  2. サーバーのウォレットを配置するディレクトリが存在しない場合はそれを作成し、このディレクトリに対してcdを実行します。
  3. orapkiを使用して初期ウォレットを作成し、これに強力なパスワードを設定します。
    orapki wallet create -wallet wallet_file_directory -auto_login -pwd password
  4. サーバーの証明書署名リクエスト(CSR)を生成します。
    host_addressには、サーバーの完全修飾ドメイン名を使用します(たとえば、hostname.af.mil)。必要に応じて、識別名に追加のOおよびC属性を必ず含めてください。含めない場合、連邦機関PKIによって作成された最終証明書が要求と一致せず、証明書をウォレットにインポートできなくなります。
    orapki wallet add -wallet wallet_file_directory -dn “CN=host_address,other_attributes” -asym_alg RSA -keysize 4096 -pwd password
  5. CSRをエクスポートし、リクエストを認証局(CA)に送信して一意のサーバー証明書および証明書信頼チェーンを生成できるようにします。
    orapki wallet export -wallet wallet_file_directory -dn “CN=host_address,other_attributes” -request ~/host_name.csr -pwd password

    Oracle Real Application Clusters (Oracle RAC)を使用している場合は、[HOST_ADDRESS]をSCAN DNS名に設定します。

  6. 適切なCAにCSR (つまり、host_name.csr)を送信します。
  7. 組織に適したルートおよび中間CA証明書、ユーザーX509カード(CACとPIV)、および非個人エンティティ(NPE)またはサービス・アカウントに発行された証明書をダウンロードします。
  8. これらの証明書およびカードをサーバー・ウォレットにインポートし、サーバー証明書およびすべてのクライアント証明書に必要な信頼チェーンを確立します。
    orapki wallet add -wallet wallet_file_directory -trusted_cert -cert cert_file_path -pwd password

    Linuxでは、すべての証明書を1つのコマンドでインポートできます:

    find cert_file_path -name “*.txt” -exec orapki wallet add -wallet wallet_file_directory -trusted_cert -cert {} -pwd password \;
  9. 署名付きサーバー証明書を受信したら、base64証明書をユーザー証明書としてサーバー上のOracleウォレットにインポートします。
    orapki wallet add -wallet wallet_file_directory -user_cert -cert base64_cert_file_path -pwd password
  10. サイトでルートおよび中間CAが追加されたら、ステップ7および8のような証明書を使用してOracleウォレットを更新します。
  11. サーバー、ルートCAおよび中間CA証明書がOracleウォレットに存在することを確認します。
    wallet display -wallet wallet_file_directory -pwd password

    出力の「Requested Certificates」セクションで、証明書のリストを確認します。

OracleデータベースでGrid Infrastructureを使用している場合は、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.3 ステップ3: サーバーでのsqlnet.oraファイルの構成

サーバー上で複数のsqlnet.oraパラメータを追加または変更する必要があります。

  1. 通常はORACLE_HOME/network/adminディレクトリにあるsqlnet.oraファイルをバックアップします。
  2. sqlnet.oraファイルを編集して次のパラメータを追加します。
    次の設定では、SSL_VERSIONおよびSSL_CIPHER_SUITESパラメータはオプションで、サイトの要件によって異なります。
    ###Begin required parameters to be Added or Modified
    SQLNET.AUTHENTICATION_SERVICES = (beq, tcps)
    SSL_VERSION = 1.2 
    SSL_CIPHER_SUITES = (TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256)
    SSL_CLIENT_AUTHENTICATION = TRUE
    WALLET_LOCATION = (SOURCE = (METHOD = FILE)(METHOD_DATA = (DIRECTORY = wallet_file_directory)))
    #Added when NATIVE Encryption is also configured
    SQLNET.IGNORE_ANO_ENCRYPTION_FOR_TCPS = TRUE
    ###End required parameters to be Added or Modified
    
    ###Begin optional parameters to be Added or Modified
    #SSL_CERT_REVOCATION = #set to none, requested, or required
    #SSL_CRL_PATH = #set to directory containing CRLs
    #SSL_CRL_FILE = #set to file containing CRLs
    #SSL_EXTENDED_KEY_USAGE = #set to extended key the client cert is to present
    ###End optional parameters
25.4.2.4 ステップ4: 論理ボリューム管理の場合のサーバーのlistener.oraファイルの構成

論理ボリューム管理環境では、サーバー上のlistener.oraファイルに特別な設定が必要です。

この手順では、既存のlistener.oraファイルを変更することを前提としています。ただし、Net Manager (netmgr)を使用して、新しく作成されたリスナーを構成することもできます。標準のTCPSポート設定2484を使用することをお薦めしますが、別のポート番号を引き続き使用してもかまいません。ファイアウォール、セキュリティ・リストおよびネットワーク・セキュリティ・グループは、クライアントから指定したTCPSポートへのトラフィックを許可するように構成する必要があります。
  1. oracleユーザーとして、listener.oraファイルをバックアップします。
  2. listener.oraファイルを編集して次のパラメータを追加します:
    ADDRESSパラメータは、表示されている順序で追加してください。SSL_VERSIONパラメータはオプションで、サイトの要件によって異なることに注意してください。
    ###Modify the LISTENER parameter to add the following ADDRESS parameter
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = host_address)(PORT = 1521))
          (ADDRESS = (PROTOCOL = TCPS)(HOST = host_address)(PORT = 2484))
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
        )
      )
    
    ###Begin required parameters to be Added or Modified 
    SSL_VERSION = 1.2
    SSL_CLIENT_AUTHENTICATION = TRUE
    
    WALLET_LOCATION = (SOURCE = (METHOD = FILE)(METHOD_DATA = (DIRECTORY = wallet_file_directory)))
    ###End required parameters to be Added or Modified
25.4.2.5 ステップ5: Grid Infrastructureの場合のサーバー・リスナー・プロセスの構成

Grid Infrastructure環境では、サーバー上のlistener.oraファイルに特別な設定が必要です。

この手順は、Oracleデータベースに関連付けられているすべてのノードでgridユーザーとして実行する必要があります。
  1. gridユーザーとして、listener.oraファイルをバックアップします。
  2. listener.oraファイルを編集して次のパラメータを追加します:
    ADDRESSパラメータは、表示されている順序で追加してください。
    ###Begin required parameters to be Added or Modified
    SSL_VERSION = 1.2
    SSL_CLIENT_AUTHENTICATION = TRUE
    WALLET_LOCATION = (SOURCE = (METHOD = FILE)(METHOD_DATA = (DIRECTORY = wallet_file_directory)))
    ###End required parameters to be Added or Modified
  3. リスナーにTCPSサービスを追加します。
    srvctl modify listener –endpoints "TCP:1521/TCPS:2484"
  4. これがOracle Real Applications Clusters (Oracle RAC)データベースである場合は、次のコマンドを実行します:
    srvctl modify scan_listener –endpoints "TCP:1521/TCPS:2484"
25.4.2.6 ステップ6: サーバーでの初期化パラメータの設定

接頭辞付きユーザー名の問題を回避するために、サーバー上で一部のOracleデータベース初期化パラメータの設定が必要になる場合があります。

  1. ALTER SYSTEMシステム権限を持つユーザーとしてデータベースに接続します。
  2. 次のパラメータを設定します。
    ALTER SYSTEM SET OS_AUTHENT_PREFIX=’’ SCOPE=SPFILE;
  3. データベース・インスタンスを再起動します。
25.4.2.7 ステップ7: サーバーでの外部データベース・ユーザーの作成

ユーザーのクライアント証明書の識別名(DN)を指定して、データベース・ユーザーを作成する必要があります。

外部で識別されるユーザーには、(開発者がテスト環境でアプリケーション・スキーマにアクセスする場合など)他のスキーマに接続するためのプロキシ権限を付与できますが、資格証明をデータベース・パスワード・ファイルに格納する必要のあるSYSDBAなどの権限は付与できません。
  1. CREATE USERシステム権限を持つユーザーとしてデータベースに接続します。
  2. 次のように外部ユーザーを作成します:
    たとえば、外部ユーザーpfitchを作成するには:
    CREATE USER pfitch IDENTIFIED EXTERNALLY AS ‘CN=FITCH.PETER.I.1234567890,other_attributes’;
  3. 少なくとも、このユーザーにCREATE SESSION権限を付与し、other_attributesデータベースに接続できるようにします。
    GRANT CREATE SESSION TO pfitch;
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.oralistener.oraファイルを構成し、X.509証明書を使用した認証および暗号化のためにMicrosoft証明書ストア(MCS)を構成する必要があります。

25.4.3.1 ステップ1: クライアントでのsqlnet.oraファイルの構成

クライアント上で複数のsqlnet.oraパラメータを追加または変更する必要があります。

この構成により、Microsoft証明書ストア(MCS)を使用して証明書を格納および管理できるようになります。
  1. 通常はORACLE_HOME/network/adminディレクトリにあるsqlnet.oraファイルをバックアップします。
  2. sqlnet.oraファイルを編集して次のパラメータを追加します。
    SSL_VERSIONパラメータの設定は、サイトの要件によって異なります。
    ###Begin required parameters to be Added or Modified
    SQLNET.AUTHENTICATION_SERVICES = (nts, tcps)
    
    SSL_VERSION = 1.2
    
    SSL_SERVER_DN_MATCH = TRUE
    
    WALLET_LOCATION = (SOURCE = (METHOD = MCS))
    
    ###Begin optional parameters to be Added or Modified
    #SSL_CIPHER_SUITES = algorithms to be used for TLS encryption
    ###End optional parameters
25.4.3.2 ステップ2: クライアントでのtnsnames.oraファイルの構成

クライアントでtnsnames.oraファイルを変更する必要があります。

  1. 通常はORACLE_HOME/network/adminディレクトリにあるtnsnames.oraファイルをバックアップします。
  2. tnsnames.oraファイルを編集して次のパラメータを追加します:
    service_alias =
        (DESCRIPTION =
                (ADDRESS =
                    (PROTOCOL = TCPS)
                    (HOST = host_ip_address)
                    (PORT = 2484)
                )
                (CONNECT_DATA =
                    (SERVICE_NAME = database_service_name)
                )
                (SECURITY =
                    (SSL_SERVER_CERT_DN = "CN=host_ip_address,other_attributes)
                )
        )
25.4.3.3 ステップ3: クライアントでのMicrosoft証明書ストアの構成

証明書をローカルに格納および管理できるMicrosoft証明書ストア(MCS)をOracle Database Windowsクライアントで構成できます。

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を示しています。

図25-1 Oracle Database環境のスマート・カードおよびMCS

図25-1の説明が続きます
「図25-1 Oracle Database環境のスマート・カードおよびMCS」の説明

この図についての説明を次に示します:

  1. ユーザーがOracleデータベースにログインします。ユーザーのユーザー証明書、秘密キーおよびその他必要な証明書は、スマートカード上にあります。
  2. クライアントからのデータベース接続は、MCSを使用するように構成されています。
  3. Oracleデータベースのウォレットは、秘密キーが証明書であるPKCS11ウォレットです。Oracle Databaseウォレットには、サーバーの秘密キーと信頼できるルート証明書が保持されています。
25.4.3.3.2 TNS_ADMIN環境変数の設定

MCS操作を容易にするために、TNS_ADMIN環境変数を特別な方法で設定する必要があります。

次の設定により、ユーザーは、所有権と制御を持つ自分のユーザー・プロファイル内に必要な*.oraファイルをすべて配置できるようになります。また、システムの各ユーザーがパーソナライズされた個別の構成を持つこともできます。
  1. Windowsで「システムのプロパティ」ウィンドウを開きます。(「システムの詳細設定」を検索します。)
  2. 「詳細設定」タブを選択します。
  3. 「環境変数」をクリックします。
  4. 「環境変数」ウィンドウで、TNS_ADMINがリストされていない場合は、「新規」をクリックします。リストされている場合は、「編集」をクリックします。
  5. 「新しいユーザー変数」または「ユーザー変数の編集」ダイアログ・ボックスで、「変数値」フィールドに次の値を入力します:
    %USERPROFILE%\Oracle\admin
  6. 「OK」をクリックします。
25.4.3.3.3 クライアントでのMicrosoft証明書ストアの構成

mTLS構成が機能するには、データベース・サーバーが使用した証明書に署名したルートCAおよび中間CAの証明書をMCSに追加する必要があります。

  1. サーバー・ウォレットを作成および構成したときにデータベース・サーバー証明書の署名に使用したルートCAと中間CAの証明書をダウンロードします。
  2. MCS証明書のインポート・ウィザードを起動します。
  3. 「証明書インポート・ウィザードへようこそ」ページで、「現在のユーザー」オプションを選択し、「次へ」をクリックします。
  4. 「証明書ストア」ページで、「証明書の種類に基づいて、証明書ストアを自動的に選択する」オプションを選択し、「次へ」をクリックします。
  5. 「証明書インポート・ウィザードの完了」ページで、作成した設定を確認し、「終了」をクリックします。証明書インポート・ウィザードの確認ウィンドウで「OK」をクリックします。
  6. CAがMCSに正常にロードされたことを確認します。
    1. 左側の「コンソール・ルート」ツリーの「証明書 - 現在のユーザー」で、「信頼できるルート証明書」フォルダを展開します。
    2. 「証明書」フォルダを選択して、「証明書」ウィンドウを表示します。
    3. コンテンツを確認します。このウィンドウには、証明書の目的、発行先、発行者、および証明書の有効期限が記載されます。「OK」をクリックしてウィンドウを閉じます。
25.4.3.3.4 tnspingを使用したMicrosoft証明書ストア構成のテスト

tnspingユーティリティにより、Oracle serviceに正常に到達できるかどうかが決まります。

  1. クライアントで、選択したユーティリティを使用して、クライアントからデータベースへ構成されたTLSポート(つまり2484)へのTCP/IP接続が確立されていることを確認します。
    接続がないと思われる場合は、ネットワーク管理者およびシステム管理者と協力して、適切なファイアウォール、セキュリティ・リスト、ネットワーク・セキュリティ・グループなどで通信を許可するように構成されていることを確認します。
  2. tnsnames.oraファイルで定義したサービス別名に対してtnspingコマンド(デフォルトではORACLE_HOME/binディレクトリ内)を実行します。
    tnsping service_alias
  3. プロンプトが表示されたら、前に作成した外部Oracle Databaseユーザー・アカウントに関連付けた証明書を選択します。
    証明書の個人識別番号(PIN)を指定すると、次のような出力が表示されます:
    Used parameter files:
    
    [ORACLE_HOME]\network\admin\sqlnet.ora
    
    Used TNSNAMES adapter to resolve the alias
    
    Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCPS) (HOST = host_address) (PORT = 2484)) (CONNECT_DATA = (SERVICE_NAME = database_service_name]))
     (SECURITY = (SSL_SERVER_CERT_DN = CN=host_addres,other_attributes)))
    
    OK (4920 msec)

    応答時間は長く思われるかもしれません。表示される経過時間には、ユーザーがプロンプトに応答して証明書を選択するのにかかる時間が含まれるため、これは常に数秒になります。

25.4.3.3.5 SQL*Plusを使用したMicrosoft証明書ストア構成のテスト

SQL*Plusは、ユーザー、管理者およびプログラマが一般的に使用している最も基本的なOracle Databaseユーティリティであり、データベースに対するmTLSおよびユーザー認証の確認に使用できます。

  1. クライアントでは、クライアントtnsnames.oraファイルで以前に定義したサービス別名に対してSQL*Plusを実行します。
    sqlplus /@service_alias
  2. プロンプトが表示されたら、前に作成した外部Oracle Databaseユーザー・アカウントに関連付けた証明書を選択します。
    証明書の個人識別番号(PIN)を指定すると、次のような出力が表示されます:
    SQL*Plus: Release release - Production on Mon May 23 14:03:10 2022
    
    Version release
    
    Copyright (c) 1982, 2019, 2023 Oracle.  All rights reserved.
    
    Last Successful login time: Wed Oct 18 2023 16:47:43 +00:00
    
    Connected to:
    
    Oracle Database release - Production
    
    Version release
  3. 使用したクライアント証明書に関連付けられたユーザーとして接続していることを確認します。
    show user;
  4. TCPSプロトコルが使用されていることを確認します。
    SELECT SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') FROM DUAL;

    次のような出力が表示されます。

    SYS_CONTEXT('USERENV','NETWORK_PROTOCOL')
    --------------------------------------------------
    tcps

25.5 Oracleウォレットを使用するTransport Layer Securityを介した電子メールの構成

Oracleウォレット、PL/SQLパッケージおよびセキュリティ・アクセス制御リスト(ACL)を使用して、Transport Layer Security (TLS)接続を介した電子メールを構成できます。

  1. opensslを使用して、電子メール・サーバーからURL証明書を取得します。
    このステップは電子メール・サーバーで実行して、証明書チェーンを標準出力(stdout)にダンプできます。通常、このコマンドはサーバー証明書(cert 0)と信頼できる中間証明書(cert 1...n)をダンプします。たとえば:
    $ openssl s_client -showcerts -connect office365.com:443

    次のような出力が表示されます。

    depth=2 C = US, O = DigiCert Inc, CN = DigiCert Global Root CA
    verify return:1
    depth=1 C = US, O = DigiCert Inc, CN = DigiCert Cloud Services CA-1
    verify return:1
    depth=0 C = US, ST = Washington, L = Redmond, O = Microsoft Corporation, CN = outlook.com
    verify return:1
    ---
    Certificate chain
    0 s:/C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=outlook.com
    i:/C=US/O=DigiCert Inc/CN=DigiCert Cloud Services CA-1
    -----BEGIN CERTIFICATE-----
    ...
    -----END CERTIFICATE-----
    ...
    DONE
  2. この出力の証明書をコピーして、拡張子が.cerのテキスト・ファイルに貼り付けます。
    -----BEGIN CERTIFICATE -----の後および-----END CERTIFICATE-----の前に表示されるテキストをコピーする必要があります。ファイルの例は次のとおりです。
    • file_root.cer
    • file_trusted.cer
    • file_user.cer
  3. 証明書ファイルにコピーした各証明書のCA発行者およびCA件名を確認します。
    CA発行者は証明書を作成した会社であり、件名は証明書の作成時に提供された情報を示します。
    • ルート証明書を確認するには:
      openssl x509 -in file_root.cer -text | grep -i issuer
      Issuer: C=US, O=DigiCert Inc, CN=DigiCert Global Root CA
      
      openssl x509 -in file_root.cer -text | grep -i subject
      Subject: C=US, O=DigiCert Inc, CN=DigiCert Global Root CA
    • 信頼できる証明書を確認するには:
      openssl x509 -in file_trusted.cer -text | grep -i issuer
      Issuer: C=US, O=DigiCert Inc, CN=DigiCert Global Root CA
      
      openssl x509 -in file_trusted.cer -text | grep -i subject
      Subject: C=US, O=DigiCert Inc, CN=DigiCert SHA2 Secure Server CA
    • ユーザー証明書を確認するには:
      openssl x509 -in file_user.cer -text | grep -i issuer
      Issuer: C=US, O=DigiCert Inc, CN=DigiCert Global Root CA
      
      openssl x509 -in file_user.cer -text | grep -i subject
      Subject: C=US, O=DigiCert Inc, CN=DigiCert SHA2 Secure Server CA
  4. フォルダの場所を作成します。
    たとえば:
    mkdir app/oracle/product/network/admin/email
  5. ウォレットを作成し、その証明書をこのウォレットに追加します。
    1. 空のウォレットを作成します。
      たとえば:
      orapki wallet create -wallet wallet_file_directory -auto_login [-pwd wallet_password]

      pwdプロンプトを省略すると、パスワード・プロンプトが表示されます。セキュリティ向上のために、パスワードはコマンドラインで入力するのではなく、プロンプトで入力します。

    2. ウォレットに証明書を含めます。たとえば、次のようにします。
      orapki wallet add -wallet wallet_file_directory -trusted_cert -cert trusted.cer 
      [-pwd wallet_password]
  6. 電子メールのSQLコードを準備します。
    たとえば:
    ##############################################################################
    ##
    DECLARE
    k_host CONSTANT VARCHAR2(100) := 'us.example.com';
    k_port CONSTANT INTEGER := 587;
    k_wallet_path CONSTANT VARCHAR2(100) :=
    'file:app/oracle/product/network/admin/email';
    k_wallet_password CONSTANT VARCHAR2(100) := 'wallet_password';
    k_domain CONSTANT VARCHAR2(100) := 'localhost';
    k_username CONSTANT VARCHAR2(100) := 'email_account';
    k_password CONSTANT VARCHAR2(100) := 'email_account_password';
    k_sender CONSTANT VARCHAR2(100) := 'email_account';
    k_recipient CONSTANT VARCHAR2(100) := 'email_account_sending_too';
    k_subject CONSTANT VARCHAR2(100) := 'Test TLS mail';
    k_body CONSTANT VARCHAR2(100) := 'We Love Database Security';
    
    l_conn utl_smtp.connection;
    l_reply utl_smtp.reply;
    l_replies utl_smtp.replies;
    BEGIN
    dbms_output.put_line('utl_smtp.open_connection');
    
    l_reply := utl_smtp.open_connection
    ( host => k_host
    , port => k_port
    , c => l_conn
    , wallet_path => k_wallet_path
    , wallet_password => k_wallet_password
    , secure_connection_before_smtp => FALSE
    );
    
    IF l_reply.code != 220
    THEN
    raise_application_error(-20000, 'utl_smtp.open_connection: '||l_reply.code||'
    - '||l_reply.text);
    END IF;
    
    dbms_output.put_line('utl_smtp.ehlo');
    
    l_replies := utl_smtp.ehlo(l_conn, k_domain);
    
    FOR ri IN 1..l_replies.COUNT
    LOOP
    dbms_output.put_line(l_replies(ri).code||' - '||l_replies(ri).text);
    END LOOP;
    
    dbms_output.put_line('utl_smtp.starttls');
    
    l_reply := utl_smtp.starttls(l_conn);
    
    IF l_reply.code != 220
    THEN
    raise_application_error(-20000, 'utl_smtp.starttls: '||l_reply.code||' -
    '||l_reply.text);
    END IF;
    
    dbms_output.put_line('utl_smtp.ehlo');
    
    l_replies := utl_smtp.ehlo(l_conn, k_domain);
    
    FOR ri IN 1..l_replies.COUNT
    LOOP
    dbms_output.put_line(l_replies(ri).code||' - '||l_replies(ri).text);
    END LOOP;
    
    dbms_output.put_line('utl_smtp.auth');
    
    l_reply := utl_smtp.auth(l_conn, k_username, k_password,
    utl_smtp.all_schemes);
    
    IF l_reply.code != 235
    THEN
    raise_application_error(-20000, 'utl_smtp.auth: '||l_reply.code||' -
    '||l_reply.text);
    END IF;
    
    dbms_output.put_line('utl_smtp.mail');
    
    l_reply := utl_smtp.mail(l_conn, k_sender);
    
    IF l_reply.code != 250
    THEN
    raise_application_error(-20000, 'utl_smtp.mail: '||l_reply.code||' -
    '||l_reply.text);
    END IF;
    
    dbms_output.put_line('utl_smtp.rcpt');
    
    l_reply := utl_smtp.rcpt(l_conn, k_recipient);
    
    IF l_reply.code NOT IN (250, 251)
    THEN
    raise_application_error(-20000, 'utl_smtp.rcpt: '||l_reply.code||' -
    '||l_reply.text);
    END IF;
    
    dbms_output.put_line('utl_smtp.open_data');
    
    l_reply := utl_smtp.open_data(l_conn);
    
    IF l_reply.code != 354
    THEN
    raise_application_error(-20000, 'utl_smtp.open_data: '||l_reply.code||' -
    '||l_reply.text);
    END IF;
    
    dbms_output.put_line('utl_smtp.write_data');
    
    utl_smtp.write_data(l_conn, 'From: '||k_sender||utl_tcp.crlf);
    utl_smtp.write_data(l_conn, 'To: '||k_recipient||utl_tcp.crlf);
    utl_smtp.write_data(l_conn, 'Subject: '||k_subject||utl_tcp.crlf);
    utl_smtp.write_data(l_conn, utl_tcp.crlf||k_body);
    
    dbms_output.put_line('utl_smtp.close_data');
    
    l_reply := utl_smtp.close_data(l_conn);
    
    IF l_reply.code != 250
    THEN
    raise_application_error(-20000, 'utl_smtp.close_data: '||l_reply.code||' -
    '||l_reply.text);
    END IF;
    
    dbms_output.put_line('utl_smtp.quit');
    
    l_reply := utl_smtp.quit(l_conn);
    
    IF l_reply.code != 221
    THEN
    raise_application_error(-20000, 'utl_smtp.quit: '||l_reply.code||' -
    '||l_reply.text);
    END IF;
    
    EXCEPTION
    WHEN utl_smtp.transient_error
    OR utl_smtp.permanent_error
    THEN
    BEGIN
    utl_smtp.quit(l_conn);
    EXCEPTION
    WHEN utl_smtp.transient_error
    OR utl_smtp.permanent_error
    THEN
    NULL;
    END;
    
    raise_application_error(-20000, 'Failed to send mail due to the following
    error: '||SQLERRM);
    
    END;
    /
    

    secure_connection_before_smtpパラメータをFALSEに設定したことを確認します。これは、「電子メールの送信前にTLSを使用しない」に変換されます。TRUEに設定すると、TLSを介して電子メールを送信する場合のみ、次のエラーが生成されます。

    ERROR at line 1:
    ORA-29019: The protocol version is incorrect.
    ORA-06512: at "SYS.UTL_TCP", line 63
    ORA-06512: at "SYS.UTL_TCP", line 314
    ORA-06512: at "SYS.UTL_SMTP", line 177
    ORA-06512: at line 20
    
  7. 電子メールを送信するユーザーを作成します。
    たとえば:
    CREATE USER user_name IDENTIFIED BY password;
    GRANT CREATE SESSION TO user_name;
  8. ホストおよびウォレット・アクセス制御エントリ(ACE)をデフォルトのアクセス制御リスト(ACL)に追加します。
    1. ホスト・アクセス制御エントリ(ACE)を追加します。
      BEGIN
      DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE (
      host => 'us.example.com',
      lower_port => 587,
      upper_port => 587,
      ace => xs$ace_type(privilege_list => xs$name_list('http'),
      principal_name => 'user_name',
      principal_type => xs_acl.ptype_db));
      END;
      /
      
      BEGIN
      DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE (
      host => 'us.example.com',
      lower_port => 587,
      upper_port => 587,
      ace => xs$ace_type(privilege_list => xs$name_list('connect'),
      principal_name => 'user_name',
      principal_type => xs_acl.ptype_db));
      END;
      /
      
      BEGIN
      DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE (
      host => 'us.example.com',
      lower_port => null,
      upper_port => null,
      ace => xs$ace_type(privilege_list => xs$name_list('resolve'),
      principal_name => 'user_name',
      principal_type => xs_acl.ptype_db));
      END;
      /
    2. ウォレットACEを追加します。
      BEGIN
      DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE(
      wallet_path =>
      'file:/u01/64bit/app/oracle/product/network/admin/email',
      ace => xs$ace_type(privilege_list => xs$name_list('use_client_certificates',
      'use_passwords'),
      principal_name => 'user_name',
      principal_type => xs_acl.ptype_db));
      END;
      /

25.6 Transport Layer Securityエラーのトラブルシューティング

PKI証明書の構成のトラブルシューティングに役立つユーティリティの他、次の追加のガイダンスが用意されています。サポートのWebサイトから、PKI証明書による認証のクライアントおよびサーバー構成を確認してフィードバックを提供するためのユーティリティを入手できます。

「DBSecChk Utility 2.0.0.5 (ドキュメントID 3066006.1)」を参照してください。

25.6.1 ステップ1: tnspingユーティリティを使用したTLS接続の確認

tnspingユーティリティを使用した接続の確立により、データベース・サービスがTCPSエンドポイントのリスナーに登録されたことが示されます。

  • Oracleデータベースがインストールされているサーバーで、次の構文を使用してコマンドラインでtnspingコマンドを実行します。
    tnsping net_service_name [count]

    たとえば:

    tnsping sales count

    詳細は、次のとおりです。

    • net_service_name (sales)は、tnsnames.oraファイルに指定されたサービス名、またはNISなど、使用されているネーム・サービスです。
    • countはオプションで、プログラムがサーバーへの到達を試行する回数を指定します。

    次のような出力が表示されます。

    TNS Ping Utility for Linux: Version 23.0.0.0.0 - Production on 26-APR-2023 18:21:47
    
    Copyright (c) 1997, 2023, Oracle. All rights reserved.
    
    Used parameter files:
    $ORACLE_HOME/network/admin/sqlnet.ora
    
    Used TNSNAMES adapter to resolve the alias
    Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCPS)(HOST = host_name)(PORT = port)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = sales)))
    OK (30 msec)

    テストがTNS-12560: NS:protocol adapter errorエラーで失敗した場合は、sqlnet.oraおよびlistener.oraファイルの行に先頭に空白がないことを確認します。接続にまだエラーがある場合は、ウォレット・ファイルの権限やその他の設定の確認など、さらに調査する必要があります。

    tnspingユーティリティの使用に関する詳細は、Oracle Database Net Services管理者ガイドを参照してください。

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)によって使用される場合、ユーザーgridoinstallグループのメンバーである必要があります。権限は次のように変更できます。

$ 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_SMTPUTL_HTTPおよびUTL_TCPを使用することです。)

次のことに注意してください。

  • サーバーの場合: WALLET_ROOTパラメータを設定します。(WALLET_LOCATIONパラメータは引き続き使用できます。)信頼できる証明書とサーバー証明書の両方が必要です。
  • クライアントの場合: sqlnet.oraWALLET_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管理者ガイド』も参照してください。