1
0

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 Base DatabaseでTLS通信を有効化する

Last updated at Posted at 2023-09-11

本記事では、Oracle Cloudで提供しているクラウドのOracle Database「Base Database」でTLS通信を有効化する手順を紹介します。

今回はPDBでTLS通信を有効化した後、LinuxのコンピュートインスタンスにDatabase Clientをインストールし、クライアントからTLS通信でPDBにSQL*Plusでアクセスできることを確認します。

前提条件

  • Base Databaseインスタンスを作成していること
  • Linuxのコンピュートインスタンスを作成していること
  • Base Databaseインスタンスがあるサブネットのセキュリティ・ルールもしくはNetwork Security Groupにてポート1522が開放されていること

1. Walletの作成

Base DatabaseインスタンスにDBA権限でアクセスし、以下SQLでWallet Rootのディレクトリを確認します。

SQL*Plus
$sqlplus / as sysdba
SQL> show parameter wallet_root;
/opt/oracle/dcs/commonstore/wallets/DB23c_rwc_nrt

以下SQLでPDBのGUID名を確認します。

SQLPlus
SQL> select PDB_NAME, GUID from DBA_PDBS;
 DB23C_PDB1
02616F7B5BE15F03E063E700000A4BF9

Wallet Rootのディレクトリに、PDBのWalletを格納するディレクトリを作成します。

$mkdir /opt/oracle/dcs/commonstore/wallets/DB23c_rwc_nrt/<PDBのGUID名>/tls

例)
$mkdir /opt/oracle/dcs/commonstore/wallets/DB23c_rwc_nrt/02616F7B5BE15F03E063E700000A4BF9/tls

作成したディレクトリ内でWalletを作成します。
※PDBのサービス名は別途lsnrctl statusで確認してください。

/opt/oracle/dcs/commonstore/wallets/DB23c_rwc_nrt//tls
$pwd
/opt/oracle/dcs/commonstore/wallets/DB23c_rwc_nrt/02616F7B5BE15F03E063E700000A4BF9/tls
$orapki wallet create -wallet . -pwd <パスワード> -auto_login
$orapki wallet add -wallet . -pwd <パスワード> -dn "CN=<DBのホスト名>" -keysize 2048 -self_signed -validity 3650
例)
$orapki wallet add -wallet . -pwd <パスワード> -dn "CN=db23c_pdb1.sub09140234280.vcntest.oraclevcn.com" -keysize 2048 -self_signed -validity 3650
$orapki wallet export -wallet . -pwd <パスワード> -dn "CN=db23c_pdb1.sub09140234280.vcntest.oraclevcn.com" -cert dbsec.crt

2. tnsnames.oraファイルの修正

Base Databaseのtnsnames.oraファイルを修正し、DatabaseにTLSのポート1522で通信ができるように設定します。

tnsnames.ora
#PORTの値を1522に変更
$vi $ORACLE_HOME/network/admin/tnsnames.ora
LISTENER_DB23C =
  (ADDRESS = (PROTOCOL = TCPS)(HOST = db23c)(PORT = 1522))

#PORTの値を1522に変更
DB23C_RWC_NRT =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCPS)(HOST = db23c)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = DB23c_rwc_nrt.sub09140234280.vcntest.oraclevcn.com)
    )
  )

#PDBの接続情報を追加
DB23C_PDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCPS)(HOST = 10.0.0.231)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = db23c_pdb1.sub09140234280.vcntest.oraclevcn.com)
    )
  )

3. sqlnet.oraファイルの修正

続いてsqlnet.oraファイルを修正し、以下3行を追記します。

sqlnet.ora
SSL_CLIENT_AUTHENTICATION=FALSE
SSL_VERSION=1.2
WALLET_LOCATION=(SOURCE=(METHOD=File)(METHOD_DATA=(DIRECTORY=/opt/oracle/dcs/commonstore/wallets/DB23c_rwc_nrt/02616F7B5BE15F03E063E700000A4BF9/tls)))

4. listener.oraファイルの修正

gridユーザーに切り替えて、sqlnet.oraファイルに追記した3行をlistener.oraファイルにも追記します。
また、LISTENERの定義情報を以下のように修正します

listener.ora
$sudo su - grid
$vi /u01/app/23.0.0/grid/network/admin

#以下3行を追記
SSL_CLIENT_AUTHENTICATION=FALSE
SSL_VERSION=1.2
WALLET_LOCATION=(SOURCE=(METHOD=File)(METHOD_DATA=(DIRECTORY=/opt/oracle/dcs/commonstore/wallets/DB23c_rwc_nrt/02616F7B5BE15F03E063E700000A4BF9/tls)))

# LISTNERの定義情報を以下のように修正
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCPS)(HOST = <Base DatabaseのプライベートIP>)(PORT = 1522))
      (ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER))
      (ADDRESS = (PROTOCOL = TcP)(HOST = <Base DatabaseのプライベートIP>)(PORT = 1521))
    )
  )

5.リスナーの再起動

gridユーザーでリスナーを再起動します。

$lsnrctl stop
$lsnrctl start

6. Databaseの再起動

続いてDatabaseを再起動します。

SQL*Plus
SQL> shutdown immediate
SQL> startup

7. iptablesの設定

Base Databaseはiptablesの機能を使用してパケットフィルタリングされています。
デフォルトでポート1521は許可されていますが、ポート1522は許可されていないので、iptablesの設定を変更してクライアントからポート1522を使用してBase Databaseにアクセスができるようにします。

$sudo su - 
$vi /etc/sysconfig/iptables
#以下1行を追記
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1522 -j ACCEPT

$service iptables restart
$service iptables status
# ステータスがactiveになっていることを確認

Redirecting to /bin/systemctl status iptables.service
● iptables.service - IPv4 firewall with iptables
   Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled)
   Active: active(exited) since Sat 2023-08-26 22:39:57 UTC; 1 day 8h ago
  Process: 1476 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)
 Main PID: 1476 (code=exited, status=0/SUCCESS)
    Tasks: 0 (limit: 189387)
   Memory: 0B
   CGroup: /system.slice/iptables.service

8. クライアントの設定

以下OracleのサイトからLinux用のOracle Instant ClientのBasicパッケージ(RPM)とSQL*Plusパッケージ(RPM)それぞれバージョン19をダウンロードします。

ダウンロードしたRPMファイルをscpコマンドやWinSCPなどを用いて、Linuxのコンピュートにコピーし、インストールします。

$sudo yum install oracle-instantclient19.19-basic-19.19.0.0.0-1.x86_64.rpm
$sudo yum install oracle-instantclient19.19-sqlplus-19.19.0.0.0-1.x86_64.rpm

#TNS_ADMINの環境変数を設定します。
$export TNS_ADMIN=/usr/lib/oracle/19.19/client64/lib/network/admin

TNS_ADMINのディレクトリ配下にsqlnet.oraファイルとtnsnames.oraファイルを作成します。

sqlnet.ora
$sudo vi /usr/lib/oracle/19.19/client64/lib/network/admin/sqlnet.ora
#以下2行を記入します。
SSL_CLIENT_AUTHENTICATION = FALSE
SSL_VERSION = 1.2
tnsnames.ora
#Base Databaseへの接続情報を定義します。今回はBase Database側のtnsnames.oraファイルを同じ接続情報を記入します。
DB23C_RWC_NRT =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCPS)(HOST = 10.0.0.231)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = DB23c_rwc_nrt.sub09140234280.vcntest.oraclevcn.com)
    )
  )

DB23C_PDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCPS)(HOST = 10.0.0.231)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = db23c_pdb1.sub09140234280.vcntest.oraclevcn.com)
    )
  )

9. 証明書のインポート(クライアント)

クライアント側で以下コマンドを実行し、手順1で作成した証明書をクライアントにインポートします。

$openssl s_client -connect <Databaseのサービス名>:1522 2>/dev/null </dev/null |  sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > tls.crt

例)
$openssl s_client -connect DB23c_rwc_nrt.sub09140234280.vcntest.oraclevcn.com:1522 2>/dev/null </dev/null |  sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > tls.crt

$sudo cp tls.crt /etc/pki/ca-trust/source/anchors/
$sudo update-ca-trust

以上の手順でクライアント側の設定は完了です。
クライアントからSQL*PlusでPDBに接続できれば、設定は正しくできています。

$sqlplus <PBDのユーザー名>/<パスワード>@PDBの接続詞

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Aug 23 04:12:46 2023
Version 19.19.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

Last Successful login time: Wed Aug 23 2023 02:07:27 +00:00

Connected to:
Oracle Database 23c EE High Perf Release 23.0.0.0.0 - Beta
Version 23.2.0.0.0

SQL> 

以上でBase DatabaseにおけるTLSの構成の設定は完了です。
万が一PDBにクライアントから接続できなかった場合、VCNのセキュリティ・リストやNetwork Security Groupでポート1522の接続が許可されているかなどを見直してみてください。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?