ネームサーバーに起因するCertBot CAAエラーを修正する方法
この投稿では、 Certbotで発生する可能性のあるエラーの解決方法について説明します。DNS証明機関承認 (CAA) レコードが設定されていない状況でサブドメインの証明書が要求された場合、Certbotは Let's Encrypt証明書のインストールに失敗することがあります。
最近このエラーに遭遇した経緯を以下に説明します。以前、 「Udemyの無料コース2つを初心者向けにざっと紹介!」という記事を投稿しました。その後、 「Oracle Cloud Free TierでUdemy Bootstrapの無料コースを更新する」という記事で、 Oracle Cloud Free TierのUbuntuインスタンスに最新バージョンをインストールし、Udemy BootstrapコースのLAMPスタックとBootstrapテーマを更新しようとしました。
アップデートに関する投稿で述べたように、アップデート中に2つの問題が発生しました。1つ目は、CAAレコードエラーのため、CertBotを利用したLet's Encrypt証明書の発行が失敗しました。2つ目は、MySQLパスワードの設定に失敗しました。素晴らしいドメインレジストラであるPorkbunの協力のおかげで、証明書エラーは解決しました。この記事では、CertBotのCAAレコードエラーとその解決策について説明します。MySQLパスワードエラーについては、今後の記事で取り上げます。
インストール トランスクリプトからのエラーの詳細
証明書エラーは、更新投稿で言及されているトランスクリプトの997行目で発生しています。以下は、989行目から始まるエラーテキストを含むトランスクリプトの一部です。
989 Which names would you like to activate HTTPS for?
990 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
991 1: bcas.metalvps.com
992 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
993 Select the appropriate numbers separated by commas and/or spaces, or leave input
994 blank to select all options shown (Enter 'c' to cancel): 1
995 Requesting a certificate for bcas.metalvps.com
996
997 Certbot failed to authenticate some domains (authenticator: apache). The Certificate Authority reported these problems:
998 Domain: bcas.metalvps.com
999 Type: dns
1000 Detail: DNS problem: SERVFAIL looking up CAA for metalvps.com - the domain's nameservers may be malfunctioning
1001
1002 Hint: The Certificate Authority failed to verify the temporary Apache configuration changes made by Certbot. Ensure that the listed domains point to this Apache server and that it is accessible from the internet.
1003
1004 Some challenges have failed.
1005 Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more details.
991行目に示されているように、サブドメインbcas.metalvps.comのLet's Encrypt証明書を取得しようとしていたことに注意してください。1000行目のエラーテキストを見ると、「ドメインのネームサーバーが故障している可能性があります」と表示されています。ログ全体を見ると、 hostコマンドとdigコマンドを使用して、Porkbunのネームサーバーが正常に機能していることを確認したことがわかります。
何を見逃したのでしょうか?
完全に見落としていたのは、MetalVPS.com にCAA レコードを一切インストールしていなかったことです。「ドメインのネームサーバーに不具合がある可能性があります」というメッセージから、Porkbun のサーバーが何らかの形でエラーの原因になっているように見えましたが、CAA レコードがなければ Porkbun のサーバーは CAA レコードを処理できないのは明らかです。
なぜCAAレコードがなかったのでしょうか?どうやら今まで必要なかったようです!それに、CAAレコードが必要だと説明している説明書やチュートリアルも見たことがありませんでした。RFC 8659のセクション1には、「CAAレコードは、証明書評価者がセキュリティポリシー違反の可能性を示す指標として使用してもよい」と記載されています。CAAレコードはある程度オプションである可能性があるようです。
また、Certbot や Let's Encrypt について読んだ説明書やチュートリアルの中に、Certbot の動作に CAA レコードが必要だと書いてあった記憶はありません。これまで Certbot を使った際は、すべて証明書の取得に成功していました。
インストールのトランスクリプトとホストとdigの出力をPorkbunのサポートにメールで送りました。Porkbunはすぐにそれを受け取り、親切にもCAAレコードの設定までしてくれました。Certbotをもう一度試してみるように言われ、CAAレコードのインストール後にCertbotは動作しました。
CAA レコードは次のようになります。
bash:~$ dig metalvps.com caa
; <> DiG 9.11.5-P4-5.1+deb10u7-Debian <> metalvps.com caa
;; グローバルオプション: +cmd
;; 回答が得られました:
;; ->>HEADER<<- オペコード: QUERY、ステータス: NOERROR、ID: 8650
;; フラグ: qr rd ra; クエリ: 1、回答: 1、権限: 0、追加: 1
;; OPT 擬似セクション:
; EDNS: バージョン: 0、フラグ:; udp: 512
;; 質問セクション:
;metalvps.com。CAAで
;; 回答セクション:
metalvps.com。600 IN CAA 0号「letsencrypt.org」
;; クエリ時間: 110 ミリ秒
;; サーバー: 100.115.92.193#53(100.115.92.193)
;; 日時: 2022年6月23日(木) 22:03:18 MST
;; 受信したメッセージサイズ: 75
バッシュ:~$
以上です。必要なのは「letsencrypt.org」の問題 0 件だけです。
Chrome ブラウザでは証明書について次のように表示されています:

電子フロンティア財団への寄付
「EFFは米国の501(c)(3)非営利団体であり、納税者番号は04-3091431です。」
Let's Encryptに寄付する
「Internet Security Research Groupは、Let's Encryptを支える501(c)(3)公益団体です。EINは46-3344200です。」