ACMの証明書をメール検証からDNS検証に差し替えた話


AWSから下記のメールが届く。


>title:
Impact of Changes to WHOIS on AWS Certificate Manager (ACM) Email Validation [AWS Account: xxxxxxxxxxxx]
>
Subject:
Hello,
>
ACM depends on WHOIS data to identify domain owners when using email validation. Recently however, many registrars have stopped populating contact information in WHOIS data. Therefore, if your domain registrar no longer includes contact email addresses in WHOIS data, we recommend you either switch to DNS validation or ensure at least one of the five following email addresses are valid for your domain:
>
administrator@your_domain_name
hostmaster@your_domain_name
postmaster@your_domain_name
webmaster@your_domain_name
admin@your_domain_name
>
In order to switch to DNS validation, please re-create the certificate and select DNS validation as the validation mechanism. You can switch to DNS validation at no additional cost to you.

　
どうやらEmail検証の証明書をDNS検証に換えませんか？というお誘いらしい。
ドメインのレジストラのネームサーバを使用している関係上、AWS外にあるゾーンファイルを更新する必要がある。
以下、自分のための作業記録。


①ACMでDNS検証の証明書を作成する。
-
　ドメイン名は既存の証明書とカブってもいい。というか、差し替えるので同じサイト名の証明書を作ることになる。
　わからなくなると後々面倒なので、Nameタグに既存のものと新規に作成するものを区別する名前をいれておく。
　
　コンソールから証明するドメイン名を登録すると、CNAMEに登録するレコード名とレコード値が振り出される。
　csvファイルでダウンロードできるので、記録のためにも落としておくこと。
　
>
　Domain Name,Record Name,Record Type,Record Value
　www.hogehoge.jp,_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.www.hogehoge.jp.,CNAME,_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.acm-validations.aws.



　ここまでで「検証保留中」のステータスになる。
　ACMのDNS検証は、証明したいドメインのNSからゾーン情報を引っ張って、CNAMEレコードから上記のFQDNホスト名が解決できるかで判定している。NSのゾーン設定を換えられる人なら実在してますよね、ってことだ。
　
②ゾーンファイルの書き換え
-
　ゾーンファイルの変更は2点

```
$TTL 3600
@ IN SOA NS1.HO-GE.JP. root.hogehoge.JP. (
 1803251700 ; Serial
 10800 ; Refresh 3 hour
 3600 ; Retry 1 hour
 36000 ; Expire 10 hours
 3600 ; Minium 1 hours
 )
 ;
 IN NS NS1.HO-GE.JP. ;HO-GE PRIMARY DNS
 IN NS NS2.HO-GE.JP. ;HO-GE SECONDARY DNS
 IN MX 10 MAIL.hogehoge.JP.
 ;
 ;
WWW IN CNAME rpx-elb01-XXXXXXXXX.ap-northeast-1.elb.amazonaws.com.
WEBSERVICE IN CNAME web-elb01-XXXXXXXXX.ap-northeast-1.elb.amazonaws.com.
```

変更前のゾーンファイル


　2-1.Serial ゾーン情報のバージョン（10桁）
　　DNS設定がキャッシュされているとき、このフィールドの値が大きい情報に当たれば差し替えられる。
　　通常は変更したタイムスタンプyyMMDDhhmm(例:1806131630）を入れるようにすればエラーが起こらない。
　　※要するにインクリメントすればいいだけの話だが、バージョン管理の手間を省くために登録時のタイムスタンプにするわけ。

　2-2.CNAMEフィールドの追記
　　①でダウンロードしたレコード名と値からCNAMEフィールドを作文して最後に追記する。
　　※挿入する行の末尾に改行コードを入れておかないとエラーになる。


```
$TTL 3600
@ IN SOA NS1.HO-GE.JP. root.hogehoge.JP. (
 1806131830 ; Serial
 10800 ; Refresh 3 hour
 3600 ; Retry 1 hour
 36000 ; Expire 10 hours
 3600 ; Minium 1 hours
 )
 ;
 IN NS NS1.HO-GE.JP. ;HO-GE PRIMARY DNS
 IN NS NS2.HO-GE.JP. ;HO-GE SECONDARY DNS
 IN MX 10 MAIL.hogehoge.JP.
 ;
 ;
WWW IN CNAME rpx-elb01-XXXXXXXXX.ap-northeast-1.elb.amazonaws.com.
WEBSERVICE IN CNAME web-elb01-XXXXXXXXX.ap-northeast-1.elb.amazonaws.com.
_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.www.hogehoge.jp. IN CNAME _XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.acm-validations.aws.
```

変更後のゾーンファイル

　
　ゾーンファイルをアップロードしたら、しばらく待つ。
　数分程度。

③ELBの証明書入れ替え
-
　AWSのユーザーコンソールで確認してステータスが「発行済み」になっているのを確認。
![UC0ACM.png](https://qiita-image-store.s3.amazonaws.com/0/264001/26ef7b13-11e9-2045-a186-53be988778c3.png)




　新しい証明書の詳細を展開して「識別子」をメモしておく。
![UC1.png](https://qiita-image-store.s3.amazonaws.com/0/264001/c9bb447e-0b8e-6c8c-e181-e45c2d984d15.png)



　
　次にユーザーコンソールのEC2→ロードバランサで、証明書を入れ替えたいものを選択して、リスナータブから「変更」。
![UC2ELB.png](https://qiita-image-store.s3.amazonaws.com/0/264001/c8c3a285-2652-1678-cf0d-ce3c49ed6621.png)

　現在ACMで管理している証明書のリストが表示されるので、先ほどメモった識別子の証明書を選択。
　
　以上