【メモ】SpringアプリケーションでHTTPSを有効化：AWS利用

実際にやってみたときのメモです。

#### そもそもの話
SSLって何？とかは、以下参照。
[【勉強メモ】SSL/TLSとhttp/httpsの違い - Qiita](https://qiita.com/43z335/items/7e9252071392de0c385c)

### 前提事項
* アプリケーションは、EC2上で稼働させる
* Route53 → ALB → EC2の構成で実行。HTTPSはRoute53 → ALB間のみ。
* ドメインはAWSでも取得できるが、有料のため、無料のFreenomで取得。
[【図解】DNSサーバーとは？設定・変更と確認方法 | カゴヤのサーバー研究室](https://www.kagoya.jp/howto/rentalserver/dns-server/)

# 手順

### 作業の流れ
1. ドメインを取得
1. Route53のホストゾーン作成
1. ACM（Amazon Certificate Manager）でSSL証明書を取得
1. ALB作成（SSL証明書の設定も併せて実施）
1. Route53にALBのAレコード登録
1. アプリを稼働させてhttpsでリクエスト
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/4b322403-e064-938d-b004-cfab3abc35c9.png)

## ドメインの取得

[無料のドメインを取得する - Qiita](https://qiita.com/teekay/items/135dc67e39f24997019e)
[無料ドメイン(.tk)とRoute53を利用して0円でHTTPS環境を設定してみた | DevelopersIO](https://dev.classmethod.jp/articles/mesoko-r53-cdn/)

:::note warn
[今すぐ入手]を押す前に、「xxxx.tk」等、ドメインの最後まで入力する必要あり
（.xxを入力してない場合、取得不可で先に進めない）
:::


## Route53設定
### ホストゾーンの作成
`Route53`の`ホストゾーン`で、[ホストゾーンの作成] を押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/60ceac3a-9672-70cc-eedf-cb8e8fd7fe91.png)

### ホストゾーンの設定
取得したドメイン名を入力し、[ホストゾーンの作成]を押す。
作成後。CNAMEレコードを登録のためメモする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/835e3c74-4278-8f71-a2a0-408b4dec39ea.png)

### NSレコードの確認
登録のために、NSレコード（4件）の内容をコピーする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/211d82b1-d271-7298-66aa-3fdb5f599c90.png)

## ネームサーバの登録
`Services▼`メニューの`My Domains`を選択し、対象のドメイン欄の`Managed Domain`ボタンを押す。
`Management Tools▼`メニューの`Nameservers`で設定を行う。
NSレコードを4件とも登録する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/d64d9447-3fe4-3509-39b8-748419ec9d0f.png)


## Certificate Manager（ACM）でSSL証明書を取得
### 証明書のプロビジョニング
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/ac7975ed-d0be-b622-b960-9b1c03c3f88f.png)

### パブリック証明書をリクエストする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/3c94661f-7598-7488-9f35-2a33adfc6f65.png)

:::note warn
ドメイン名はワイルドカード証明書（*.～）として作成する。
（後のALBのAレコード設定時に必要なため）
:::

### ドメイン名の追加
取得したドメインを入力して [次へ] 。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/16a99577-b424-91dc-b0f2-89321276660a.png)

### 検証方法の選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/7f642a99-d67c-0916-8f13-ef0ec3309e69.png)

### タグを追加（任意）
タグ管理したいときのみ、タグを追加する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/57556e45-b86e-7c63-abae-df75b3155551.png)

### 確認とリクエスト
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/109b1a61-d500-4d89-7cea-0cada794d1fc.png)

## 検証（CMANEレコードの設定と、検証リクエスト）
ドメインのDNS（Route53）にCNAMEレコードを設定する。
Route53を使う場合、`[Route53でのレコード作成]` ボタンを押すことで、自動で登録してくれる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/fa648921-80eb-f9ed-0655-c2b7f4024115.png)

`[作成]`ボタンを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/67844fc1-d546-c002-d504-b6947546126f.png)

ACMのメニューで、検証が成功し、発行済になっていることを確認。
（Route53を使った場合は、30分以内で完了できる）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/f01fa1a1-975e-075a-967b-ec3733289475.png)

## ALBの作成
以下の内容で作成。
（詳細手順は、別記事「[【メモ】AWSでApplication Load Balancerの作成](https://qiita.com/43z335/items/20076a451d4bff722caa)」参照）

|設定箇所|設定内容|
|:--|:--|
|ロードバランサーの種類の選択|`Application Load Balancer`|
|【手順1：ロードバランサーの設定】<br>ロードバランサーのプロトコル|`HTTPS`|
|【手順 2: セキュリティ設定の構成】<br>デフォルトの証明書の選択|ACMで作成したSSL証明書|

## Route53にALBのAレコード登録
`Route53`の`ホストゾーン`で、作成済のものを選択し、`[レコードを作成]`。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/d5ac288b-d537-2524-a145-8190ad00398f.png)

`エイリアス`を押し、各項目の設定を行う。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/0efc2988-e8a9-be43-9033-e9d81abcd132.png)

:::note warn
レコード名がhttp/httpsリクエスト時のドメインの名前になるので注意。
「bbb.aaa.com」にした場合、アクセス方法は「http(or https)://bbb.aaa.com」になる。
:::

|項目|内容|
|:--|:--|
|レコード名|作成するレコードの名前。|
|レコードタイプ|`A - IPv4アドレスと一部のAWSリソースにトラフックをルーティングします。`|
|トラフックのルーティング先|作成したALB（ロードバランサー）を選択。|
|ルーティングポリシー|使いたいものを選択。<br>`シンプルルーティング`…Webサーバーなど 1リソースのみにルーティングする。<br> `加重`…同じジョブを実行する複数のリソースがあり、各リソースへのトラフィックの割合を指定する。<br> `位置情報`…ユーザーの場所によりルーティング。<br> `レイテンシー`…複数リージョンにリソースがあり、レイテンシーが最適なリージョンにルーティングする。<br> `フェイルオーバー`…リソースが正常時はそのリソースに、異常時は別のリソースにルーティングする。<br> `複数値回答`…Route 53が DNSのクエリに対し、ランダムに選択された最大 8 つの正常なレコードを返す。|
|ターゲットのヘルスを評価|指定したリソースが正常時のみ、Route 53がこのレコードを使用してDNSクエリに応答する。|

### 参考サイト
[AWS運用には無料のSSL証明書を活用しよう！（取得も簡単、難易度低です） | AWS運用最適化サービス cloud link (クラウドリンク)](https://aws.taf-jp.com/blog/37623)