我的一个客户有一个域名,并将他的域名的 A 记录指向我的机器,这样我就可以开发一个网站。通常,当我控制 DNS 时,很容易让 LetsEncrypt 证书和 https 正常工作。但是,现在他有 DNS 并且它只将 A 记录指向我的 IP,我无法做到这一点,我不知道为什么。有什么线索吗?
答案1
Let's Encrypt 支持多种 ACME 质询类型。如果您无法使用基于 DNS 的域验证,您的替代方案是使用 HTTP 质询,即--webroot
certbot 中的选项。
在此模式下,CertBot 只需将特定文件放置在您的 Web 目录中,以便 Let's Encrypt 服务器可以成功下载它 - 现有的 A 记录就足够了。但是,您需要一个已经在端口 80 上运行的 Web 服务器。
/var/www
配置 Web 服务器以通过纯 HTTP 在此域上提供服务。certbot certonly --webroot -w /var/www -d example.com
- Certbot 将文件放在 /var/www/.well-known/acme-challenge/ 下,Let's Encrypt 下载该文件
- 现在完成 Web 服务器的配置,以便通过 HTTPS 为域名提供服务。
(请注意,每次续订时,您也需要保持纯 HTTP 端口 80 访问正常。重定向将其转换为 HTTPS,但挑战文件仍然需要可访问。
答案2
通常,当我控制 DNS 时,就可以很容易地获得 LetsEncrypt 证书和 https 的工作。
如果您使用 DNS-01 验证站点,则在此过程中会将 TXT 记录临时添加到 DNS 区域。假设正在使用 DNS-01,则 Certbot 可能无法添加验证所需的 TXT 记录。
最简单的替代方法是使用 HTTP-01 验证和选项--webroot
(如 @grawity 在回答中指出的那样)。您无法使用此方法颁发通配符域证书(例如 *.example.com),但您应该能够使用主题备用名称 (SAN)(假设您需要一个也涵盖子域的证书等)。