我目前正在运行几个 docker 容器。一个用于 nginx,一个用于我的 node js 应用程序,最后一个用于从 lets encrypt 创建和更新认证。这在一段时间内运行得很好,但我遇到了一个问题。
在此服务器上,我有 5 个域,它们都安装了 SSL。但现在我无法再安装任何证书。我收到以下信息:
- The following errors were reported by the server:
Domain: domain1.com
Type: unauthorized
Detail: Incorrect validation certificate for tls-sni-01 challenge.
Requested
c7a966714b5363c594f152b27f947722.f767e462430a051872cd4eaab3969248.acme.invalid
from MY_IP:443. Received 2 certificate(s), first
certificate had names "domain0.com"
环顾四周后,我发现如果我去“https://domain1.com/“我收到一条错误消息,内容如下:
Safari 无法验证网站“domain1.com”的身份。
当我单击“显示证书”时,它会显示 domain0.com 的证书
这是 domain0.com 的配置
server {
listen 80;
server_name domain0.com;
location /.well-known/acme-challenge {
proxy_pass http://certbot:80;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto https;
}
location / {
return 301 https://$server_name$request_uri;
}
}
server {
listen 443;
server_name domain0.com;
client_max_body_size 50M;
ssl on;
ssl_certificate /etc/letsencrypt/live/domain0.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain0.com/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_dhparam /etc/ssl/private/dhparams.pem;
location /.well-known/acme-challenge {
proxy_pass http://certbot:443;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto https;
}
location / {
proxy_pass http://cldapi1:8080;
proxy_set_header Host $host;
proxy_set_header X-Protocol https;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
certbot 是指向 lets encrypt 容器的链接,cldapi1 是指向节点应用程序的链接。
我猜这是默认服务器,因为它是 nginx 配置中的第一个服务器块。但是当我尝试创建 SSL 默认服务器时,它不起作用,因为我没有默认服务器的证书,而且如果我有一个证书,它无法与 lets encrypt 很好地兼容。
我认为我需要一种方法来在让加密寻找 SSL 证书时不让服务器使用 SSL 证书进行响应。
如果您有任何建议或问题,请告诉我!
我正在运行 nginx 版本 1.11.9 和 certbot 版本 0.9.3
答案1
我已经通过在请求证书时使用此参数解决了这个问题
--standalone-supported-challenges http-01