本記事は、2026年4月21日に内容を見直し、再構成しました。
Oracle DatabaseのIDプロバイダーとの認証連携に必要なTLSで接続するためのデータベースとクライアントの設定方法について紹介します。Oracle DatabaseがTCPSでリスニングしていない場合は、以下の手順を参考に追加して下さい。
また、BaseDBやExaDB-DのクラウドのOracle Databaseは既にポート2484でTCPSをリスニングしているので、クライアント側でTLS接続するための設定を追加します。
Orace Databaseの設定
#1. TLSのための暗号鍵とサーバー証明書を作成する ※ディレクトリはお好みで
$ mkdir /home/oracle/wallet
$ cd /home/oracle/wallet
$ orapki wallet create -wallet . -pwd xxxxx -auto_login
$ orapki wallet add -wallet . -pwd xxxxx -dn "CN=`hostname`" -keysize 2048 -self_signed -validity 3650
$ orapki wallet export -wallet . -pwd xxxxx -dn "CN=`hostname`" -cert dbcert.crt
$ cat dbcert.crt
#2.sqlnet.oraでネットワーク暗号化に関するパラメータがあればコメントアウトする。
#TLSは認証と暗号化を両方提供するため、ネットワークのネイティブ暗号とは併用できない
$ vi $ORACLE_HOME/network/admin/sqlnet.ora
#コメントアウト
#SQLNET.ENCRYPTION_SERVER=REQUIRED
#SQLNET.CRYPTO_CHECKSUM_SERVER=REQUIRED
#SQLNET.ENCRYPTION_TYPES_SERVER=(AES256,AES192,AES128)
#SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER=(SHA256,SHA384,SHA512,SHA1)
#SQLNET.ENCRYPTION_CLIENT=REQUIRED
#SQLNET.CRYPTO_CHECKSUM_CLIENT=REQUIRED
#SQLNET.ENCRYPTION_TYPES_CLIENT=(AES256,AES192,AES128)
#SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT=(SHA256,SHA384,SHA512,SHA1)
#SQLNET.EXPIRE_TIME=10
#以下を追記 ※SSL1.3は対応バージョンであれば可
SSL_CLIENT_AUTHENTICATION=FALSE
SSL_VERSION=1.2
WALLET_LOCATION=(SOURCE=(METHOD=File)(METHOD_DATA=(DIRECTORY=/home/oracle/wallet)))
#3.リスナーファイルの編集
$ vi $ORACLE_HOME/network/admin/listener.ora
#以下を追記
SSL_CLIENT_AUTHENTICATION=FALSE
SSL_VERSION=1.2
WALLET_LOCATION=(SOURCE=(METHOD=File)(METHOD_DATA=(DIRECTORY=/home/oracle/wallet)))
#リスナーはTCPS,1522をリスニングするように追記
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST = ホスト名)(PORT = 1522)) <---この部分
)
)
#<設定例>
#SSL_CLIENT_AUTHENTICATION=FALSE
#SSL_VERSION=1.2
#WALLET_LOCATION=(SOURCE=(METHOD=File)(METHOD_DATA=(DIRECTORY=/home/oracle/wallet)))
#
#LISTENER =
# (DESCRIPTION_LIST =
# (DESCRIPTION =
# (ADDRESS = (PROTOCOL = TcP)(HOST = db23ai4iam)(PORT = 1521))
# (ADDRESS = (PROTOCOL = TCPS)(HOST = db23ai4iam)(PORT = 1522))
# (ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER))
# )
# )
#4.リスナー再起動、walletファイルの読み取りエラーが出ていなければOK
$ lsnrctl stop
$ lsnrctl start
#5.リスナーがTCPS 1522でリスニングできていることを確認
$ lsnrctl status
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 23.0.0.0.0 - for Oracle Cloud and Engineered Systems
Start Date 22-JUL-2025 03:09:11
Uptime 0 days 0 hr. 1 min. 14 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/23.0.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/db23ai4iam/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=xx.xx.xx.xx.xx)(PORT=1522))) <---この部分
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xx.xx.xx.xx.xx)(PORT=1521)))
Services Summary...
#6.opensslのコマンドで結果がサーバー証明書の結果が返ってくることを確認しておく
$ openssl s_client -connect ホスト名:1522
#<実行例>
#$ openssl s_client -connect db23ai4iam:1522
CONNECTED(00000003)
depth=0 CN = db23ai4iam
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = db23ai4iam
verify return:1
---
Certificate chain
0 s:CN = db23ai4iam
i:CN = db23ai4iam
---
Server certificate
-----BEGIN CERTIFICATE-----
MIICrjCCAZYCEQCGc2eoU35bbZysckq/FNYZMA0GCSqGSIb3DQEBCwUAMBUxEzAR
BgNVBAMTCmRiMjNhaTRpYW0wHhcNMjUwNzE3MDY0OTM3WhcNMzUwNzE1MDY0OTM3
WjAVMRMwEQYDVQQDEwpkYjIzYWk0aWFtMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEAjIjXhmqu6lKwXl5WbrlW23MpZz3DSKew14S8zgjVJJIcfTuJr/hK
VmZqpaiqAQ35rmc5VuH5MsAAMRU5uXQup0cJUFEE9DjjqqUBkF7R5NWzL6RKhq8O
クライアント側の設定
データベースに接続するクライアントは、データベース・サーバーのホスト名を名前解決できる必要がある
Client Walletを使用するTLS接続
サーバー側で作成したcwallet.ssoとewallet.p12をクライアントのディレクトリにコピーする
--tnsnames.oraに追記
TLS =
(DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCPS)
(HOST = ホスト名)
(PORT = 1522)
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = サービス名)
)
(SECURITY =
(MY_WALLET_DIRECTORY = Client Walletのディレクトリ)
)
)
--接続確認
$ sqlplus user/password@TLS
Client Walletを使用しないTLS接続
#サーバー証明書をDBから取り出しクライアント自身にインポートする
$ openssl s_client -connect Databaseのホスト名:1522 2>/dev/null </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > dbcert.crt
#例)
#$ openssl s_client -connect db23ai4iam:1522 2>/dev/null </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > dbcert.crt
$ sudo cp dbcert.crt /etc/pki/ca-trust/source/anchors/
$ sudo update-ca-trust
#tnsnames.oraに追記
TLS =
(DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCPS)
(HOST = ホスト名)
(PORT = 1522)
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = サービス名)
)
)
#接続確認
$ sqlplus user/password@TLS
トラブルシューティング
設定がうまくいかない場合は、トレースログを出力することで原因を調査する
#クライアント側のsqlnet.oraに以下を追加
EVENT_25701=15
DIAG_ADR_ENABLED=TRUE
ADR_BASE=/home/opc
これでデータベースにTLSで接続できるようになりましたので、Entra IDまたはOCI IAMとのトークンベースの認証連携の設定に進みます。