Open Liberty ベースのPod から Db2 on CloudへのSSLでの接続方法

Open Liberty、あるいはWebSphere LibertyベースのPod（Javaアプリ搭載）からDb2 on IBM Cloud へのDBアクセスにて、SSLでのDB接続する部分の設定について記載します。

数々の記事を見ながらcloudやkubernetes環境の自習を進めていたのですが、ある時点からDb2 on CloudへのDB接続方法がLiteプランではSSL接続に限定されるようになったようで、この設定に若干時間を費やしてしまったので、設定方法をシェアします。

#1. WebSphere Liberty ベースのPodの前提
1.ベースとなる WebSphere Liberty イメージをDocker Hub から取得します。
2.単純なDBアクセスするアプリ（warファイル）、server.xml、JDBCドライバーファイル、DBサーバーのSSL証明書ファイルを、取得したイメージに組み入れて、新たなイメージを作成します。
3.作成したイメージをIBM Cloud上のワーカーノードにデプロイします。

当記事は、上の2.の「関連ファイルの入手と設定」について記述し、イメージ作成やデプロイ方法はここでは割愛します。他の記事を参照ください。

#2. DB接続情報の確認
接続情報(ホスト名、ポート番号、データベース名、ユーザーID、パスワード)とSSL証明書ファイルをweb consoleから取得しておきます。

1.　IBM Cloudのダッシュボードの左上のメニューから「リソース・リスト」を選択
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1718068/a997994c-709f-6b7b-679a-ab0795871122.png)

2.「Services」をクリックして開き、接続したいDb2の名前をクリック 
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1718068/527ccd08-e728-384f-a7e5-c9688e4bcdee.png)

3.「サービス資格情報」をクリック
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1718068/784d387f-9815-a1db-25d4-34deec1570b1.png)

4.表示されたサービス資格情報をクリックして、内容を表示する。
![図4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1718068/2c1f9acc-81a8-70fd-e27c-e16e28cc0e07.png)
 様々な形式でユーザーIDとパスワード情報が書いてありますが、
 -uと-pの値や
![図5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1718068/0d044c2e-934c-b99a-7dac-6936b37a4aca.png) 
 usernameとpasswordの値が
 接続時に使用するユーザーDとパスワードになります。

5.「管理」をクリックし「Go to UI」ボタンのクリックにより、Db2　Webコンソールを開く。
![図6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1718068/b5669932-21b5-76b6-16bc-dd066e387854.png)

　　左上のメニューをクリックし、「管理」をクリックする。
　　「Linux」の手順を参照する。
![図7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1718068/8c0cd61f-6c5e-3d71-fed0-601ec6feb28a.png)


「接続構成リソース」から以下の情報を取得する。

ホスト名
ポート番号
データベース名

#3. SSL証明書の取得
同じページにある「SSL証明書のダウンロード」ボタンをクリックしてをSSL証明書をダウンロードする

#4. JDBCドライバーの入手
Db2 にアクセスするための JDBC ドライバーです（db2jcc4.jar ）。

同じページにある「Linuxドライバー・パッケージのダウンロード元」のリンクから、記載されているファイル名のドライバー・パッケージをダウンロードします。

ダウンロードの詳細な手順は割愛しますが、 IBM ID が必要になりますのでご留意ください。
このファイルを何度か展開し、中にある db2jcc4.jar ファイルを取得します。

#5. server.xmlの編集
これは、WebSphere Liberty のメインの設定ファイルで、この中で各種設定を行っています。
今回はDBへのSSL接続に関連する部分のみ記述します。

```xml
<?xml version="1.0" encoding="UTF-8"?>
<server description="Default server">

    <!-- Enable features -->
    <featureManager>
        <feature>jdbc-4.2</feature>
        ・・・略・・・
    </featureManager>
    
     <dataSource id="dataSource01" jndiName="jdbc/ds1">
        <properties.db2.jcc
            serverName="xxxxxxxxxxxxxxxxxx"
            portNumber="31198"
            databaseName="bludb"
            user="xxxxxx" 
            password="xxxxxxxx"
            sslConnection="true"
            sslCertLocation="/config/ssl/xxxxxxxx.cer"
        />
        <jdbcDriver libraryRef="DB2JCCLib"/>
    </dataSource>
    <library id="DB2JCCLib">
           <fileset dir="/config/jdbc/" includes="db2jcc4.jar"/>
    </library>

</server>
```

・feature
　利用する機能を設定するところで、今回はjdbc-4.2を追加しています。
・dataSource
　　・jndiNameはアプリケーション側で指定したJNDI名を設定します
　　・serverName、portNumber、databaseName、user（ユーザー名）、passwordは先ほどDBの資格情報で確認したものを設定します。
　　・sslConnectionをtrueに、sslCertLocationでDBサーバーのSSL証明書の保管場所を示します。
　　　SSL証明書を組み入れてDockerイメージを作成しますが、その時に指定するパスを設定します。
　・JDBCドライバーも同様に、libraryのfilesetでDockerイメージを作成時に指定したパスを設定します。

*SSL証明書は、kdb作成等の設定が必要かと調査していましたが、ダウンロードした証明書（cerファイル）をそのまま指定して接続できました。

以上です。

## 参考にさせていただいた投稿
@shimauma_Zzzzzさん、ありがとうございます。

[IKS + Db2 on IBM Cloud で DBアクセスアプリを動かしてみた（1.概要）]
(https://qiita.com/shimauma_Zzzzz/items/9a513abdf02d11fff55b)

## 参考資料
[Open Liberty server.xmlでのData Source]
(https://www.openliberty.io/docs/21.0.0.6/reference/config/dataSource.html)
[Database connections with TLS]
(https://openliberty.io/blog/2021/06/04/database-ssl-primer.html)