安装 LetsEncrypt SSL 时出错:(http-01):urn:acme:error:connection::服务器无法连接到客户端以验证域

安装 LetsEncrypt SSL 时出错:(http-01):urn:acme:error:connection::服务器无法连接到客户端以验证域

我正在尝试安装LetsEncrypt在我的服务器(我有 root SSH 访问权限)上,staging.dnslaude.com这是一个可公开访问的域,指向213.212.81.89

服务器正在运行ubuntu 16.04,并且是一个nginxWeb 服务器。以下是nginx配置:

server {
  listen 80;
  server_name staging.dnslaude.com;

  root /path/to/webroot;

  location ^~ /.well-known/acme-challenge/ {
    try_files $uri $uri/ =404;
  }
  rewrite ^(.*) https://$host$1 permanent;
}

server {
  listen 443;
  ssl on;
  ssl_certificate /path/to/self/signed/certificate.crt;
  ssl_certificate_key /path/to/key.key;

  server_name staging.dnslaude.com;

  root /path/to/webroot;

  # ....

  location ^~ /.well-known/acme-challenge/ {
    try_files $uri $uri/ =404;
  }
}

你可以看到nginx配置出现工作,因为我手动将文件放在acme-challenge文件夹中这里

但是,当我运行命令时:

letsencrypt certonly --webroot -w /path/to/webroot -d staging.dnslaude.com

它返回以下错误:

授权程序失败。staging.dnslaude.com (http-01): urn:acme:error:connection ::服务器无法连接到客户端以验证域::无法连接到staging.dnslaude.com

重要说明: - 服务器报告了以下错误:

域名:staging.dnslaude.com 类型:连接 详细信息:无法连接到 staging.dnslaude.com

要修复这些错误,请确保您输入的域名
正确,并且该域的 DNS A 记录
包含正确的 IP 地址。此外,请检查
您的计算机是否具有可公开路由的 IP 地址,并且没有
防火墙阻止服务器与
客户端通信。如果您使用的是 webroot 插件,您还应该验证
您是否从您提供的 webroot 路径提供文件。

我遵循了基本设置指南这里,并尝试了各种配置变化,例如建议的这里。但是,我无法忽略上述错误 - 并且在日志文件中看不到任何内容来表明原因。

有什么建议么?

答案1

您的 nginx 配置看起来正确。

凭直觉,我运行了nmap您的域名(因为您将其包含在您的问题中);看起来您当前正在过滤端口 80,因此 LetsEncrypt 无法进行外部连接和验证。

您需要确保相关服务器的本地防火墙(以及 vhost 提供程序或类似程序上可能存在的任何 ACL)上的端口 80 可供外部访问。

答案2

如果您将 http-01 质询从 http 重定向到 https,也可能会出现此错误。.well-known/acme-challenge 目录需要通过端口 80 上的 http 进行访问。

答案3

他们故意混淆视听。我遇到了同样的 400 错误,又开始陷入续订的泥潭。之前的错误有所不同。解决方案:从 SSL for Free 中删除以前的证书,并从服务器卸载过期的证书。(只要过期的证书仍处于配置和活动状态,您就永远不会获得新的证书)jar2

相关内容