SSL证书申请 和 重新签发 都提示错误

wz1990123 2020-5-22 1340



SSL证书申请 和 重新签发 都提示错误

最新回复 (13)
  • 虚竹 2020-5-23
    引用 2
    【网站管理】应用中出现这种情况:
    一般是由于Let's Encrypt这个免费SSL提供商(海外的)无法连接到你的网站引起的,如果网站本身能在外网正常访问,那通常就是网络连通性问题。
    解决办法:如果是网络连通性问题,你不可能让Let's Encrypt换服务器,只能自己换了。

    【Let's Encrypt】应用中出现这种情况:
    考虑关掉nginx服务后,再签发看看。
    如果仍然是这个错误,原因同【网站管理】中的情况。
  • Websitetester 2020-5-31
    引用 3
    谢谢虚竹的回复。不过这个解释还是不能完全回答这个问题。我碰到的问题和题主的问题类似,也是403 invalid response但是下面还显示404。错误信息里面似乎是说/.well-known/acme-challenge/5ED_q6-H-qd_Ij-ffasd-JDJLKSF7 访问404。

    问题是,我的服务器刚刚按照这个迁移:https://help.appnode.com/faq/appnode-backup.html。在旧服务器申请和签发正常。新服务器上一切不变但是部分网站可以重新签发,部分网站不可以。都是指在网站管理里面直接续签,网站管理版本是最新的1.10.4-1.el7。

    经过对比,没有发现任何和能签发的网站的区别,除了下面的问题:

    1. 在这里发现这种文件:/etc/nginx/conf.sitemgr.d/global/letsencrypt/.well-known/acme-challenge/,但是感觉有的错误信息显示是在查找网站目录www/.well-known/acme-challenge/找不到。
    2。access.log里面有的时候回复200,有的时候是404。但是都返回一样问题。
    4.nginx错误里面有提示php-pool目录写权限问题,发现网站目录都是root:root,即使设置成www:www,重新部署以后又回到root:root。另外还发现有的网站说/var/cache/nginx/没有写权限,给了写权限。但是这些似乎不影响,能签发的网站还是可以,有问题的网站还是不能成功。

    请问,如果是网站的https里面直接签发,acme-challenge文件是具体保存到哪个目录?是否和写权限有关系?为什么部分网站能正确提供acme-challenge文件,有的返回404,是否中间有什么环节造成这个问题呢?
  • Websitetester 2020-6-3
    引用 4
    @虚竹,可以麻烦你回复一下吗?虽然网站少于10个,特意成为你们的付费用户,就是为了支持你们。所以希望这个问题能解决。这个看起来在论坛里面好多报错的,但是没看到真正解决。并不完全是因为letsencrypt找不到的问题。
  • 虚竹 2020-6-4
    引用 5
    Websitetester 谢谢虚竹的回复。不过这个解释还是不能完全回答这个问题。我碰到的问题和题主的问题类似,也是403 invalid response但是下面还显示404。错误信息里面似乎是说/.well-known/ac ...
    能重现的话,希望出现404时你可以给出具体的let's encrypt错误信息。
    404和403的情况不同,404意味着你的网站上没有这个认证文件。
    这个认证文件是在签发过程中动态写入的,具体流程为:
    1. 开始签发,面板修改nginx配置,加入acme认证路径,并在相应路径(/etc/nginx/conf.sitemgr.d/global/letsencrypt/.well-known/acme-challenge/)下增加认证文件
    2. 面板通知let's encrypt开始验证,let's encrypt会请求你网站上对应的http文件
    3. 不论验证完成/失败,面板都会自动删除认证文件,并将nginx配置文件还原

    可以肯定的是,无论什么情况下,只要开始认证就一定会向/etc/nginx/conf.sitemgr.d/global/letsencrypt/.well-known/acme-challenge/路径下写入这个网站的认证文件。
    所以出现404的可能原因,只有两种:
    1. 你的网站的nginx配置源文中有部分配置影响了acme认证
    2. nginx配置源文出现错误,导致重载无效
    根据你说的只有部分网站出现404的情况,可以说明nginx配置是没有错误的,因此推测可能原因只能是第1种。
  • 虚竹 2020-6-4
    引用 6
    Websitetester 谢谢虚竹的回复。不过这个解释还是不能完全回答这个问题。我碰到的问题和题主的问题类似,也是403 invalid response但是下面还显示404。错误信息里面似乎是说/.well-known/ac ...
    至于你提到的:
    nginx错误里面有提示php-pool目录写权限问题,发现网站目录都是root:root,即使设置成www:www,重新部署以后又回到root:root。另外还发现有的网站说/var/cache/nginx/没有写权限,给了写权限。但是这些似乎不影响,能签发的网站还是可以,有问题的网站还是不能成功。

    网站目录下,只有www整个目录默认是www:www,允许写入,其它目录考虑到安全,是不允许写入的,如果把其它不应该写入的眼光设置成了www:www,那么攻击者就很容易利用你的程序漏洞破坏环境。
    事实上,如果网站不需要写入文件(如不需要上传文件),那么把www目录设置成root:root会更加安全。
    相关基础知识可以百度linux文件权限内容进行补充。
  • Websitetester 2020-6-8
    引用 7
    虚竹 能重现的话,希望出现404时你可以给出具体的let's encrypt错误信息。 404和403的情况不同,404意味着你的网站上没有这个认证文件。 这个认证文件是在签发过程中动态写入的,具体流程 ...
    谢谢虚竹.
    如果不能通过,出现错误,貌似error.log里面就是报的是/data/mystack/website/www/.well-known/acme-challenge/5ED_q6-H-qd_Ij-ffasd-JDJLKSF7 这样的文件找不到,而不是/etc/nginx/conf.sitemgr.d/global/letsencrypt/.well-known/acme-challenge/ 这也是我之前感觉奇怪的地方.

    如果能通过,没有错误信息.可能这时候是/etc/nginx/conf.sitemgr.d/global/letsencrypt/.well-known/acme-challenge/.因为那里有一个conf/letsencrypt-acme-challenge.conf, 会设置root为/etc/nginx/conf.sitemgr.d/global/letsencrypt. 猜测成功的网站conf/letsencrypt-acme-challenge.conf被临时设置然后完成以后再去除.

    问题是,能通过的网站和不能通过的,配置上没有任何区别,我甚至新建的一个网站,一模一样的设置,还是一样错误. 

    能麻烦问一下: 是否可能conf/letsencrypt-acme-challenge.conf设置被缓存了或者无法找到conf/letsencrypt-acme-challenge.conf之类,造成验证最后一步去错误第寻找/data/mystack/website/www/.well-known/acme-challenge/? 还有任何办法可以查看中间这些步骤的log或者调试方法吗?

    我最后采用dns验证的方式完成ssl设置,并且设置为自动续期. 最后一个问题是: 采用dns自动续期是否一直重用之前txt记录,不用再手工设置验证? 
  • 虚竹 2020-6-9
    引用 8

    如果你要签发证书的域名在网站中能匹配到,那么面板会修改相应网站的配置文件,加上以下配置段:

    if ($uri = '/.well-known/acme-challenge/xxxx验证地址xxxx') {
        return 200 xxxxx验证串xxxx;
    }


    如果没有匹配到,则会插入临时配置文件/etc/nginx/conf.sitemgr.d/global/conf/letsecrypt-tmp/16位随机串.conf

    server {
            listen 80;
            server_name 域名;
            include conf.sitemgr.d/global/conf/letsencrypt-acme-challenge.conf;
    }

    并新建验证文件:
    /etc/nginx/conf.sitemgr.d/global/letsencrypt/.well-known/acme-challenge/验证地址

    写配置文件到还原配置文件过程比较快,如果需要查看配置文件中修改的部分,可以使用命令死循环读取配置文件:
    cat /data/mystack/website/conf/nginx.conf
    变更后,按ctrl+c中止命令。

    排查时,可重点查看有没有rewrite规则影响了let's encrypt的验证配置段。

    DNS验证,每次生成的串是不一样的。

  • Websitetester 2020-6-9
    引用 9
    虚竹您好,感谢你的快速回复.

    我采用这个命令查看/data/mystack/sites/[website]/conf/的文件改动:watch -d -t -g ls -lR && cat nginx.conf
    任何这个目录的改动都能显示出nginx.conf的最新内容. 手工测试都没问题.

    但是测试生成证书失败找不到的时候, 这个nginx.conf没有任何变化. 然后在error.log里面没有错误信息. 在access.log里面却能看到这样的信息:
    162.158.90.38 - - [Jun/09/2020:16:35:04 +1000] "GET /.well-known/acme-challenge/lasdfadsfds_asdfdsafBEavtckcUyPuIRMydT4O9VINrpaE HTTP/1.1" 404 23505 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)"

    这会是什么原因呢?
  • 虚竹 2020-6-9
    引用 10
    给出签发失败的域名对应的网站的源文配置,看看是否有特别之处。
  • Websitetester 2020-6-9
    引用 11
    下面是源文件配置. 基本就是标准的, 没有改过特别的地方. 都是通过网站管理设置的. 和能通过的网站是一样的. 域名和ip改了一下.

    server {
        listen                     160.130.11.20:80;
        listen                     160.130.11.20:443 ssl http2;
        server_name                www.website.com;
        charset                    utf-8;
        ssl_certificate            /data/mystack/sites/www.website.com/ssl/site.crt;
        ssl_certificate_key        /data/mystack/sites/www.website.com/ssl/site.key;
        ssl_prefer_server_ciphers  on;
        ssl_ciphers                ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
        ssl_protocols              TLSv1 TLSv1.1 TLSv1.2;
        ssl_session_cache          shared:SSL:5m;
        ssl_session_timeout        5m;
        keepalive_timeout          75s;
        keepalive_requests         100;
        access_log                 /data/mystack/sites/www.website.com/log/nginx/access.log;
        error_log                  /data/mystack/sites/www.website.com/log/nginx/error.log;
        root                       /data/mystack/sites/www.website.com/www;
        set_real_ip_from           127.0.0.1;
        real_ip_header             X-Real-IP;
        real_ip_recursive          on;
        gzip                       off;
        brotli                     on;
        brotli_comp_level          6;
        brotli_min_length          1k;
        brotli_types               text/plain text/css text/xml text/javascript text/x-component application/json application/javascript application/x-javascript application/xml application/xhtml+xml application/rss+xml application/atom+xml application/x-font-ttf application/vnd.ms-fontobject image/svg+xml image/x-icon font/opentype;
        client_max_body_size       10M;

        location / {
            index      index.php;
            try_files  $uri $uri/ /index.php?$args;
        }

        location ~ ^/.+\.php(/|$) {
            include                  conf.sitemgr.d/global/conf/fastcgi_params;
            fastcgi_index            index.php;
            fastcgi_param            SCRIPT_FILENAME /data/mystack/sites/www.website.com/www$fastcgi_script_name;
            fastcgi_split_path_info  ^(.+\.php)(/.*)$;
            fastcgi_param            PATH_INFO $fastcgi_path_info;
            fastcgi_param            PATH_TRANSLATED $document_root$fastcgi_path_info;
            fastcgi_read_timeout     600s;
            fastcgi_pass             unix:/data/mystack/sites/www.website.com/php-pool/php-fpm.sock;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|ico|bmp|swf|eot|svg|ttf|woff|woff2)$ {
            expires        30d;
            log_not_found  off;
        }

  • 虚竹 2020-6-10
    引用 12
    Websitetester 下面是源文件配置. 基本就是标准的, 没有改过特别的地方. 都是通过网站管理设置的. 和能通过的网站是一样的. 域名和ip改了一下. server { listen ...
    官网后台提交个工单,带上权限,我们开发人员上去瞧瞧看。
  • Websitetester 2020-6-26
    引用 13
    @虚竹 感谢帮忙。已经解决了,直接用acme.sh做了个脚本采用dns 服务器接口做通配符域名,即解决问题这个内置ssl工具问题,又能支持dns自动更新了。真香
  • Websitetester 2020-6-26
    引用 14
    建议你们采用acme.sh实现,允许客户填写dns服务器令牌,以便自动设置txt记录进行ssl证书生成。

    再次感谢帮助。
返回
发新帖