我使用useful tool来自letsencrypt自动创建和续订SSL证书。我有"参数化#34;链接网站上显示的步骤,以便我可以使用说明获取和维护多个网站的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修改)时,它返回以下消息:
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"
}
]
}
值得一提的几点:
以下是我尝试获取 foobar 证书后的错误日志的内容:
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/
。
任何人都能解释造成这个问题的原因吗? - 如何解决?
答案 0 :(得分:0)
节省时间的建议,在服务器块中添加此位置块并尝试
location ~ /.well-known {
allow all;
root /path/to/webroot/;
}
如果您使用其他命令(正在使用)没有问题:
/opt/letsencrypt/letsencrypt-auto certonly -a webroot --webroot-path="/path/to/webroot/" -d "domain_name1" -d "domain_name2" --non-interactive --email="you@email.com" --agree-tos
注意:
假设您已将letsencrypt安装路径安装为/ opt / letsencrypt /
在Ubuntu 14.04& 16.04,希望在任何Linux系统中使用它都没有问题
如果您使用新的certbot将letsencrypt-auto重命名为certbot-auto
答案 1 :(得分:0)
你看过let-nginx是如何做到这一点的吗?听起来你正试图在它的entrypoint.sh脚本中进行基本上正在做的事情,但是在容器内。
完全使用docker容器可能更容易,但是如果你不能这样做可能会有助于指导你完成脚本的设置。