AWS Certificate Manager(ACM)でワイルドカード証明書を発行する際の注意事項

AWS運用自動化サービス「Cloud Automator」

こんにちは。プロフェッショナルサービス課 佐竹です。
AWSサミット真っ最中で、界隈は「東京にEFSが来た!」とか「ALBにCognito連携(Application Load Balancer Authentication)が実装された!」とか、色んな話題で賑わっておりますね!!
が、地味にACMにフォーカスした話題について今回記載します。

AWS Certificate Manager(ACM)でワイルドカード証明書を取得する

AWS Certificate Manager(ACM)は、AWS管理のSSL証明書を発行することができる機能で、もちろんワイルドカード証明書を取得することもできます。
実際に設定する画面を見てみましょう。

ACMでは、まずはじめにDomain nameを入力します。このとき、ワイルドカード証明書を取得されたい方は

*.aws.example.mytest-domain.org

のように、* を記載されると思います。
しかし、この書き方だと、特定の場合にうまくSSL証明書で通信が保護されない事態が起きます。

ワイルドカード証明書取得時の注意

公式ドキュメントには以下の通り記載がありますので引用して説明します。

ACM は、ドメイン名にアスタリスク (*) を使うことで、同じドメイン内の複数のサイトを保護できるワイルドカード名を含む ACM 証明書を作成することができます。たとえば、*.example.com は、www.example.com と images.example.com を保護します。

注記

ワイルドカード証明書をリクエストする場合、アスタリスク (*) はドメイン名の左側に付ける必要があり、1 つのサブドメインレベルのみを保護できます。たとえば、*.example.com は、login.example.com と test.example.com を保護しますが、test.login.example.com は保護しません。また、*.example.com は、example.com のサブドメインのみを保護し、ネイキッドドメインまたは apexドメイン (example.com) は保護しないことに注意してください。ただし、複数のドメイン名を特定してリクエストすることで、ネイキッドあるいはホスト名のないドメインとそのサブドメインを保護する証明書をリクエストできます。たとえば、example.com と *.example.com を保護する証明書をリクエストできます

赤字にご注目ください。今回「*.aws.example.mytest-domain.org」を設置しましたが、この場合以下のドメインは保護されません。

aws.example.mytest-domain.org

理由ですが、「*.aws.example.mytest-domain.org」ですので「*.」に何かホスト名等が入力されている(サブドメインである)必要があるためです。
そのため、あわせて同じSSL証明書で「aws.example.mytest-domain.org」も保護したい場合は、青字の通り設定を行う必要があります。実際にやってみましょう。

ネイキッド/apex ドメインも保護するワイルドカード証明書を取得する

先ほどの設定画面から引き続き、実際の設定画面を見ていきましょう。

上の図の矢印の先にある「Add another name to this certificate」を押下してください。

そうすると、もう1つ追加でDomain nameが記載できるボックスが表示されます。ここに今回であれば「aws.example.mytest-domain.org」を追加します。こうすることで、ネイキッド/apex ドメインも合わせて保護がされます。

なお、入力順序は反対でも問題ありません。

この通り、後から*.のドメイン名を追加しても問題ありません。

DNS検証のCNAMEレコードについて

この記事をみて、あと追いでこの設定を追加されたい方もいらっしゃると思い、DNS検証のCNAMEについても合わせて記載します。DNS検証についてはこちらの記事をご覧ください。

ACMは、既存の設定にDomain nameを追記できません。よって「最初から全てやり直し」をする必要があります。そうなると気になるのが「またDNS検証のレコードを登録しないといけないのか?」という心配が出ます。結論から記載しますと、「同じドメイン名であればDNS検証のCNAMEは同じなので再登録は不要」です。

実際に設定を見てみましょう。

上図の通り、Additional namesがない証明書と、Additional namesが記載されている証明書と、2つ存在するとします。この時に設定するDNS検証のCNAMEを確認してみましょう。

まずは上側の「*.aws.example.mytest-domain.org」のみのCNAMEです。

上記の通りです。では、Additional namesが設定されているものを確認してみましょう。

2つドメイン名が存在するため、CNAMEのレコードも2つ存在しますが、見比べてみると同じです。また、この3つのレコードは全て同じ値です。つまり、ACMでは「同じAWSアカウント、同じDomain nameであれば、再作成しても同じCNAMEレコードになる」ということがわかります。

※【補足】別のAWSアカウントだと同じDomain nameでも今回と同じCNAMEにはなりません

既存のACMワイルドカード証明書にAdditional namesを追加する切り替え手順

上記の事実から、以下の手順で切り替えが可能です。なお前提として、現在「*.aws.example.mytest-domain.org」のみが記載されているワイルドカード証明書を保持しており、DNS検証はクリアしているとします。

  1. SSL証明書の新規発行
    ACMでDomain nameに「*.aws.example.mytest-domain.org」と「aws.example.mytest-domain.org」を記載した新規SSL証明書を発行します ※同じ名前で複数SSL証明書を発行しても問題ありません
  2. DNS検証
    先に記載した通り、同じCNAMEレコードでDNS検証となるため、既にDNS検証をクリアしている前提条件では[1]で発行されたSSL証明書も即時DNS検証がクリアされます
  3. 証明書の切り替え
    ELB等に紐づけされているSSL証明書を、既存のものから新規に発行したSSL証明書に切り替えます
  4. 古いSSL証明書の削除
    古い「*.aws.example.mytest-domain.org」のみのSSL証明書をACMから削除します

なお、メールで検証を行う場合は、「*.aws.example.mytest-domain.org」と「aws.example.mytest-domain.org」でCNAMEレコードが2つあったように、メールも「2通届きます」ので2つとも承認する必要があります。

まとめ

いかがでしたでしょうか。今回は、ACMでワイルドカード証明書を取得する際に気をつけるべきポイントと、もし間違えて作ってしまった場合の切り替え手順を記載しました。ワイルドカード証明書を用意するときはほとんどの場合でネイキッド/apexドメインも保護することが多いと感じますので、常にセットで取得する癖をつけてもいいのではと個人的には思います。

ではまた!
次回は、rootアカウントの物理MFAについて記載したいと思います。

AWS運用自動化サービス「Cloud Automator」