証明書発行時CAAのDNSエラー時の挙動について

以下のブログの記事で記載が誤っている箇所を指摘していただきました。 https://jovi0608.hatenablog.com/entry/2020/03/09/094737
4
Yasuhiro Morishita @OrangeMorishita

@jovi0608 わかりやすくて詳細な記事、ありがとうございます。 一点、コメントです。 「CAAレコードが引けなかった場合でも証明書は発行されます。」とありますが、名前解決エラーになった場合(権威サーバーが落ちていたなど)、証明書は発行されないように思います。(続きます)

2020-03-09 16:14:26
Yasuhiro Morishita @OrangeMorishita

@jovi0608 (続き)ですので、細かいですが当該部分を「CAAレコードが設定されておらず、存在しなかった場合も証明書は発行されます。」とされる方が、よいのではないかと思いました。

2020-03-09 16:15:42
Shigeki Ohtsu @jovi0608

@OrangeMorishita BR3.2.2.8ではDNSSECを使っていなければDNSエラー時でも発行許可できるように規定していると思いますが、これは違いますでしょうか? CAs are permitted to treat a record lookup failure as permission to issue if: 以下の条件です。

2020-03-09 16:33:28
Yasuhiro Morishita @OrangeMorishita

@jovi0608 お返事、ありがとうございます。この三つの条件、andで効いているように読めます。 「失敗がCAのインフラの外で起こっていて」(かつ)「一度以上リトライ」かつ「DNSSECの信頼の連鎖がない(= 署名していない)」場合は、発行許可と扱っていい、と。

2020-03-09 17:07:47
Yasuhiro Morishita @OrangeMorishita

@jovi0608 CA側がDNSSEC検証していない場合、この条件、満たせないです。三つ目が検証できないので。

2020-03-09 17:09:33
Shigeki Ohtsu @jovi0608

@OrangeMorishita 確認ありがとうございます。CAAはDNSSECがRECOMMENDEDなので、現在の普及率では記事のスタンスとしてはDNSSECを使っていない状況を前提としています。後述のCAAで守れない場合でDNSSECの件は軽く触れていますが。

2020-03-09 17:16:10
Yasuhiro Morishita @OrangeMorishita

@jovi0608 なので、こちらの通り、CAA検索エラー時のCAの選択肢は二つになると思います。 1) エラーにする(発行しない) 2) DNSSEC検証し、信頼の連鎖がないのを確認 No CAA + DNSSEC - nonexistence proof = issuance failure - Issuance Policy - Let's Encrypt Community Support community.letsencrypt.org/t/no-caa-dnsse…

2020-03-09 17:18:28
Yasuhiro Morishita @OrangeMorishita

@jovi0608 DNSSECを使っていない(申請者が署名してなくて、CAが検証してない)とすると、さきほどのツイートの通り、エラーにしないといけないと思います。

2020-03-09 17:19:46
Yasuhiro Morishita @OrangeMorishita

@jovi0608 以下引用 "That section gives two options: Implementing DNSSEC, or never treating lookup failure as permission to issue. A CA that treats CAA lookup failure as a fatal error doesn’t have to validate DNSSEC. (続)

2020-03-09 17:22:10
Yasuhiro Morishita @OrangeMorishita

@jovi0608 (続)Let’s Encrypt actually does both – they validate DNSSEC and consider CAA failures to be fatal errors."

2020-03-09 17:22:32
Shigeki Ohtsu @jovi0608

@OrangeMorishita 最後の条件を間違って捉えてましたか。ちょっとスレッドと実装を確認します。情報ありがとうございます。

2020-03-09 17:23:54
Yasuhiro Morishita @OrangeMorishita

@jovi0608 なので、LEは、 ・CAAがDNSエラーで引けなかったら、証明書を発行しない という動作をしていました。 (某社のサービスも、そうなっている気がします)

2020-03-09 17:25:16
Yasuhiro Morishita @OrangeMorishita

@jovi0608 あれ、読みづらいと思います。。 二つ目の項目の最後に and って書いてあるので、and で効いていると理解しました。

2020-03-09 17:26:23
Yasuhiro Morishita @OrangeMorishita

@tss_ontap CA/Browser Forumの原文にはそこまで書いてないですが、申請者が自分のドメイン名をDNSSEC署名していて、CAがチェック時にDNSSEC検証を有効にしていないと、最後の条件は満たせないですね。 で、その場合にCAAが検索エラーなら、証明書を発行*してもいい*と読めました。

2020-03-09 17:41:30
Yasuhiro Morishita @OrangeMorishita

@tss_ontap 仰る通りで、CAAのチェックはドメイン名の管理権限を奪われることには、対応できないです。

2020-03-09 17:45:50
Shigeki Ohtsu @jovi0608

@OrangeMorishita boulderのコード確認しました。確かにCAAの再チェック時にDNSエラーでは発行エラーにしています。ドメイン認証時はそもそもCAA前にDNSエラーでだめになるので不要と。そもそも今回の最初のバグレポートがSERVFAILで発覚してました。後で修正します。ありがとうございました。

2020-03-09 17:46:43
Yasuhiro Morishita @OrangeMorishita

@jovi0608 ご確認とご対応、ありがとうございました。

2020-03-09 17:48:26