我正在使用一个有用的工具来自动化从letsencrypt创build和更新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)时,它返回以下消息:
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/
。
任何人都可以解释是什么导致这个问题? – 如何解决?
你看看let-nginx是怎么做的吗? 这听起来像你试图做本质上是在它的entrypoint.sh脚本,但在一个容器内。
这完全可以使用Docker容器,但如果你不能这样做,可能会帮助指导你完成一个脚本的设置。
一个节省时间的建议,添加这个位置块在你的服务器块,并尝试
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