背景
AWS Certification Manager(以下、ACM)でSSL証明書を取得してHTTPS通信を実現しようとした時に、ネイキッドドメインで証明書が使えず、1時間くらい溶けた話です。
ネイキッドドメインとは、サブドメインではないドメインを指します。ドメインそのものというイメージで問題ないかと思います。example.comを取得したとすると、ネイキッドドメインはそのままexample.comです。www.example.comなどのようなサブドメインはネイキッドドメインではありません。
ACMで申請したドメイン
ACMでSSL証明書を申請する際、保護するサイトドメインを記載する必要があります。その際「今後色々サブドメイン切る可能性ありそうだな」と思い、自分は下記画面のように、*.example.comで申請しました。
この書き方、自分はネイキッドドメインも保護されると思っていたのですが、実は保護されません。よく考えたら「*」って1文字以上の任意の文字って意味だし、そうだよなと思ったのですが、当時の自分は勘違いしてしまいました。
公式ドキュメントにも以下のような記述がありました。
ワイルドカード証明書をリクエストする場合、アスタリスク (*) はドメイン名の左側に付ける必要があり、1 つのサブドメインレベルのみを保護できます。
*.example.comは1つのサブドメインレベルを保護するということを指していたんですね。なので、www.example.comやhoge.example.comではHTTPS通信ができるのですが、example.comでは通信ができなく、下記のような画面が表示されてしまいます。
もし既に証明書を作成してしまった場合も安心してください。実はこの作業の後で追加するCNAMEレコードで登録するものは実はドメインごとに同じです(AWSアカウントが同じであることが前提です)。
したがって、証明書を作り直したらRoute53で設定しているレコードなどは置き換えなくていいということです(ELBやIAMなどで証明書を設定している場合、新しい証明書に置き換える必要あり)。
すごくしょうもないことで躓いてしまいましたが、同じようなことで他の人が時間を無駄にしなければいいなと思い、書いてみました。