AWS にて ACM の証明書の期限が切れたので、証明書を発行し直した

現在、自分のポートフォリオサイト（WordPress で作成）を AWS EC2 にて運用しております。

[かまだひとし公式サイト](https://kmd-htsh.com/)

ドメインは AWS Route 53 で取得し、AWS Certificate Manager（ACM）にて発
行した証明書を使って HTTPS 化を実現しております。
構成としては下記のサイトで紹介されている通りになります。

[AWS で Web サイトを HTTPS 化 その 1：ELB(+ACM 発行証明書)→EC2 編 – ナレコム AWS レシピ | AI に強い情報サイト](https://recipe.kc-cloud.jp/archives/11084)

つい先日、AWS の証明書が切れて https サイトにアクセスできなくなり、新たに証明書を発行し直しました。
今回は備忘録としてその手順をまとめます。

# きっかけ

きっかけは AWS から`Your certificate has expired`というタイトルのメールが届いたことです。
実は期限が切れる前に、`URGENT Action Required - Your certificate renewal`というタイトルのメールが届いていたのですが、確認するのが面倒で無視していました。
メールの内容を一部転載します。

> ACM was unable to automatically renew your certificate. The domain validation method for this certificate is email validation. This method requires the domain owner or someone authorized by the domain owner to take one of the following actions before Jun 03, 2021 at 12:00:00 UTC. If no action is taken, the certificate will expire, which might cause your website or application to become unreachable.
>
> 1. If you can write records into your DNS configuration, you can replace all of your existing email-validated certificates with DNS-validated certificates. After you add a CNAME record to your DNS configuration, ACM can automatically renew your certificate as long as the record remains in place. You can learn more about DNS validation in the ACM User Guide.[1]
> 2. If you want to continue using email validation to renew this certificate, the domain owners must use the approval link that was sent in a separate validation request email. The validation email is valid for 3 days. ACM customers can resend the validation email after receiving the first notification or any time up until 3 days after the certificate expires. For more information on how to resend a validation email, refer to the ACM User Guide.[2]
>
> If you have questions about this process, contact the AWS Support Center[3]. If you don’t have an AWS support plan, post a new thread in the AWS Certificate Manager discussion forum.[4]
>
> [1] https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-dns.html
>
> [2] http://docs.aws.amazon.com/acm/latest/userguide/request-domain-validation-email-for-renewal.html
>
> [3] https://console.aws.amazon.com/support
>
> [4] https://forums.aws.amazon.com/forum.jspa?forumID=206
> Sincerely,
> Amazon Web Services

どうやら証明書が自動更新できなかったので、1 か 2 のいずれかのアクションを取ってくださいとのことでした。

1. DNS 設定にレコードを書き込むことができれば、既存の電子メールで認証された証明書をすべて DNS で認証された証明書に置き換えることができます。DNS 構成に CNAME レコードを追加した後、レコードが残っている限り、ACM は証明書を自動的に更新できます。DNS の検証については、ACM ユーザーガイドで詳しく説明されています[[1]](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-dns.html)。
2. この証明書を更新するために電子メール検証を継続して使用する場合、ドメイン所有者は別の検証要求メールで送信された承認リンクを使用する必要があります。検証メールの有効期限は 3 日間です。ACM のお客様は最初の通知を受け取った後、または証明書の有効期限が切れる 3 日後までは、いつでも検証メールを再送できます。検証メールの再送方法については、ACM ユーザーガイドをご参照ください[[2]](http://docs.aws.amazon.com/acm/latest/userguide/request-domain-validation-email-for-renewal.html)。

期限が切れる前なら、いずれかの手順で更新できそうですが、気づいた時には期限が切れていたため、上記の手順では証明書を更新できなくなっていました。
この場合、証明書をもう一度発行し直す必要があります。

# ACM で署名のリクエストを行い、発行し直す

まず ACM を開き、`証明書のリクエスト`をクリックします。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93963/af5680f1-358d-78ce-f761-85132355891c.png)

次に証明書のタイプを選択します。今回は`パブリック証明書のリクエスト`を選択して`証明書のリクエスト`をクリックします。

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93963/c105e15c-ea71-7e54-836f-3305044d5101.png)

次にドメイン名を追加します。今回はもともと HTTPS 化していたドメインを入力して`次へ`をクリックします。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93963/5c98ba8a-46e9-e072-76e9-92c5c21b3e63.png)

次に検証方法を選択します。今回は`DNS の検証`を選択して`次へ`をクリックします。

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93963/1aab4409-4f7c-8db3-b174-274fd09c77a3.png)

次にタグを追加します。今回は何も追加せずにそのまま`確認`をクリックします。

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93963/be2275be-63d2-a076-2e4e-cd85bc23ec67.png)

最後にリクエスト内容を確認します。問題なければ`確定とリクエスト`をクリックします。

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93963/4933effc-be50-70fe-0679-8111df02b5f2.png)

最初の画面に戻り、`Route 53 でのレコードの作成`をクリックします（画像上では既に作成済みのため押せなくなっていますが、本来は押せるはずです）。

![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93963/8f83c0fb-2854-44e5-98a0-49dbb38616e9.png)

しばらく待つと、検証状態が`成功`となり、状況が`発行済み`となるはずです。
これで証明書の発行は完了です。

# EC2 にて ELB のリスナーを再追加する

まず EC2 のロードバランサーのページを開き、画面下部の`リスナー`タブから`リスナーの追加`をクリックします。

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93963/19a54eaf-6c65-e1c6-3173-623369ef9130.png)

プロトコルとポートをそれぞれ`HTTPS`、`443`にします（画像上ではすでに作成済みのため警告が出ていますが、本来は出てこないはずです）。
セキュリティポリシーは`ELBSecurityPolicy-2016-08`（おそらく以前と同じ項目を選択すれば大丈夫です）を選択します。
デフォルトの SSL 証明書は、前項で作成した証明書を選択します。
最後に`リスナーの追加`をクリックします（画像上では既に作成済みのため押せなくなっていますが、本来は押せるはずです）。

![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93963/487dcb4c-6018-e8fc-c524-56cdeb8d3544.png)

これで証明書が更新され、サイトにもアクセスできるようになっているはずです。

# まとめ

ACM の証明書の更新手順をまとめました。
AWS はドキュメントがわかりづらいので、きちんと備忘録として残しておいた方がよさそうです。
また、証明書の期限が切れると急にアクセスできなくなります。
英語のメールがきて面倒だなと思ったとしても、ちゃんと目は通しておくべきでした。