Ubuntu上的Letsencrypt、nginx和虚拟服务器
我正在使用一个自动化的SSL证书的创建和更新。我已“参数化”链接网站上显示的步骤,以便我可以使用说明获取和维护多个网站的SSL证书 我正在Ubuntu 16.0.4 LTS上运行nginx。我正在使用nginx运行多个虚拟服务器 我成功地获得了第一个域(foo.com、www.foo.com、mail.foo.com)的证书,因此我知道我的步骤/脚本等“参数化”工作正常 我现在正试图获得其他网站的证书。我正在尝试获取foobar.com、www.foobar.com、mail.foobar.com和staff.foobar.com的证书 当我运行getcert.sh脚本(为foobar.com修改)时,它返回以下消息:Ubuntu上的Letsencrypt、nginx和虚拟服务器,ubuntu,ssl,nginx,ssl-certificate,lets-encrypt,Ubuntu,Ssl,Nginx,Ssl Certificate,Lets Encrypt,我正在使用一个自动化的SSL证书的创建和更新。我已“参数化”链接网站上显示的步骤,以便我可以使用说明获取和维护多个网站的SSL证书 我正在Ubuntu 16.0.4 LTS上运行nginx。我正在使用nginx运行多个虚拟服务器 我成功地获得了第一个域(foo.com、www.foo.com、mail.foo.com)的证书,因此我知道我的步骤/脚本等“参数化”工作正常 我现在正试图获得其他网站的证书。我正在尝试获取foobar.com、www.foobar.com、mail.foobar.co
memyself@yourbox:/opt/sslcert/foobar# su -s /bin/bash -c '/opt/sslcert/foobar/bin/getcert.sh' sslcert
acme/challenge failed: {
"type": "http-01",
"status": "invalid",
"error": {
"type": "urn:acme:error:unauthorized",
"detail": "Invalid response from http://mail.foobar.com/.well-known/acme-challenge/RsX0GNAPx-ODGvMTHCjQ9uSru7AazwkmmG6gmo-yAkk: \"\u003chtml\u003e\r\n\u003chead\u003e\u003ctitle\u003e404 Not Found\u003c/title\u003e\u003c/head\u003e\r\n\u003cbody bgcolor=\"white\"\u003e\r\n\u003ccenter\u003e\u003ch1\u003e404 Not Found\u003c/h1\u003e\u003c/center\u003e\r\n\u003chr\u003e\u003ccenter\u003e\"",
"status": 403
},
"uri": "https://acme-v01.api.letsencrypt.org/acme/challenge/83fRVxQHUjMUHzqK2Cc0gTflM_3wuwuItW5-Y6Xlfo0/360341585",
"token": "RsX0GNAPx-ODGvMTHCjQ9uSru7AazwkmmG6gmo-yAkk",
"keyAuthorization": "RsX0GNAPx-ODGvMTHCjQ9uSru7AazwkmmG6gmo-yAkk.9CRniSJOopxytAkBrkdIFkhM5tJzGI6kbXfB0998SNk",
"validationRecord": [
{
"url": "http://mail.foobar.com/.well-known/acme-challenge/RsX0GNAPx-ODGvMTHCjQ9uSru7AazwkmmG6gmo-yAkk",
"hostname": "mail.foobar.com",
"port": "80",
"addressesResolved": [
"66.228.37.10"
],
"addressUsed": "66.228.37.10"
}
]
}
有几点值得一提:
memyself@yourbox:~# cat /var/log/nginx/error.log
2016/11/19 10:07:41 [error] 30345#30345: *78 open() "/opt/sslcert/foo/acme-challenge/1aLrSYLJGhDBtihuoXAsdh1K0jpdmcWBYWYPGxFNJXo" failed (2: No such file or directory), client: 66.133.109.36, server: foo.com, request: "GET /.well-known/acme-challenge/1aLrSYLJGhDBtihuoXAsdh1K0jpdmcWBYWYPGxFNJXo HTTP/1.1", host: "mail.foobar.com"
从上面可以看出,正在尝试从/opt/sslcert/foo/acme challenge/
读取证书,而应该是/opt/sslcert/foobar/acme challenge/
谁能解释一下是什么导致了这个问题如何解决这个问题呢?省时的建议是,在服务器块中添加此位置块,然后再试一次
location ~ /.well-known {
allow all;
root /path/to/webroot/;
}
如果使用另一个命令(我使用的命令)没有问题:
注:
- 假设您安装的letsencrypt安装路径为/opt/letsencrypt/
- 在Ubuntu 14.04和16.04上测试,希望在任何linux系统中使用它都不会有问题
- 如果您使用的是新的,请将letsencrypt auto重命名为certbot auto
location ~ /.well-known {
allow all;
root /path/to/webroot/;
}
如果使用另一个命令(我使用的命令)没有问题:
注:
- 假设您安装的letsencrypt安装路径为/opt/letsencrypt/
- 在Ubuntu 14.04和16.04上测试,希望在任何linux系统中使用它都不会有问题
- 如果您使用的是新的,请将letsencrypt auto重命名为certbot auto
完全使用docker容器可能更容易,但如果您不能,这可能有助于指导您完成脚本的设置。您是否了解了lets nginx是如何做到这一点的?这听起来像是你在试图做它在脚本中做的事情,但是在一个容器中
完全使用docker容器可能更容易,但如果不能,这可能有助于指导您完成脚本的设置。这两个错误看起来不相关。此类文件或目录不应返回404,但ACME质询将收到403。您确定nginx用户可以访问
acme challenge
路径上的所有内容吗?在其中创建一个文件,看看是否可以从域中访问它。这两个错误看起来不相关。此类文件或目录不应返回404,但ACME质询将收到403。您确定nginx用户可以访问acme challenge
路径上的所有内容吗?在那里创建一个文件,看看是否可以从域访问它。