如何在没有 DNS 的情况下通过 Let's Encrypt 实现 Caddy 自动 TLS?

How do I achieve Caddy auto-TLS via Let's Encrypt without DNS?

我确定这是一个典型的场景,但我找不到合适的步骤顺序。

我在(比如说)1.1.1.1 运行 Apache 有一个 www.example.com 服务器。我正在使用 Caddy 在 2.2.2.2 上构建一个新服务器。为了测试,我把 2.2.2.2 www.example.com 放在我的本地 /etc/hosts 中。一切正常后,我会将 www.example.com DNS 条目重新指向 Caddy。

问题是我无法在 2.2.2.2 上启动 Caddy 来提供服务 www.example.com。

我明白了 [www.example.com] failed to get certificate: acme: Error 403 - urn:acme:error:unauthorized - Invalid response from http://www.example.com/.well-known/acme-challenge/6Xc4_oq6r0de25CtrYIw59YeVHvUWQ9Ag6H3XbGx8y0:

我认为这是由指向 1.1.1.1 而不是 2.2.2.2

的 www.example.com 的 DNS 条目引起的

那么我如何获得证书并启动 Caddy 以便我可以在更新 public DNS 条目之前在 2.2.2.2 上测试 www.example.com?

首先,您确实应该只将私有 IP 用于测试/试用站点。您可以使用以下任何一种

  • 10.x.x.x
  • 192.168.x.x
  • (还有几个)

所以而不是

2.2.2.2 myexamplesite.com

使用

10.2.2.2 myexamplesite.com

此外,这也回答了您的问题,只有当 letencrypt 站点可以通过您无法控制的 DNS 服务器提供的 public ipaddress 访问您的站点时,使用 lets encrypt 的 caddy TLS 才有效。这是出于非常基本的安全目的。

您可以生成自签名证书并使用它,但我担心 caddy 的自动 TLS 无法按照您想要的方式实现。

  1. 为测试服务器起一个新名字,例如test.example.com.

  2. test.example.com 的 DNS A 记录指向与 www.example.com.

  3. 相同的地址
  4. 获取包含两个名称的 Let's Encrypt 证书。 Let's Encrypt 允许您在证书中输入多少个名字。

  5. 获得证书后,将测试服务器的 DNS A 记录指向新地址。现在您可以在生产服务器和测试服务器中使用相同的证书了。