俺、サービス売って家買うんだ

Swift, Kotlin, Vue.js, 統計, GCP / このペースで作ってればいつか2-3億で売れるのがポっと出来るんじゃなかろうか

DNSやらまとめ ② - CAAレコードについて覚書 -

f:id:ie-kau:20190917003511p:plain

まぁ、本題はこちらでLet's Encrypt の CAA 周りの設定ですっころんだので覚書。

CAAレコードとは

A Certification Authority Authorization (CAA) record is used to specify which certificate authorities (CAs) are allowed to issue certificates for a domain.

証明書が発行できる CA に制限をかけられるレコード.

If no CAA record is present, any CA is allowed to issue a certificate for the domain

  • CAAレコードがない場合はすべてのCAが該当のドメインに対して証明書を発行できる。
  • CAAレコードがある場合はレコードに存在するCAのみ証明書を発行できる.
  • 本仕様の目的としては予期しない証明書の発行リスクを低減させるもの。

CAAレコードは継承でき、expamle.com に設定した場合同様に、subdomain.example.com にも適応される。

example.com.        CAA 0 issue "letsencrypt.org"
alpha.example.com.  CAA 0 issue "comodoca.com"
beta.example.com.   CAA 0 issue "letsencrypt.org"
beta.example.com.   CAA 0 issue "comodoca.com"

上記でいうと、デフォルトで Let's Encrypt の証明書に設定されている。
ただし、 alpha.example.com は Comodo CA からの証明書発行しか受け付けない。
また、 foo.example.com はexpample.com の設定を継承するので Let's Encrypt の 証明書の発行を受け付ける。

※参考元

support.dnsimple.com

Let's EncyptにおけるCAA

こちらに色々書いてある

letsencrypt.org

Since Let’s Encrypt checks CAA records before every certificate we issue, sometimes we get errors even for domains that haven’t set any CAA records.

Let's Encrypt ではすべての証明書を発行するまえに、CAAのチェックを行っているので、 CAA レコードを設定していなくてもエラーを返すことがある。

さて、すっころんだ内容

実際におこったやつ(example.comは伏せ字)

Failed authorization procedure. www.example.com (http-01): urn:acme:error:dns :: DNS problem: SERVFAIL looking u
p CAA for example.com

のエラーで証明書が作れなかった。

SERVFAILが起こったときに見るもの

  • 最も多く発生するのがこのエラーとのこと(実際に起きた)

可能性1

可能性2

  • 権威サーバーがNOTIMP を返している
    • DNS プロバイダーに問い合わせよう!

可能性3

  • 権威DNSサーバーが止まっている
    • nsの設定を見直そう

何したらなおったか?

www.example.com の権威サーバーにCAAレコードを設定したらなおった。
こっからは予想なんだけど、当時、example.com にnsを設定してなかったので Let's Encrypt の CAA レコードをルックアップする機構が再帰的に www.example.com -> example.comと検索してきた際に exapmle.com へ DNSアクセスできずに転んでいたのではと憶測している。 ちょい実験してみないと真実はわからない。