AWSでWebサイトをHTTPS化する覚書

# はじめに
AWSで作成したWebサイトをHTTPS化する手順について記載します。

# 内容
下記の順番で実施していきますが紆余曲折があってキャプチャの前後関係がおかしいところがありますが、ご了承ください。

* Webサイトの準備
* ドメインを取得する
* 取得したドメインをDNSに登録する
* 証明書を発行する
* ELBに証明書付きドメインをアタッチ

##Webサイトの準備
あらかじめEC2で作成したWebサイトを準備します。EC2のWebサイト構築は「[はじめてのAWSその2 EC2のサーバを構築する](https://qiita.com/talomina/items/d470a6f8c9b813d839fd)」にて記載しています。

## ドメインを取得する
Route53でドメインを買うこともできますが、今回はフリーのドメインを取得することにしました。

* [Freenom](https://www.freenom.com/ja/index.html)のサイトでほしいドメインの利用可能状況をチェックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/82e7a234-91ad-5847-d8b6-552103341170.png)

* 無料(0.00USD)のドメインを今すぐ入手！します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/94d2d1ff-2a5f-ecc4-a1ac-d96593cd2794.png)

* E-MailアドレスをVerifyしてドメインを取得することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/824cf97c-e065-7d73-5c18-adc9c2afdefa.png)

##取得したドメインをDNSに登録する
AWSのDNSサービスであるRoute53に取得したドメインを登録していきます。このホストゾーンには0.5USD/月ほどの料金が掛かりますので注意です。

* Route53でホストゾーンの作成を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/95dfd060-baf3-3083-5df3-90205b426bb5.png)

* ドメイン名に先ほど取得したものを入力してホストゾーンの作成をクリックします。タイプはパブリックとしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/54b226e5-9f7a-6bb2-5472-5e41caebc9ad.png)

* ホストゾーンができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/b85b5ba8-33ac-136d-2fcf-9e0a98fd77ae.png)

* ホストゾーンのNSレコードにある4つのRoute53ドメインサーバを、Freenumに登録します。

```
ns-380.awsdns-47.com.
ns-1571.awsdns-04.co.uk.
ns-1431.awsdns-50.org.
ns-823.awsdns-38.net.
```


* Freenumのサイトに戻ってMyDomainsからManage Domainボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/e72780a4-74cb-8317-6a72-f7825ffc797f.png)

* Management toolメニューからName Serversを選んでUse custom nameservers (enter below)を押します。すると利用するNameserverを選ぶことができるので、Rout53のNSレコードにあった4つのNameserverの情報をインプットしてChange Nameserversをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/963fcc0f-1c53-e086-f143-ec90b7ad45e0.png)

* 無事にNameserverが登録できました。これにより、取得したドメインの名前解決は、Route53のネームサーバーが使われることになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/e96d2299-e63b-dc09-9d5d-f4c55f8817f4.png)

##証明書を発行する
取得したドメインに対して証明書を発行します。ELBでも*.amazonaws.comのようなパブリックドメインが割り当てられますが、こういったAWSのドメインには証明書を発行できないようになっています。

* Amazon Certificate Managerの画面で証明書のプロビジョニングを「今すぐ始める」します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/f777100b-a597-9d65-dcd5-ac8214020feb.png)

* 「パブリック証明書のリクエスト」を選んで「証明書のリクエスト」をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/aeeced32-c7e3-a1ff-02c4-db9ebd9dee06.png)

* 「ドメイン名」に取得したドメイン名を入れて「次へ」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/1466903f-ba0a-7c71-0f97-a14d75a74a53.png)

* 検証方法はDNSの検証を選びます。ここでメール検証を選ぶと、ドメインの管理者あてにメールが発行されて、Verifyするやり方になります。今回はドメインの管理者といっても名前を借りてきているだけなのでDNS検証の方が都合よいのです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/d6e23307-a67c-2f92-73da-09e7b1d5c2ca.png)

* 適当な名前を付けて次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/b00b1c47-ad71-acf2-a8e6-34b59398acea.png)

* 確認画面で「確認とリクエスト」します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/fe9d5bb9-f120-c2e3-991f-3667505e0ac2.png)

* 検証の画面が出てきて「検証保留中」となります。「DNS設定をファイルにエクスポート」します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/c6fde64d-c1e1-4a5d-8b11-ae2753f68fc4.png)

* 下記のようなCSVファイルが来ますのでこれをもとにRoute53に設定しに行きます。

```CSV:DNS_Configuration.csv
Domain Name,Record Name,Record Type,Record Value
talomina.tk,_3622途中省略ae31.talomina.tk.,CNAME,_772c1途中省略3884.nfyddsqlcy.acm-validations.aws.

```

* Route53にてCSVの内容でドメインのレコードを作成します。ここでレコードを作成できることがドメインの所有者であることの証明になって、ACMは証明書を発行するというわけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/52683740-71ee-950e-4acc-ff7811ba1f65.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/4f5e779d-df79-aa9b-c4b5-7d1ec4527f4f.png)

* ACMに戻って10分ほど待つと無事に検証が終わりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/747cf27e-9413-7fe1-7d97-91b4d3ce6f0f.png)

##ELBにドメインを紐づける
ELBの環境構築の細かい部分は「[AWSでELB環境を作るための覚書](https://qiita.com/talomina/items/79277eda3dec13fa8be2)」で記載しました。

* まずはHTTPのターゲットグループを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/9b2c2700-c04b-e23e-7510-cf28407a3d4b.png)

* ELBでApplication Load Balancerを作成します。その際リスナーとしてHTTPSを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/2bcddbcd-bb84-6ca5-8bfd-cbac8d7b529e.png)

* HTTPSのセキュリティ設定を行う画面で「ACMからの証明書を選択する」と、先ほど取得した証明書をアタッチできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/1d8c4c86-1f94-fa50-3799-5f05dbb89f22.png)
* あとは通常通りロードバランサを作成します。
    * セキュリティグループのインバウンド側はHTTPS(443)をセットします。
    * ターゲットグループにはHTTP(80)で接続します。

* 今度は作成したELBをRoute53のホストゾーンに登録します。レコード作成をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/b85b5ba8-33ac-136d-2fcf-9e0a98fd77ae.png)

* レコード名はブランク、レコードタイプはA、トラフィックのルーティング先はエイリアス指定に切り替えることでELBを選択することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/9c361337-b4f7-2553-f0e3-9989e41ac03b.png)

* Aレコードを作成してしばらく待つとHTTPSで接続できるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/0bbf4eb8-26c7-1674-8ac6-8e46eef5cbf2.png)

* 立派な証明書ももらえました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/1f9290a0-1df6-a973-1144-daa0cb334e73.png)

# おわりに
ACMの証明書はサーバ認証という簡易的なものですが、[パブリックSSLに関しては無料](https://aws.amazon.com/jp/certificate-manager/pricing/)で利用できます。Route53は[ホストゾーンの維持に少々料金がかかります](https://aws.amazon.com/jp/route53/pricing/)ので注意。また今回無料のドメインを取得しましたが、Route53で購入すればすべてAWS内で完結することができるので非常にラクですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/3392959a-20bd-909f-4fb5-ac6ce5a751fb.png)

とはいえ、いろいろな手間を考えると、Webサイトを作るだけなら[レンタルサーバ](https://www.sakura.ne.jp/)を利用したほうが圧倒的に手間もコストも少ないと感じました。

# 参考文献
* [AWSでSSL化する方法を伝授！！！
](https://qiita.com/nakanishi03/items/3a514026acc7abe25977)
* [【ドメイン取得】お名前.comとawsでドメイン取得](https://qiita.com/nakanishi03/items/25278fb4dfad60ebfac4)