[OCI] WAFにSSL証明書を追加して通信経路をHTTPSで暗号化する

OCI ロードバランサに無償のSSL証明書を追加しHTTPS通信ができたので、続いてWAFにもSSL証明書を追加して、ブラウザからオリジンとなるロードバランサまでの経路全体でのHTTPS通信の暗号化ができるか試してみます。

[[OCI] ロードバランサにSSL証明書を設定しHTTPS通信を試してみた](https://qiita.com/cocotaro0202/items/18f5eeefed140060324d)

# お試し環境
構成は以下のイメージです。ロードバランサは既に構成済みなので今回はWAFの設定をメインにおこないます。

![image-20201221153259939.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/134bdff9-48ba-e1f7-10ad-b0cbd8745a1b.png)

# 前提

- OCI WAFの動作のしくみ、基本の設定方法についてはこちらをご参考ください。

  - [ネットワーク初心者が OCI WAF で不正アクセスを防御できるか試してみた (設定と保護ルール編)](https://qiita.com/cocotaro0202/items/7384241014302ad346fe)

  

- オリジンは構成済みのロードバランサとしています。

  - ロードバランサには既にSSL証明書を追加しており、動作確認済みです。
  - [[OCI] ロードバランサにSSL証明書を設定しHTTPS通信を試してみた](https://qiita.com/cocotaro0202/items/18f5eeefed140060324d)
  - WAFからはドメイン名ではなく、**IPアドレスを指定**して接続します。
  - ドメイン名（例) lb.cocotaro.com）はWAF呼出しに使うため、登録済みのDNS Aレコードからはいったん削除します。

# WAF の設定 

## 1. WAFポリシー作成

はじめにWAFポリシーを作成し、WAFのエンドポイント(CNAMEレコード)を取得します。左上のナビゲーションメニューから[セキュリティ] - [Webアプリケーション・ファイアウォール] から**WAFポリシーの作成**をおこないます。
![image-20201224165656473.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/1300d517-9866-9c9a-69da-8451283ab807.png)

**[名前]** 任意の名前を入力
**ドメイン**
**[プライマリ・ドメイン]** ブラウザから呼び出すドメインを指定 （例) lb.cocotaro.com）
**WAFオリジン**
**[URI]** オリジン（ロードバランサ）のグローバルIPアドレスを指定（例) 168.138.XXX.XXX）

**WAFポリシーの作成** をクリックすると、WAFのCNAME（WAF呼出しのエンドポイント）が表示されるのでコピーしておきます。

## 2. WAFエンドポイントの登録

続いて、ナビゲーションメニューから[ネットワーキング] - [DNS管理] - [ゾーン]を遷移し、既存のDNSゾーンを選択。左のリソースからレコードをクリックし**レコードの追加**をおこないます。

![image-20201224165849331.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/07f86532-46d5-82d4-6fed-a0d66e09a677.png)

**[レコード型]** CNAME を選択
**[名前]** ブラウザからの呼出しのドメイン（例) lb.cocotaro.com）を指定
**[TARGET(ターゲット)]** WAFポリシー作成時のCNAME（WAFのエンドポイント）を指定

![image-20201224170228727.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/09069bd0-7341-3b1d-4838-c7a4c3d2bd0c.png)
CNAMEレコードが追加されました。

しばらくして、nslookup を実行しCNAMEレコードが機能しているかを確認できました。これによりブラウザからのリクエストはWAFエンドポイントに転送されます。

![image-20201224170732735.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/32588047-c251-b2f2-9d26-78f132b65f6f.png)

## 3. Webアプリの動作確認

ブラウザからリクエストして、WAF  → ロードバランサ → Webアプリ までが動作しているかを確認します。

![image-20201224170948276.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/760a51de-83a6-ecb2-f03f-2fd661cb0872.png)
Webアプリからは正常にサーバー名が返されましたが、この時点では通常のHTTP通信のため、ブラウザとWAFの間は暗号化はされていません。ブラウザにはセキュアな接続でない旨の表示がされています。

![image-20201224171131950.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/92bf30af-471a-db81-fccd-86f8954b32a3.png)

## 4. WAFにSSL証明書を追加

続いて、WAFにSSL証明書を追加して、ブラウザとWAFの間の暗号化を図ります。再び、ナビゲーションメニューから[セキュリティ] - [Webアプリケーション・ファイアウォール] をクリック、構成済みの**WAFポリシー**を選択。

左のWAFポリシーから**設定** をクリックし、設定画面が表示されたら**編集** をクリックするとHTTPSサポートの編集画面が表示されます。

![image-20201224171319026.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/10324a39-0025-9460-2516-2604a9650b34.png)
HTTPSサポート設定でSSL証明書を追加して、HTTPSを有効化します。

![image-20201224171439286.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/02cf7451-e88d-7535-375c-ed65a65011a5.png)
**[HTTPSサポートの有効化]** チェックして有効化
**証明書と秘密キーのアップロードまたは貼り付け** を選択し、
**証明書ファイル (cert.pem)**と**秘密キー（privkey.pem）** をそれぞれアップロードします。

**変更の保存** で**HTTPSサポート有効**が保存されました。
![image-20201224171816225.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/082aeeba-235d-8f7a-eefc-b70057d206d2.png)
続いて、**変更の公開**をおこないます。
![image-20201225064358886.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/349c21c3-6055-a87e-9a24-9f6cf08bcd7d.png)

グローバルで約20拠点程に配備されている OCI WAFの拠点(Edge PoP(Points of Presence))に変更が反映されるまでに約30分前後要します。コーヒーブレークして変更が反映されるのを気長に待ちましょう。
![image-20201224172034234.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/9d3ccda2-846b-bc8f-71b8-e1e247cc6074.png)

# 動作確認

SSL証明書を追加して**変更の公開**が完了したので、HTTPS通信が有効になっているかを確認します。

ブラウザからでリクエスト(例)https://lb.cocotaro.com) すると、鍵マークが表示されるようになりました。ブラウザは Google Chrome を使用。鍵マークをクリックするとSSL証明書が有効化されており、HTTPS通信が機能し暗号化によりセキュアな通信が行われることが確認できました。
![image-20201224172434661.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/79ba18af-d9b4-0bfc-2afd-c3e7571ac2e3.png)