LetsEncrypt 不想验证我的域名

LetsEncrypt 不想验证我的域名

这几天一直困扰着我,我似乎不知道发生了什么。我设置了一台新服务器(使用灶神星,使用 nginx)。他们有一个内置工具来使用LetsEncrypt,据说这已经奏效了:

...然后是正在编辑的域:

在此处输入图片描述

配置文件文件中的设置如下(并且这些文件确实存在):

ssl_certificate      /home/admin/conf/web/ssl.steampj.com.pem;
ssl_certificate_key  /home/admin/conf/web/ssl.steampj.com.key;

我在定义位时也遇到了这个问题server {

server {
    listen      443 ssl;
    listen      [::]:443 ssl;

重启/重新加载 nginx 时没有出现任何错误。但当你到这里时,你会看到一个错误:https://steampj.com/

在此处输入图片描述

和:在此处输入图片描述

我很困惑为什么它不起作用

server {}以下是该域的完整条件:

server {
    listen      443 ssl;
    listen      [::]:443 ssl;
    server_name steampj.com www.steampj.com;
    root        /home/admin/web/steampj.com/public_html;
    index       index.php index.html index.htm;
    access_log  /var/log/nginx/domains/steampj.com.log combined;
    access_log  /var/log/nginx/domains/steampj.com.bytes bytes;
    error_log   /var/log/nginx/domains/steampj.com.error.log error;

    ssl_certificate      /home/admin/conf/web/ssl.steampj.com.pem;
    ssl_certificate_key  /home/admin/conf/web/ssl.steampj.com.key;

    location / {

        location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {
            expires     max;
        }

        location ~ [^/]\.php(/|$) {
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            if (!-f $document_root$fastcgi_script_name) {
                return  404;
            }

            fastcgi_pass    127.0.0.1:9005;
            fastcgi_index   index.php;
            include         /etc/nginx/fastcgi_params;
        }
    }

    error_page  403 /error/404.html;
    error_page  404 /error/404.html;
    error_page  500 502 503 504 /error/50x.html;

    location /error/ {
        alias   /home/admin/web/steampj.com/document_errors/;
    }

    location ~* "/\.(htaccess|htpasswd)$" {
        deny    all;
        return  404;
    }

    location /vstats/ {
        alias   /home/admin/web/steampj.com/stats/;
        include /home/admin/web/steampj.com/stats/auth.conf*;
    }

    include     /etc/nginx/conf.d/phpmyadmin.inc*;
    include     /etc/nginx/conf.d/phppgadmin.inc*;
    include     /etc/nginx/conf.d/webmail.inc*;

    include     /home/admin/conf/web/snginx.steampj.com.conf*;
}

我确实想知道是否是防火墙阻止了,但它似乎被设置为打开ufw

root@com:~# ufw status
Status: active

To                         Action      From
--                         ------      ----
8181                       ALLOW       Anywhere
443                        ALLOW       Anywhere
8181 (v6)                  ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

进而:

root@com:~# lsof -OnP | grep LISTEN
nginx      2382                     root   22u     IPv4              95181      0t0        TCP 213.219.38.44:443 (LISTEN)
nginx      2382                     root   45u     IPv6             264609      0t0        TCP *:443 (LISTEN)
nginx      2637                 www-data   22u     IPv4              95181      0t0        TCP 213.219.38.44:443 (LISTEN)
nginx      2637                 www-data   45u     IPv6             264609      0t0        TCP *:443 (LISTEN)
nginx      2638                 www-data   22u     IPv4              95181      0t0        TCP 213.219.38.44:443 (LISTEN)
nginx      2638                 www-data   45u     IPv6             264609      0t0        TCP *:443 (LISTEN)

更新2:我设法让 ipv6 的东西与 http 一起运行。它ufw出于某种原因阻止了端口(禁用它,然后一切正常……这没问题,因为我们有 iptables 和 fail2ban)

但是我仍然无法让它在 ipv4 上与 openssl 或 curl 连接 :/

root@steamdev2:~# curl -Iv4 https://steampj.com/
* Hostname was NOT found in DNS cache
*   Trying 213.219.38.44...
* Connected to steampj.com (213.219.38.44) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSLv3, TLS Unknown, Unknown (22):
* SSLv3, TLS handshake, Client hello (1):
* error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
* Closing connection 0
curl: (35) error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol


root@steamdev2:~# openssl s_client -connect steampj.com:443
CONNECTED(00000003)
139846633119256:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:794:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 315 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---

更新 3:我不确定这是否是问题所在,但我注意到我的另一台服务器(几周前设置的)正在使用 nginx1.10.0,而这个新的正在使用1.11.13... 也许有一个错误?

答案1

您的证书似乎运行良好,即使在具有严格策略的 Android 上也是如此。

根据评论:

  • 现在几乎所有人都认为该证书没有问题。
  • 您仍然会遇到错误。
  • LetsEncypt 仍然无法验证它。

我检查了你的SOA序列号,是2017040741昨天的,还有你的TTL设置为 24 小时。问题很可能是你的 DNS 缓存中有错误的 IP 地址递归 DNS 服务器以及 LetsEncrypt 使用的那个。(任何帮助你的人之前都没有缓存过它。)

明天再试。从这里开始,也可以使用更短的时间TTL,例如216006 小时。


更新:昨天证书似乎没有问题,但现在我已经ERR_SSL_PROTOCOL_ERROR

通过详细模式curl我可以看到实际的问题:

curl -v -ipv4 https://steampj.com/
* About to connect() to steampj.com port 443 (#0)
*   Trying 213.219.38.44...
* connected
* Connected to steampj.com (213.219.38.44) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
* Closing connection #0
curl: (35) error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

通常,当有其他程序在监听 443 端口时,就会出现SSL23_GET_SERVER_HELLO这种情况。大多数情况下,这种情况发生在 HTTPD 在没有 SSL 的情况下监听 443 端口时,但这次情况并非如此,因为您会得到ERR_INVALID_HTTP_RESPONSEhttp://steampj.com:443/,并且正如 netcat 所示:

nc -v steampj.com 443
DNS fwd/rev mismatch: steampj.com != li1097-44.members.linode.com
steampj.com [213.219.38.44] 443 (https) open
GET / HTTP/1.1
▒▒▒PuTTY

由于您nginx正在监听端口 443,因此lsof -OnP | grep LISTEN问题很可能出在 Nginx 配置上。

  1. 检查是否有其他server {}不必要的部分listen 443并将其删除。此外,我CApath: /etc/ssl/certs配置的替代部分也/home/admin/conf/web/建议了相同的操作。

  2. 检查你确实有ipv6only=on你有:

    server {
        listen      443 ssl;
        listen      [::]:443 ssl;
    

    根据 Nginx ngx_http_core_module 文档指示listen

    ipv6only=开|关

    此参数 (0.7.42) 确定(通过IPV6_V6ONLY套接字选项)监听通配符地址的 IPv6 套接字[::]是否只接受 IPv6 连接或同时接受 IPv6 和 IPv4 连接。此参数默认打开。启动时只能设置一次。

    尽管默认情况下此选项应为on,但您应该查看它是否off在配置的某处设置,并更新您的两个server {部分以具有:

    server {
        listen   443 ssl;
        listen   [::]:443 ipv6only=on ssl;
    

    on由于此参数只能在启动时设置一次,因此在配置中将其设置为该参数至关重要,default_server因为它也会影响所有后续server设置。

答案2

好吧,这实际上不是一个“答案”,但我已经设法让它发挥作用。

我从头开始,然后重新安装灶神星从头开始:

curl -O http://vestacp.com/pub/vst-install.sh

bash vst-install.sh --nginx yes --apache yes --phpfpm no --named no --remi yes --vsftpd yes --proftpd no --iptables yes --fail2ban yes --quota no --exim yes --dovecot yes --spamassassin yes --clamav yes --mysql yes --postgresql no --hostname com.mysite.com --email [email protected] --password xxx

然后我编辑了 /usr/local/vesta/data/templates/web/nginx/default.tpl,因此它还具有:

listen      [%ip%]:%proxy_port% ssl;

(由于某种原因,那里只有 IPv4,不确定为什么)。

然后我进入并设置域名,瞧——它成功了!

相关内容