本文讨论如何解决Certbot可能出现的错误。当未设置DNS证书颁发机构授权 (CAA) 记录的情况下,如果为子域名申请证书,Certbot 可能无法安装Let's Encrypt证书。
以下是我最近遇到此错误的背景。之前我发布了一篇题为《新手快速了解 Udemy 的两门免费课程!》的文章。之后,在另一篇文章《在 Oracle 云免费套餐上更新 Udemy 的 Bootstrap 免费课程》中,我尝试通过在 Oracle 云免费套餐的 Ubuntu 实例上安装最新版本来更新 Udemy Bootstrap 课程的 LAMP 架构和 Bootstrap 主题。
正如更新帖中所述,更新过程中出现了两个问题。首先,由于 CAA 记录错误,由 CertBot 提供支持的 Let's Encrypt 证书颁发失败。其次,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 的说明和教程中,都没有提到 CAA 记录是 Certbot 正常工作的必要条件。之前我使用 Certbot 都成功获取了证书。
我把安装日志以及 hosts 和 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<<- 操作码:查询,状态:无错误,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
bash:~$
就这样。只需要提交一个关于“letsencrypt.org”的 0 号问题即可。
以下是Chrome浏览器对证书的描述:

向电子前沿基金会捐款
“EFF 是一个美国 501(c)(3) 非营利组织,税务识别号为 04-3091431。”
向 Let's Encrypt 捐款
“互联网安全研究小组是 Let's Encrypt 背后的 501(c)(3) 公益组织。我们的联邦税号是:46-3344200。”