certbot 在两个不同的 ec2 实例上创建证书

certbot create certificate on two different ec2 instances

问题

我有两个 EC2 个实例 运行。一个 EC2 实例当前正在托管我的网站 https://thechrisbolton.com,您可以看到它具有有效的 letsencrypt 证书。我想在我的第二个 EC2 实例上创建一个证书,我将在其中部署我的应用程序。一旦我的应用程序部署在第二个 EC2 实例上,我将销毁第一个实例。但是,我无法获得在第二个 EC2 实例上创建的证书。

错误

- The following errors were reported by the server:

   Domain: thechrisbolton.com
   Type:   unauthorized
   Detail: Invalid response from
   https://thechrisbolton.com/.well-known/acme-challenge/kITr3I__o6eb_WH2cguR200gWnt998DN1s8xamtPIbM
   [3.234.11.212]: "<html>\r\n<head><title>404 Not
   Found</title></head>\r\n<body>\r\n<center><h1>404 Not
   Found</h1></center>\r\n<hr><center>nginx/1.18.0</ce"

   Domain: www.thechrisbolton.com
   Type:   unauthorized
   Detail: Invalid response from
   https://www.thechrisbolton.com/.well-known/acme-challenge/DhzxfraTsUeN3a7bXQhfzS36CTHRzlBUWVAHceD
ETB8
   [3.234.11.212]: "<html>\r\n<head><title>404 Not
   Found</title></head>\r\n<body>\r\n<center><h1>404 Not
   Found</h1></center>\r\n<hr><center>nginx/1.18.0</ce"

我试过的

$ certbot certonly --standalone -d thechrisbolton.com -d www.thechrisbolton. com

我已通读 certbot documentation 以尝试找到一种方法来创建现有证书。唯一看起来可行的是 --duplicate 标志。但这说明,Most users will not need to issue this command in normal circumstances. 所以如果我使用它,我觉得我做错了什么。

无法获得在第二个 EC2 实例上创建的证书的原因。是因为域 https://thechrisbolton.com/ 没有指向第二个 EC2 实例。

工作原理

(为了便于说明,我简化了流程。)

certbot 的工作方式是,它向 "Let's Encrypt" 发送请求,为给定域(在本例中为 https://thechrisbolton.com/)颁发证书。作为对该请求的响应,"Let's Encrypt"(又名 LE)为 certbot 提供了一个文件(又名挑战),它需要将该文件放在一个可以通过互联网从 url http://<requested-domain>/.well-known/acme-challenge/ 访问的位置。 Certbot 正是这样做的,并将文件放在您在 运行 执行 certbot --certonly 命令时给它的位置(您已经使用了选项 --standalone 在这种情况下 certbot 旋转它是在端口 80 上拥有自己的服务器并使文件在位置 /.well-known/acme-challenge/) 可用,然后它再次调用 "Let's Encrypt" 说文件已准备就绪,给我证书。 LE 然后点击此 URL 以验证该文件在给定位置是否可用。如果它找到该文件,则只有它会颁发证书。所有这些都是为了确保申请证书的人拥有他申请证书的域。

解决方法是什么?

如果您使用的是静态 IP,则只需将静态 IP 指向新的 EC2 实例并将证书移动到新机器即可。

如果您不能这样做,请更新您的 DNS 条目以指向新 EC2 实例的 public IP 和 运行 相同的 certbot 命令。你现在运行宁。