今回はAmazon Certificate Manager(=ACM)利用時にSSL証明書の自動更新が失敗したときのことを記載致します。
■エラー内容について
以下件名でAWSからメールが届きます。
件名: Your certificate is renewed
メール文面を以下のような感じです。
ACM was unable to automatically renew your certificate.
和訳すると以下の通りです。
ACMでは証明書を自動更新できませんでした。
■対応方法(概要)
原因については後述しますが、まずは対応方法を記載致します。
大きく分けて2つあります。
① Eメール検証(公式サイト)
② DNS検証(公式サイト)
どちらを利用するかはケースバイケースですが、Eメール検証の方が手軽です。
というのも、メールが届いているということは、Eメール検証が可能を意味します。
DNS検証の方は、DNS情報へのアクセス可否があったりするので、そういった意味で手軽かと。
そのため、以降は上記①Eメール検証を取り上げます。
■対応方法(詳細:Eメール検証)
1.ACMコンソールにアクセスします。
2.対象ドメインのチェックボックスをチェックし、「アクション」>「検証Eメールの再送信」をクリックします。
3.「検証Eメールの再送信」というダイアログボックスが表示されるため、「再送信」をクリックします。
4.ACMコンソールの上部に「成功。この証明書について新しい検証Eメールをお送りしました」と表示されていることを確認します。
5.以下の件名のメールが届いていることを確認します。
件名: Certificate renewal for ドメイン名 requires approval
6.メール文中の青字となっている「To approve this request, go to Amazon Certificate Approvals」をクリックします。
7.手順6実施後、ブラウザの新規画面が表示されるため、表示内容(※)に間違いないことを確認し、「I Approve」をクリックします。
※DomainName、AWS Account Number、AWS Region、CertificateIdentifier
8.「Success!」と表示されることを確認します。
9.しばらくすると以下件名/本文のメールが届きます。
件名: Your certificate is renewed
本文: This is to notify you that AWS Certificate Manager(ACM) has completed
■原因の前に・・・SSL証明書の自動更新の仕組みについて
原因の前に、ACMによるSSL証明書の自動更新の仕組みを理解しておく必要があります。
ACMによる自動更新は一般的に以下の流れで実施され、
すべての条件をクリアした場合に、自動更新が実施されます。
1.自動更新対象のドメインに対してHTTPS接続が可能であること
2.証明書の内容が、自動更新対象ドメインのものであること
3.証明書がELBやCloudFront等で利用されていること
4.ACMで管理しているSSL証明書のシリアル番号と、実際にドメイン名を利用した接続時に使用されている証明書のシリアル番号が一致していること
5.証明書を最初に発行してから825日前であること
■原因
原因は上記1~5のどこかでNGとなった場合なので、少し掘り下げてみたいと思います。
【上記1について】
1.自動更新対象のドメインに対してHTTPS接続が可能であること
⇒ ブラウザから対象ドメインのサイトに接続できていればOKです。
ここでNGとなることはあまりないかもしれませんが、たまたま自動更新処理の際にHTTPS接続がネットワーク的にNGの場合等は、タイミングが悪く失敗している可能性も考えられます。
【上記2について】
2.証明書の内容が、自動更新対象ドメインのものであること
⇒ 基本的にないと思いますが、何かの事情でドメイン名がACMで発行したSSL証明書と一致しない場合はNGとなります。
ドメイン名を途中から変更したが、ACM側の更新を忘れていた場合には、本項番がNGに該当することになります。
【上記3について】
3.証明書がELBやCloudFront等で利用されていること
⇒ こちらも基本的にはないと思います。ここでNGとなる場合は、そもそもACMによるSSL証明書作成時に問題になるケースが多いかと。
【上記4について】
4.ACMで管理しているSSL証明書のシリアル番号と、実際にドメイン名を利用した接続時に使用されている証明書のシリアル番号が一致していること
⇒ 意外に見落としがちなところです。
少しイメージしづらいかと思いますが一例として、例えばAWSサービス外のWAFを導入する際、そのWAF自体にもSSL証明書をインストールすることがあります。
そうなった場合、ACM管理のSSL証明書のシリアル番号と、AWSサービス外のWAFに導入したSSL証明書のシリアル番号は全く違うものになります。
一般的にALBの前段にWAFを導入することから、ドメイン名の名前解決にはAWSサービス外のWAFが最初の名前解決先になります。
※WAFからALBに通信するようになるイメージです。
そうなった場合、WAFに導入されたSSL証明書が最初に使用されるため、冒頭の通り、ACMによるSSL証明書のシリアル番号と、WAFのSSL証明書のシリアル番号は一致せず、ACMによるSSL証明書の自動更新が失敗することになります。
【上記5について】
5.証明書を最初に発行してから825日前であること
⇒ こちらも意外に見落としがちなところです。
ACMの仕様で、証明書発行から825日毎に強制的に手動更新が必要になります。
以上です。