5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle DatabaseのTLS認証の設定方法

5
Last updated at Posted at 2024-02-01

本記事は、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とのトークンベースの認証連携の設定に進みます。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?