参考資料は以下。
マニュアルには記載されていないが、この方法は19cのとあるRU以降からしか使えないことに注意。
DBサーバ側の設定
DBサーバはLinuxの想定。
ウォレット(自動ログインウォレット)を作成。今回はホームディレクトリ配下に作成し、-pwd オプションでパスワードも直接指定している。
mkdir -p /home/oracle/wallet
orapki wallet create -wallet /home/oracle/wallet/tls -auto_login -pwd Oracle.1234
自己署名のルート証明書をウォレットに追加。
orapki wallet add -wallet /home/oracle/wallet/tls -dn 'CN=root_test,C=US' -keysize 2048 -self_signed -validity 3650 -pwd Oracle.1234
ユーザ証明書の証明書リクエストをウォレットに追加。
orapki wallet add -wallet /home/oracle/wallet/tls -dn 'CN=server_test,C=US' -keysize 2048 -pwd Oracle.1234
証明書リクエストをウォレットからファイルにエクスポート。
orapki wallet export -wallet /home/oracle/wallet/tls -dn 'CN=server_test,C=US' -request /home/oracle/csr.txt
証明書リクエストから署名付きユーザ証明書を作成。
orapki cert create -wallet /home/oracle/wallet/tls -request /home/oracle/csr.txt -cert /home/oracle/cert.txt -validity 3650 -pwd Oracle.1234
orapki cert display -cert /home/oracle/cert.txt -complete
作成したユーザ証明書をウォレットに追加。
orapki wallet add -wallet /home/oracle/wallet/tls -user_cert -cert /home/oracle/cert.txt -pwd Oracle.1234
sqlnet.ora に以下を追記。
AUTHENTICATION_SERVICES=(tcps)
SSL_CLIENT_AUTHENTICATION=FALSE
WALLET_LOCATION=(SOURCE=(METHOD=file)(METHOD_DATA=(DIRECTORY=/home/oracle/wallet/tls)))
listener.ora に以下を追記し、既存の設定(PROTOCOL)をTCPSに修正。
SSL_CLIENT_AUTHENTICATION=FALSE
WALLET_LOCATION=(SOURCE=(METHOD=file)(METHOD_DATA=(DIRECTORY=/home/oracle/wallet/tls)))
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST = ol8db19.dn.home)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
local_listenerの動的登録用に tnsnames.ora の PROTOCOLも修正。
LISTENER_DB19 =
(ADDRESS = (PROTOCOL = TCPS)(HOST = ol8db19.dn.home)(PORT = 1521))
ルート証明書をファイルにエクスポート。
orapki wallet export -wallet /home/oracle/wallet/tls -dn 'CN=root_test,C=US' -cert /home/oracle/cacert.txt
ルート証明書をOSのシステム信頼ストアに追加してアップデートをかける(rootユーザで)。
cp /home/oracle/cacert.txt /etc/pki/ca-trust/source/anchors
update-ca-trust
この状態でリスナーとDBを(再)起動。リスナーにサービスが動的登録されていることを確認する。
[oracle@ol8db19 ~]$ lsnrctl status
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 27-4月 -2024 22:09:48
Copyright (c) 1991, 2022, Oracle. All rights reserved.
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=ol8db19.dn.home)(PORT=1521)))に接続中
リスナーのステータス
------------------------
別名 LISTENER
バージョン TNSLSNR for Linux: Version 19.0.0.0.0 - Production
開始日 27-4月 -2024 22:09:20
稼働時間 0 日 0 時間 0 分 28 秒
トレース・レベル off
セキュリティ ON: Local OS Authentication
SNMP OFF
パラメータ・ファイル /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora
ログ・ファイル /u01/app/oracle/diag/tnslsnr/ol8db19/listener/alert/log.xml
リスニング・エンドポイントのサマリー...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=ol8db19.dn.home)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
サービスのサマリー...
サービス"db19"には、1件のインスタンスがあります。
インスタンス"db19"、状態READYには、このサービスに対する1件のハンドラがあります...
サービス"db19XDB"には、1件のインスタンスがあります。
インスタンス"db19"、状態READYには、このサービスに対する1件のハンドラがあります...
コマンドは正常に終了しました。
クライアント側の設定(Linux)
サーバ側で出力したルート証明書をクライアントにコピーする。
scp oracle@ol8db19.dn.home:/home/oracle/cacert.txt /etc/pki/ca-trust/source/anchors
OSのシステム信頼ストアをリフレッシュ。
update-ca-trust
sqlnet.ora に以下を追記。
SQLNET.SSL_CLIENT_AUTHENTICATION=FALSE
tnsnames.ora に接続記述子を追加。SECURITY の WALLET_LOCATION でシステム信頼ストアを設定しているのがポイント。
OL8DB19 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST = ol8db19.dn.home)(PORT = 1521))
(SECURITY=(WALLET_LOCATION=SYSTEM))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db19)
)
)
接続テスト。USERENV の NETWORK_PROTOCOL が TCPS に切り替わっていれば成功。
[oracle@oradbs admin]$ sqlplus system/oracle@ol8db19
SQL*Plus: Release 19.0.0.0.0 - Production on 土 4月 27 22:14:44 2024
Version 19.14.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
最終正常ログイン時間: 土 4月 27 2024 22:14:29 +09:00
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.18.0.0.0
に接続されました。
SQL> SELECT SYS_CONTEXT ('USERENV', 'NETWORK_PROTOCOL') FROM DUAL;
SYS_CONTEXT('USERENV','NETWORK_PROTOCOL')
--------------------------------------------------------------------------------
tcps
クライアント側の設定(Windows)
サーバ側で出力したルート証明書をクライアントにコピーし、拡張子を .cer に変更する。
証明書をダブルクリックで開き、「証明書のインストール」を押下。
保存場所にローカル コンピューターを選択。
「証明書をすべて次のストアに配置する」を選択し、参照ボタンで「信頼されたルート証明機関」を選択する。
ルート証明書のインポートが完了したら、sqlnet.ora に以下を追記。
SQLNET.SSL_CLIENT_AUTHENTICATION=FALSE
tnsnames.ora に接続記述子を追加。SECURITY の WALLET_LOCATION でシステム信頼ストアを設定しているのがポイント。
OL8DB19 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST = ol8db19.dn.home)(PORT = 1521))
(SECURITY=(WALLET_LOCATION=SYSTEM))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db19)
)
)
接続テスト。USERENV の NETWORK_PROTOCOL が TCPS に切り替わっていれば成功。
コメント