DNSのCAAレコードについて

CAA (Certification Authority Authorization)レコードのチェックが2017年9月8日から必須になるみたい
ちょっと調べてみる
DANEはクライアント用でこっちはCA用のレコードらしい

例えばこんな感じのCAAレコードを書いて Let’s Encryptで発行しようとすると
こんなエラーが返される

;; ANSWER SECTION:
yaasita.tk.             60      IN      CAA     0 issue "comodoca.com"
yaasita.tk.             60      IN      CAA     0 issuewild "\;"
yaasita.tk.             60      IN      CAA     0 iodef "mailto:alert@yaasita.net"

この場合、hoge.yaasita.tk. みたなサブドメインもcomodocaでしか発行できなくなる
(設定はサブドメインに継承される)
ただし、上書きは可能なのでCAAを以下のようにすればLet’s Encryptだけから発行できるように変わる

hoge IN CAA 0 issue "letsencrypt.org"
hoge IN CAA 0 issuewild ";"
hoge IN CAA 0 iodef "mailto:alert@yaasita.net"

例えば、google.com のCAAは以下のようになっているので、Google Trust Servicesおよびsymantecからしか発行できない
仮に drive.google.com のwebrootに任意のファイルを置ける脆弱性があったとしても(http-01で)Let’s Encryptの証明書を発行することはできないし、WoSignで偽の証明書を発行されることもない
(WoSignがCAA無視してたら意味ないけど)

google.com.             84592   IN      CAA     0 issue "pki.goog"
google.com.             84592   IN      CAA     0 issue "symantec.com"

という訳で、どっかのCAが事故って発行されるリスクも減らせるし自分が信頼するCAを表明しておくのは悪くないんじゃないかなー
(CTログは発見は出来るけど予防はできないので)
ただ現時点で対応してるDNSサーバ少ない気がする(Google Cloud DNSは対応してたけど、AWS Route53は対応してなかった)
iodefについてはLet’s Encryptはまだ対応してないぽい
iodefに対応してくれないと面白くないけどまあしょうがないか

参考リンク