26 Transport Layer Security認証の構成

Transport Layer Security認証を使用するようにOracle Databaseを構成できます。

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を変更します。

  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

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

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

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

      ノート:

      データベース・クライアントとサーバーは、最強のTLSプロトコルと暗号スイートを使用して接続を確立するようになります。そのため、このTLSバージョンと暗号スイートは、それが必要になる特定のセキュリティ要件がないかぎり、指定する必要はありません。特定のTLSバージョンと暗号スイートを設定する場合は、古いバージョンが使用されなくなったときに構成の更新が必要になる点に注意してください。
  3. 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以外の必須接続の場合はそのままにします。
    3. データベース・サーバーがリスナーではなくクライアントを認証するように、sqlnet.oraファイルにSSL_CLIENT_AUTHENTICATION = FALSEを追加します。リスナーではクライアント認証は必要ありません。
      サーバーが使用するものと同じウォレットを、同じサーバー証明書とともにリスナーで使用できます。リスナーは、標準のOracle Databaseウォレット検索順序を使用してウォレットを検索するようになります。または、WALLET_LOCATIONパラメータを設定すると、リスナーのウォレットの場所を指定できます。(リスナーでは使用できないため、この目的にWALLET_ROOTパラメータは使用できません)。
  4. 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に設定します。

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

26.4 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, OU = www.digicert.com, 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, OU=www.digicert.com, CN=DigiCert Global Root CA
      
      openssl x509 -in file_root.cer -text | grep -i subject
      Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA
    • 信頼できる証明書を確認するには:
      openssl x509 -in file_trusted.cer -text | grep -i issuer
      Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, 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, OU=www.digicert.com, 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;
      /

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

Oracleでは、接続エラーや認証エラーなど、Transport Layer Security (TLS)構成に問題がある場合、いくつかのトラブルシューティング・タスクが提供されます。

26.5.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管理者ガイドを参照してください。

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)によって使用される場合、ユーザー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

26.5.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,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管理者ガイド』も参照してください。