Let’s encrypt验证方式有什么区别

Let’s Encrypt 主要有 HTTP-01 验证和 DNS-01 验证两种方式,它们有以下区别:

  • 验证原理
    • HTTP-01 验证:Let’s Encrypt 向 ACME 客户端提供一个令牌,客户端需在指定路径http://<your_domain>/.well - known/acme - challenge/<TOKEN>上放置指定文件。文件包含令牌以及帐户密钥的指纹,Let’s Encrypt 会尝试获取该文件,若成功则验证通过。
    • DNS-01 验证:Let’s Encrypt 为 ACME 客户端提供令牌后,客户端根据令牌和帐户密钥创建 TXT 记录,并将该记录应用在_acme - challenge.<YOUR_DOMAIN>。然后 Let’s Encrypt 向 DNS 系统查询该记录,若查询到匹配项则验证成功。
  • 使用场景
    • HTTP-01 验证:适用于服务器能通过 80 端口对外提供服务,且无需额外配置 DNS 的场景。例如,普通的网站服务器,只要能在网站根目录下放置验证文件即可。
    • DNS-01 验证:适用于无法使用 80 端口进行验证,或者需要颁发通配符证书的场景。比如,服务器在防火墙后面,80 端口被限制访问,或者网站使用了 CDN 等无法直接在服务器上进行文件验证的情况。
  • 安全性
    • HTTP-01 验证:安全性主要依赖于服务器的文件系统权限设置和网络访问控制。只要服务器的文件系统安全,且没有被黑客入侵篡改验证文件,一般来说是安全的。不过,如果服务器存在漏洞,导致验证文件被非法修改,就可能存在风险。
    • DNS-01 验证:安全性相对较高,因为它依赖于 DNS 系统的安全性。只要 DNS 服务器的权限管理严格,不被恶意篡改 TXT 记录,就比较安全。但如果 DNS 提供商的系统存在漏洞,或者客户端的 DNS API 凭据被泄露,就可能导致验证被绕过。
  • 自动化难度
    • HTTP-01 验证:容易自动化,不需要关于域名配置的额外知识,只要在服务器上运行一个脚本,按照 Let’s Encrypt 的要求放置验证文件即可。许多服务器管理工具都支持自动完成这个过程。
    • DNS-01 验证:只有在 DNS 提供商有自动更新的 API 时,这种验证方式才有意义,自动化难度相对较大。需要编写脚本与 DNS 提供商的 API 进行交互,设置和更新 TXT 记录。不同的 DNS 提供商 API 不同,需要针对具体的提供商进行开发。
  • 对通配符证书的支持
    • HTTP-01 验证:不支持颁发通配符证书。
    • DNS-01 验证:支持颁发通配符证书,这是它的一个重要优势,对于需要保护多个子域名的网站来说非常有用。

发表评论