我正在尝试安装LetsEncrypt
在我的服务器(我有 root SSH 访问权限)上,staging.dnslaude.com
这是一个可公开访问的域,指向213.212.81.89
。
服务器正在运行ubuntu 16.04
,并且是一个nginx
Web 服务器。以下是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