DNS CAAを設定する

「今すぐ要る」「必ず要る」というものでは全く無いようだが、ウェブサーバやメールサーバ(等)でSSL/TLSを設定するならDNSに1項目DNS CAAを加えておきたい。わりと簡単だし。

CAA(Certification Authority Authorization)レコードをDNSに登録しておくと第三者が勝手にどこかのCAでSSL証明書を発行して悪さをするのを防ぐことができる(かもしれない)。
認証局(CA)はSSL証明書を発行する際にCAAレコードを確認して、書かれているCA以外ではそのドメイン(サブドメイン)のSSL証明書を発行しない。これで勝手に証明書を発行されるのを防ぐ(制限する)ことができる筈。

設定自体は簡単だが、指定するCAの名前を調べるのだけがちょっと面倒というかよく分からん
Let's Encryptだとletsencrypt.org、COMODOだったらcomodoca.comとか。RapidSSLだとrapidssl.comと言われてるどsymantec.comという話もあるので要確認。

新しめのDNSサーバでの設定例 (BIND9.9.6以上等)

サブドメイン(ホスト)にCAAレコードを付ける場合
1
2
3
4
5
6
7
8
$ORIGIN example.com.
@       IN      SOA     ns1.example.com.      root.example.com. (100 3600 1800 86400 43200)
        NS      ns1.example.com.      ;ネームサーバ
        NS      ns2.example.com.      ;ネームサーバ
;
hoge    IN      A       192.168.0.1   ;hoge.example.comのIPv4アドレス
hoge    IN      AAAA    2001:db8::1   ;hoge.example.comのIPv6アドレス
hoge    IN      CAA     0 issue "comodoca.com"  ;hoge.example.comのCAAレコードとしてcomodoのCAを指定

1つのドメイン・サブドメインに証明書・CAが複数(証明書切り替え時とか?)の場合はIN CAA 0 issueの行を追加(CA名は1行に1つ)するらしい。

ドメインにCAAレコードを付ける場合
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ORIGIN example.com.
@       IN      SOA     ns1.example.com.      root.example.com. (100 3600 1800 86400 43200)
        NS      ns1.example.com. ;ネームサーバ
        NS      ns2.example.com. ;ネームサーバ
;               
@       IN      A       192.168.0.1 ;ドメイン名だけでアクセスできるIPv4アドレス
@       IN      AAAA    2001:db8::1 ;ドメイン名だけでアクセスできるIPv6アドレス
@       IN      CAA     0 issue "comodoca.com"  ;example.comのCAAレコードとしてcomodoのCAを指定
@       IN      CAA     0 issuewild ";"         ;ワイルドカード証明書は無しを追加指定する場合
@       IN      CAA     0 iodef "mailto:foobar@example.com"  ;無効な発行がリクエストされた場合の報告先

上の2例はいろいろ省いている。
ドメイン・サブドメインの組み合わせのパターンもあるかと思うがそれも省略。

古いDNSサーバでの設定例 (BIND9.9.5以下等)

hoge            IN      TYPE257  ホニャララ

CAA ではなくTYPE257と記載するらしい。ホニャララの部分がよくわからんくて手動で設定できる自信がないのでCAAレコードのジェネレータなどを使うのが無難かと。

DNSレコードを触ったらシリアルナンバーを増やすのを忘れずに。
DNSの設定を反映する。

# rndc reload
上はBINDの場合。

確認

% drill hoge.example.com type257
;; ->>HEADER< <- opcode: QUERY, rcode: NOERROR, id: 29235
;; flags: qr rd ra ; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 
;; QUESTION SECTION:
;; hoge.example.com.      IN      CAA

;; ANSWER SECTION:
hoge.example.com. 21599   IN      CAA     0 issue "comodoca.com"

;; AUTHORITY SECTION:

;; ADDITIONAL SECTION:

;; Query time: 135 msec
;; SERVER: 2001:4860:4860::8888
;; WHEN: Fri Nov 24 16:00:19 2017
;; MSG SIZE  rcvd: 87

上はFreeBSDに標準で入っているdrillの例だけどdigなどでも同様。タイプ指定は"CAA"ではなく"type257"を指定する。
ANSWER SECTIONにCAAの行があってissueに指定したCA名が表示されていればOK.
ワイルドカード証明書や報告先の指定をしたならそれも確認。