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?

More than 3 years have passed since last update.

Windows上にOracle DatabaseをセットアップしてSSL接続する方法

Last updated at Posted at 2021-09-30

#はじめに

この記事では、OCIで作成したWindowsのコンピュートインスタンスにOracle Database 19cをインストールし、TCPS(SSL)で接続する手順を示します。

構築手順は以下です。

  1. Public Subnet内に踏み台インスタンスbastion01を作成
  2. Private Subnet内にWindowsインスタンスWin01を作成
  3. bastion01経由でWin01に接続
  4. Win01にOracle Databaseをインストール
  5. TCPS接続の設定
  6. 接続できるか確認

#1.Public Subnet内に踏み台インスタンスbastion01を作成
事前にVCNウィザードを使ってVCNを作成しておきます。
今回は、Public SubnetのCIDRブロック:10.0.0.0/24
Private SubnetのCIDRブロック:10.0.1.0/24として作成しています。

次にOCIコンソールのマーケットプレイスからOracle Cloud Developer Imageを使って踏み台インスタンスを作成します。
developer_image1.jpg

#2. Private Subnet内にWindowsインスタンスWin01を作成
インスタンス作成ページから、イメージWindows Server 2019 Standardを選択します。
windows.jpg
今回はPrivate Subnet内に作成するので、プライベートIPアドレスのみ設定されます。

#3.bastion01経由でWin01に接続
今回はPUTTYを使用してWin01に接続します。
以下のように、[Connection]→[SSH]→[Tunnels]からポートフォワーディング設定をします。
putty_3389.jpg
Source Port:任意の空いているポート番号(本記事では3399)
Destination:{WindowsインスタンスのプライベートIPアドレス}:3389

上記の設定をAddして接続します。
リモートデスクトップ接続を許可するため、Private Subnetのイングレス・ルールにPublic Subnetからの3389番ポートを追加します。
rdp_accept.jpg

次にリモートデスクトップ接続を起動し、localhost:{上で指定したSource Port}を設定します。
rdp.jpg
Windowsが起動できたら、opcのログイン画面が表示されます。初期パスワードはOCIコンソールに記載されています。
win_pw.jpg

※初回ログイン後はパスワードの変更が求められます。

#4.Win01にOracle Databaseをインストール
opcにログイン後の初期状態では、ブラウザはInternet Explorerしかありません。
Oracle softwareはGoogle Chrome、Mozilla Firefox、Apple Safari、Microsoft Edgeが推奨されています。
今回はFirefoxをダウンロードします。

※補足
Internet Explorerの初期設定ではファイルのダウンロードが許可されていないため、
[ブラウザの設定]→[Internet options]→[Security]→[custom level...]→[Downloads]→File downloadをEnableに変更します。

ダウンロード後、FirefoxでこちらからOracle Databaseのイメージファイルをダウンロードします。

インストール前にOracleホーム・ユーザーを作成しておきます。
今回は以下のようにoracleというユーザーをWindowsアカウントとして追加します。
oracle_account.jpg
続いてoracleユーザーにリモートアクセスを許可します。
[コントロールパネル]→[システムとセキュリティ]→[システム欄のリモートアクセスの許可]→[ユーザーの選択]→[追加]
以下のようにoracleユーザーにリモートアクセスを許可します。
remote_access.jpg

続いてOracleベースとOracleホームとなるフォルダを作成しておきます。
Oracleベースは、C:\app\oracle
Oracleホームは、C:\app\oracle\product\19.3.0\dbhome_1とします。

次に、先ほどダウンロードしたイメージファイル(zipファイル)をOracleホームに展開します。
extract.jpg
展開後、Oracleホームに展開されたsetup.exeを実行します。
以下のようにインストール設定をします。
install1.jpg
システム・クラスはServer classを選択します。
install2.jpg
インストール・タイプはTypical installを選択します。
install3.jpg
Oracleホームユーザーは、既存のWindowsユーザーを選択し、先ほど作成したoracleユーザーを指定します。
install4.jpg
※ここで『仮想アカウントの使用』を選択すると、TCPS接続が上手くいかないことがあるので、あらかじめ別のWindowsユーザーを作成しておき、それをOracleホーム・ユーザーとして設定する手順を推奨しています。

今回は、EditionはStandard Edition2とします。
OracleベースとOracleホームを正常に作成していれば、デフォルトで入力されている状態になります。
install5.jpg
以下の設定で問題なければインストールを開始します。
install6.jpg

#5.TCPS接続の設定
インストール完了後、Windowsにoracleユーザーでログインし直します。
PowerShellを開き、以下のコマンドでOracleホームに移動します。

cd C:\app\oracle\product\19.3.0\dbhome_1

まずはSQL Plusでデータベースに接続できるか確認してみましょう。

sqlplus / as sysdba

接続できたら、検証用のサンプルスキーマ(HR)を作成します。こちらの「2. 移行対象となるHRスキーマをインストール」~「3. サンプルスキーマ(HR)への接続、スキーマの確認」を参考に、HRスキーマに接続できるようにします。
HRスキーマが作成できたら、ORACLEホームに戻り、TCPS接続の設定を行います。

1.ウォレット用のフォルダ作成

mkdir server\wallet
mkdir client\wallet

2.サーバー用ウォレットの作成
Oracleホーム直下server\walletに移動し以下のコマンドを実行します。

orapki wallet create -wallet ./ -pwd Oracle123456 -auto_login
orapki wallet add -wallet ./ -pwd Oracle123456 -dn "CN=Win" -keysize 1024 -self_signed -validity 3650 -sign_alg sha256

3.クライアント用ウォレットの作成
Oracleホーム直下client\walletに移動し、以下のコマンドを実行します。

orapki wallet create -wallet ./ -pwd Oracle123456 -auto_login
orapki wallet add -wallet ./ -pwd Oracle123456 -dn "CN=client" -keysize 1024 -self_signed -validity 3650 -sign_alg sha256

4.証明書の交換
ルートフォルダに移動し、tmpフォルダを作成します。

cd \
mkdir tmp

Oracleホーム直下server\walletに移動し、サーバー証明書をエクスポートします。

orapki wallet export -wallet ./ -pwd Oracle123456 -dn "CN=Win" -cert /tmp/server.crt

Oracleホーム直下client\walletに移動し、クライアント証明書をエクスポートします。

orapki wallet export -wallet ./ -pwd Oracle123456 -dn "CN=client" -cert /tmp/client.crt

Oracleホーム直下server\walletに移動し、サーバーのウォレットにクライアント証明書をインポートします。

orapki wallet add -wallet ./ -pwd Oracle123456 -trusted_cert -cert /tmp/client.crt

Oracleホーム直下client\walletに移動し、クライアントのウォレットにサーバー証明書をインポートします。

orapki wallet add -wallet ./ -pwd Oracle123456 -trusted_cert -cert /tmp/server.crt

証明書が正しくインポートされているか確認します。

orapki wallet display -wallet .

以下のように表示されていれば、証明書の交換は成功です。
orapkidisplay.jpg
5. ネットワーク構成ファイルにウォレットのフォルダを追加
Oracleホーム直下のnetwork\adminに移動し、listener.oraを編集します。
ウォレットのディレクトリを追加するため、以下を追記します。

wallet_location =
  (SOURCE=
 (METHOD=File)
 (METHOD_DATA=
   (DIRECTORY=C:\app\oracle\product\19.3.0\dbhome_1\server\wallet)))

また、リスナーにTCPSエンドポイントを追加するため、以下を追記します。

(ADDRESS = (PROTOCOL = TCPS)(HOST = 10.0.1.226)(PORT = 1522))

listener.jpg
次に、sqlnet.oraに以下を追記します。

wallet_location =
  (SOURCE=
 (METHOD=File)
 (METHOD_DATA=
   (DIRECTORY=C:\app\oracle\product\19.3.0\dbhome_1\server\wallet)))

SSL_SERVER_DN_MATCH=(ON)

ローカルでTCPS接続できるようにするため、tnsnames.oraにORCLPDB2というネットサービスを追記します。
サービスはorclpdbというデフォルトのPDBに設定しています。

ORCLPDB2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCPS)(HOST = 10.0.1.226)(PORT = 1522))
    (CONNECT_DATA =
      (SERVICE_NAME = orclpdb)
    )
    (SECURITY =
      (SSL_SERVER_CERT_DN = "CN=Win")
    )
  )

リスナーの再起動を行います。oracleユーザーではlsnrctl startコマンドを実行できないため、管理者権限で起動したPowerShellで実行します。

lsnrctl stop listener
lsnrctl start listener

以下のコマンドでTCPSのエンドポイントが追加されているか確認します。

lsnrctl status

lsnrstatus.jpg
上記が確認できたら、次にTCPS接続で使用する1522番ポートを開放します。
[コントロールパネル]→[システムとセキュリティ]→[Windows Defender ファイアウォール]→[詳細設定]で受信の規則、送信の規則に1522番ポートを追加します。
ここまでで、Windowsで行う設定は以上になります。

次にOCIコンソールからPrivate Subnetのイングレス・ルールに1522番ポートを追加します。
privatesl.jpg

#6. 接続できるか確認
まずはSYSでデータベースに接続します。

sqlplus / as sysdba

PDBが起動しているか確認します。

show pdbs

ORCLPDBがMOUNTEDの場合、以下で起動させます。

alter pluggable database orclpdb open;

起動できたら、『5.TCPS接続の設定』で指定したHRスキーマで接続します。

connect HR/WelCome123#123#@orclpdb2

接続できたら以下のSQLを実行します。

select * from countries;

25個の国名が表示されれば成功です。
select-result.jpg

これでWindows上のOracle DatabaseにローカルでTCPS(SSL)接続できるようになりました。

#エラーへの対応例

  • 『ORA-28759: ファイルのオープンに失敗しました』が発生する場合
    sqlnet.ora、listener.oraファイルに正しいウォレット・ロケーションが指定されていることを確認してください。

  • 『ORA-28865:SSL接続はクローズしました』、『ORA-28864: SSL接続は正常にクローズしました』が発生する場合
    Oracleホームユーザーにウォレットファイル(cwallet.sso)の読み取り権限があることを確認してください。

  • 『ORA-29003:SSLトランスポートがサーバー証明書の不一致を検出しました』が発生する場合
    tnsnames.oraの接続記述子に(SECURITY=(SSL_SERVER_CERT_DN="CN=Win"))句があるか確認してください。

  • 『ORA-12224: TNS: リスナーがありません』が発生する場合
    管理者権限でlsnrctl start listenerでリスナーを起動してください。
    再起動後1分程待ち、lsnrctl statusで正常に起動しているか確認します。
    サービスを正しく認識していない場合は、sqlplus / as sysdba で接続し、初期化パラメータlocal_listenerを確認します。

show parameter local_listener

デフォルトはLISTENER_<ORACLE_SID>になっています。この初期化パラメータに何らかの変更をしているとサービスが認識されない場合があるので、以下のコマンドで修正します。

alter system set local_listener="LISTENER_<ORACLE_SID>";
  • データベースへの接続がタイムアウトする場合
    OCIのセキュリティリストとWindowsのポート設定を見直してください。必要なポートが空いていない可能性があります。

以下の記事では、今回構築したWindows上のOracle DatabaseとAutonomous Database間のデータベース・リンクの構築手順を紹介しています。

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?