我正在研究 Let's Encrypt 的 DNS-01 挑战;并且我有一个关于子域名流程的疑问 [1]。
假设网站 example.com 提供免费子域名;那么,是什么阻止我通过声明 _acme-challenge.example.com 子域名来处理 DNS-01 挑战,为 *.example.com 请求 Let's Encrypt 通配符证书呢?
ACME 协议(或其他任何协议)中是否有任何内容可以阻止我这样做?
[1] =https://letsencrypt.org/docs/challenge-types/#dns-01-challenge
答案1
通常,提供免费/自定义子域名的网站会提供A
记录,而 ACME DNS-01 挑战则需要添加TXT
记录。这将使你建议的不太可能。
如果某个网站允许TXT
为子域添加任意记录,并且不保留_acme-challenge
,则协议中没有任何内容可以阻止滥用此类功能,并且它将是一种易受攻击的服务。但是,这种用例非常罕见,以至于没有人会在设计此类协议时专门考虑这一点。
幸运的是,如果发生这种情况,Let's Encrypt 证书将在三个月后过期,并且也可以吊销证书即使无法访问其私钥,也会出现以下情况:
如果有人在破坏您的主机或 DNS 后颁发了证书,您将需要在重新获得控制权后撤销该证书。为了撤销证书,Let's Encrypt 需要确保您控制该证书中的域名(否则人们可能会在未经许可的情况下撤销彼此的证书)!为了验证此控制权,Let's Encrypt 使用与验证颁发控制权相同的方法:您可以将值放入 DNS TXT 记录中或将文件放在 HTTP 服务器上。- -
一旦您验证了对要撤销的证书中的所有域名的控制权,您就可以从 crt.sh 下载证书,然后继续撤销该证书,就像您颁发了该证书一样:
certbot revoke --cert-path /PATH/TO/downloaded-cert.pem