Nginx/Certbot - 来自域/.well-known 的无效响应

Posted

技术标签:

【中文标题】Nginx/Certbot - 来自域/.well-known 的无效响应【英文标题】:Nginx/Certbot - invalid response from domain/.well-known 【发布时间】:2017-08-10 16:38:30 【问题描述】:

我正在尝试在Django 1.8 上运行的网页上设置https。我是这个领域的新手,所以我使用Certbot。我按照说明操作直到./path/to/certbot-auto certonly

您希望如何通过 ACME CA 进行身份验证?

1:将文件放在webroot目录(webroot) 2:启动临时网络服务器(独立)

我选择了 1。

然后它想要我的域,下一步是:

选择salix.sk的webroot:

>>> /home/django/salix

返回错误

等待验证...清理挑战失败 授权程序。 salix.sk (http-01): urn:acme:error:unauthorized :: 客户端缺少足够的 授权 :: 来自无效的响应 http://salix.sk/.well-known/acme-challenge/some_code: " 页面不”

重要提示: - 服务器报错如下:

域:salix.sk 类型:未授权详细信息:无效 来自http://salix.sk/.well-known/acme-challenge/some_code的回复: " 页面不”

要修复这些错误,请确保您的域名是 正确输入和该域的 DNS A 记录 包含正确的 IP 地址。

我认为我应该以某种方式在我的项目中设置路径,但不知道如何设置。它在我的项目的根目录内创建了一个文件夹.well-known,里面没有任何可见文件。

你知道该怎么做吗?

编辑: 我已更改 etc/nginx/sites-available/default 添加到服务器部分:

location ~ /.well-known 
                    allow all;
            

所以:

server 
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    # Make site accessible from http://localhost/
    server_name localhost;

    location / 
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
    

    # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
    #location /RequestDenied 
    #   proxy_pass http://127.0.0.1:8080;    
    #

    #error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    #
    #error_page 500 502 503 504 /50x.html;
    #location = /50x.html 
    #   root /usr/share/nginx/html;
    #

    # pass the php scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ 
    #   fastcgi_split_path_info ^(.+\.php)(/.+)$;
    #   # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    #
    #   # With php5-cgi alone:
    #   fastcgi_pass 127.0.0.1:9000;
    #   # With php5-fpm:
    #   fastcgi_pass unix:/var/run/php5-fpm.sock;
    #   fastcgi_index index.php;
    #   include fastcgi_params;
    #

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht 
    #   deny all;
    #
    location ~ /.well-known 
                allow all;
        

这也没有帮助。

【问题讨论】:

您使用 /usr/share/nginx/html 路径作为 html nginx 根目录。因此,您应该为 Certbot 指定相同的路径。类似 ./path/to/certbot-auto certonly --webroot -w /usr/share/nginx/html -d salix.sk 【参考方案1】:

在我的例子中,这个 nginx 配置运行良好:

location ^~ /.well-known 
        if ($request_uri ~* /.well-known/acme-challenge/(.*)) 
        set $tmp $1.ZzFvB6sHz7artk-kNCGMNtB_adt6f5K2tuL8Mf8uL1c;
    
    return 200 $tmp;

这里我得到 $1 - request_uri 末尾的第一个元素,添加一个字符串,由 certbot 在certbot renew 命令执行期间生成。

但我不确定下次它会起作用。

【讨论】:

【参考方案2】:

试试:

    apt 更新,apt 升级

    将时区和日期/时间更改为实际

    删除 IPv6 地址的 AAAA 记录

【讨论】:

以上是关于Nginx/Certbot - 来自域/.well-known 的无效响应的主要内容,如果未能解决你的问题,请参考以下文章

nginx::certbot制作免费证书

ini docker-compose + flask + nginx + certbot nginx配置

来自 Apache http /.well-known/acme-challenge 的无效响应

acme.sh 脚本因验证错误而失败:来自 https://example.com/.well-known/acme-challenge/etc 的响应无效。请添加“--debug”或“--log”

升级https证书

如何在 Identity Server 中设置 .well-known/openid-configuration 端点