6

我正在尝试在我的 Ubuntu 16.0.4 服务器上使用certbot 和letsencrypt,所以我可以安装一个邮件服务器。

我正在像这样运行 certbot:

sudo /opt/letsencrypt/certbot-auto certonly --agree-tos --webroot -w /path/to/www/example -d example.com -d www.example.com

我从 certbot 得到以下输出(如下所示的片段):

   Domain: www.example.com
   Type:   unauthorized
   Detail: Invalid response from
   http://www.example.com/.well-known/acme-challenge/QEZwFgUGOJqqXHcLmTmkr5z83dbH3QlrIUk1S3JI_cg:
   "<html>
   <head><title>404 Not Found</title></head>
   <body bgcolor="white">
   <center><h1>404 Not Found</h1></center>
   <hr><center>"

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A record(s) for that domain
   contain(s) the right IP address.

这是我的目录结构的样子:

root@yourbox:/path/to/www/example$ ls -la
total 12
drwxr-xr-x 3 example root    4096 Nov  1 10:17 .
drwxr-xr-x 5 root        webapps 4096 Nov  1 10:13 ..
drwxr-xr-x 2 root        root    4096 Nov  1 10:36 .well-known
root@yourbox:/path/to/www/example$ 
root@yourbox:/path/to/www/example$ cd .well-known/
root@yourbox:/path/to/www/example/.well-known$ ls -la
total 8
drwxr-xr-x 2 root        root 4096 Nov  1 10:36 .
drwxr-xr-x 3 example root 4096 Nov  1 10:17 ..
root@yourbox:/path/to/www/example/.well-known$ 

从上面,我可以看到挑战文件不存在 - (大概?)因为,看起来 certbot 无法写入文件夹。

但是,我首先需要检查 nginx 是否设置正确,以及它是否从以句点开头的文件夹中提供文件。

这是网站的 nginx 配置文件(/etc/nginx/sites-available/example):

server {
    # Allow access to the letsencrypt ACME Challenge
    location ~ /\.well-known\/acme-challenge {
        allow all;
    }
}

我手动创建了一个测试文件(sudo touch /path/to/www/example/fake)并赋予它正确的权限:

root@yourbox:/path/to/www/example/.well-known/acme-challenge$ ls -l
total 0
-rw-r--r-- 1 example webapps 0 Nov  1 10:45 fake

然后我尝试从浏览器访问http://www.example.com/.well-known/acme-challenge/fake - 并收到 404 错误。

这意味着我有两个错误:

  1. Nginx 未正确设置以提供文件.well-known/acme-challenge夹中的文件
  2. 文件夹中的文件权限/path/to/www/example错误,导致certbot无法将其自动生成的文件写入文件.well-known/acme-challenge夹。

我该如何解决这些问题?

4

2 回答 2

5

您的 Nginx 配置文件没有配置可以使您的 /path/to/www/example/ 目录可通过网络访问。

这是一个简单的配置,它将让您的网站上线并允许 LetsEncyrpt 创建一个有效的证书。请记住端口 80 将需要可访问。

server {
    listen 80;

    server_name www.example.co.uk example.co.uk;

    root /path/to/www/example;

    access_log /var/log/nginx/example.co.uk.log;
    error_log /var/log/nginx/example.co.uk.log;

    index index.html index.htm index.php;

    location ~ /\.well-known\/acme-challenge {
        allow all;
    }

    location / {
        try_files $uri $uri/index.html $uri.html =404;
    }
}

相应地更改您的 server_name,或使用您的 /etc/hosts 文件来配置本地域。

于 2016-11-09T09:50:51.357 回答
0

我遇到了同样的问题,这是由以下行引起的:

  location ~ /\. {
        deny all;
    }
   

我在上面提到的行上方添加了以下内容:

location ~ /\.well-known\/acme-challenge {
        allow all;
    }   
于 2020-12-30T12:31:05.223 回答