我有一个 nginx Web 服务器,该服务器使用 Let's Encrypt 使用 Certbot 提供的 SSL 证书。例如,此站点可公开访问https://example.com
新服务器
我正在创建一个新的服务器,一旦一切设置并正确部署,它将取代现有的服务器。
我希望它可在https://beta.example.com在设置所有设置时,然后在https://example.com一旦获得批准。
https://beta.example.com现在可以使用,因为没有其他服务器为该子域名的站点提供服务,但只有当我最终更新 DNS 记录时,example.com 才会起作用。
我显然需要现有的 Web 服务器继续运行而不受影响,直到新服务器准备就绪。
如何为新服务器创建 SSL 证书以便其最终接管?
验证域名时出现问题
当我运行 certbot 时,它会尝试访问https://example.com作为验证的一部分,但由于该域指向现有服务器的 IP 地址,因此验证失败。
授权程序失败。example.com (tls-sni-01):urn:acme:error:tls::服务器在域验证期间遇到 TLS 错误::远程错误:tls:握手失败
重要说明:
- 服务器报告了以下错误:域名:example.com
类型:tls
详细信息:远程错误:tls:握手失败要修复这些错误,请确保您输入的域名正确,并且该域的 DNS A/AAAA 记录包含正确的 IP 地址。此外,请检查您是否拥有最新的 TLS 配置,以允许服务器与 Certbot 客户端通信。
考虑到我正在尝试做的事情,是否有适当的流程来解决这个问题?
答案1
尝试使用反向代理。在拥有 example.com 的旧服务器上创建两个虚拟主机,并将 beta.example.com 指向那里。具有 beta.examply.com 的虚拟主机应通过 HTTP 将 HTTPS 和反向代理请求剥离到实际服务器。两个虚拟主机将使用相同的证书。所有 Letsencrypt stull 目前都将位于旧服务器上。
准备就绪后,将证书复制到新服务器,更新 DNS 并等待其稳定(至少等待 DNS TTL 秒)。当您看到所有请求都到达新服务器时,您可以逆转一切,或者只是移动 Letsencrypt 内容并完全移至新服务器。
答案2
您不能使用beta.example.com
来验证域的 Letsencrypt 证书example.com
。
您可以从正在运行的服务器复制当前证书文件example.com
并将其放置在正在运行的服务器中beta.example.com
。如果您使用的是基于 Linux 的系统,则这些文件可以位于/etc/pki/tls/certs/
文件夹中。
答案3
除了建议将证书复制到新服务器的其他答案之外,您还应该复制您的 certbot 配置。这将确保您的续订过程继续按预期进行。
对我来说,这些文件在 中/etc/letsencrypt
。请确保在复制过程中保留文件权限和符号链接(rsync -a
)。
还要记得设置 cronjobs 或任何用于更新证书的工具。切换到新服务器后,您可以使用 测试更新过程certbot renew --dry-run
。