Certificate Managerで無料SSL証明書を発行しhttpsでサイトが見れるようになるまで

# 経緯
- 自作のサイトにhttpsで接続することになりました。
- 調べるとAWSでは無料でSSL証明書を発行できるようです。
- で、やってみました。

「AWSの無料SSL対応したいのだけどどうすれば・・」という方向けです。
間違いあれば指摘して頂けると嬉しいです。

# やること
- Certificate Managerで証明書発行
- ELBでロードバランサを作成、アタッチ
- Route53でAlias設定
- Amazon LinuxのApache設定

※Amazon Linux上では既に何らかのウェブサイトが稼働していて、httpでブラウザから見れる状態とします。
※ドメインもRoute53で設定済みの状態とします。
※Apacheは2.4系です

# 本編
## Certificate Managerで証明書発行
<img width="1576" alt="スクリーンショット 2018-02-26 17.34.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/214400/d6872575-ad0d-84b2-0d32-34ee2d5eb666.png">

「証明書のリクエスト」をクリックします。

<img width="1579" alt="スクリーンショット 2018-02-26 17.35.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/214400/4536367d-b7ee-1163-d7df-c548c6693b29.png">

設定したいドメイン名を入力し次へ。

<img width="1578" alt="スクリーンショット 2018-02-26 17.35.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/214400/7378f6b8-11e3-01c0-7335-8d9330125adb.png">

「Eメールの検証」を選択し次へ
Eメールを選択するとドメインのwhoisに設定されたメールアドレス、または特定のメールアドレスにメールが来ます。
ここは後述します。
DNSの方は、、よく分からんかった

<img width="1578" alt="スクリーンショット 2018-02-26 17.35.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/214400/7c1b399c-0878-92be-14e3-f47b8aec2e0d.png">

「確定とリクエスト」をクリックします。

メールについては、お名前など使っている場合whoisのメルアドが自分らのものではありません。
AWSのFAQに**お客様によってリクエストされたドメイン名の前に admin@、administrator@、hostmaster@、webmaster@、および postmaster@ を付加して生成された 5 つの特別なメールアドレスにも E メールが送られます。**とあるので、この辺りのアドレスを受信可能な状態にしてメールを受け取ります。
https://aws.amazon.com/jp/certificate-manager/faqs/

メール内の承認用リンクをクリックすると承認が完了します。

## ELBでロードバランサを作成、アタッチ
Certificate Managerで作成した証明書はEC2に直接設定することはできません。
ELBにアタッチしての使用となります。

<img width="1580" alt="スクリーンショット 2018-02-27 11.19.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/214400/f069be65-081f-9bf9-5a2e-b20e3a840c54.png">

「ロードバランサーの作成」をクリック

<img width="1576" alt="スクリーンショット 2018-02-27 11.19.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/214400/628742d1-d6c2-8f95-042b-3818ce4374de.png">

「Application Load Balancer」を選択

<img width="1581" alt="スクリーンショット 2018-02-27 11.20.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/214400/16659e50-29d2-ceb3-25c4-0855d4eed46b.png">

名前：好きな名前を
スキーマ：インターネット向け
アドレスタイプ：ipv4

リスナー：HTTPの他にHTTPSを追加

アベイラビリティーゾーン：全部チェック

「セキュリティ設定の構成」をクリック

<img width="1578" alt="スクリーンショット 2018-02-27 11.21.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/214400/edda714c-8076-0f36-1243-fc3dcb9e1f80.png">

ここで先ほどの証明書が登場します。

証明書タイプ：「ACMから証明書を選択する（推奨）」を選択し、下のプルダウンから先ほど作成した証明書を選択します。
セキュリティーポリシー：特にいじってないです

<img width="1580" alt="スクリーンショット 2018-02-27 11.21.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/214400/73e04188-e656-281c-6c71-f5beaf9c3a70.png">

セキュリティグループの設定ではHTTP、HTTPS、SSHが通るよう設定しました。

<img width="1578" alt="スクリーンショット 2018-02-27 11.21.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/214400/2b0df535-c30d-fc44-7ea8-a6149ba9eedb.png">

ルーティングの設定は、名前を決めただけで後はデフォルト

<img width="1580" alt="スクリーンショット 2018-02-27 11.22.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/214400/b2a3a0eb-8b94-1953-1e3d-6a63a8632741.png">

ターゲットの登録で、インスタンスを選択します

<img width="1577" alt="スクリーンショット 2018-02-27 11.22.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/214400/93f3f9f3-90c0-7fbd-4c98-d3f174b23a40.png">

これでELBの設定は完了です。


## Route53でAlias設定

<img width="410" alt="スクリーンショット 2018-02-26 17.56.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/214400/47137972-7ef7-b4dc-f730-3cb24c88e42f.png">

既にRoute53を使っていた場合、ドメインの設定がCNAMEでEC2のIPを打っていたと思いますが、
AliasをYesにするとAlias Targetに先ほど作成したELBが現れるのでそれを選択します。
選択したら「Save Record Set」をクリックし確定します。

## Amazon LinuxのApache設定
Route53でエイリアスまで設定してブラウザからhttpsで見ようとすると
502 Bad Requestとなりました。

apacheのerror_logを確認するとmod_sslが入っていないとの事だったので設定します。

### mod24_sslインストール

```console:console
$ sudo yum install -y mod24_ssl
```
### バーチャルホスト設定

```console:hoge.conf
<VirtualHost *:80>
    DocumentRoot /var/www/hoge/fuga/piyo
    ServerName hoge.fuga.com

    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

    <Directory "/var/www/hoge/fuga/piyo">
        Options Indexes FollowSymlinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
```

### apache再起動

```console:console
$ sudo service httpd restart
```


# 参考
https://qiita.com/ozw/items/05a6f4d1addaa557f70a
https://qiita.com/michimani/items/88973c5e2ae76a8e84aa
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/SSL-on-an-instance.html
https://aws.amazon.com/jp/certificate-manager/faqs/