Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ubuntu上的Letsencrypt、nginx和虚拟服务器_Ubuntu_Ssl_Nginx_Ssl Certificate_Lets Encrypt - Fatal编程技术网

Ubuntu上的Letsencrypt、nginx和虚拟服务器

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

我正在使用一个自动化的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"
    }
  ]
}
有几点值得一提:

  • foo.com和foobar.com的nginx配置相同(除非指定了服务器名称)
  • foo和foobar网站的文件夹结构和权限完全相同
  • 网站具有相同的物理静态IP地址,但服务器名称不同;i、 不同的域名解析为相同的IP地址
  • 以下是我尝试为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/


    谁能解释一下是什么导致了这个问题如何解决这个问题呢?

    省时的建议是,在服务器块中添加此位置块,然后再试一次

    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


    您是否了解了让nginx如何做到这一点?这听起来像是你在试图做它在脚本中做的事情,但是在一个容器中


    完全使用docker容器可能更容易,但如果您不能,这可能有助于指导您完成脚本的设置。

    您是否了解了lets nginx是如何做到这一点的?这听起来像是你在试图做它在脚本中做的事情,但是在一个容器中


    完全使用docker容器可能更容易,但如果不能,这可能有助于指导您完成脚本的设置。

    这两个错误看起来不相关。此类文件或目录不应返回404,但ACME质询将收到403。您确定nginx用户可以访问
    acme challenge
    路径上的所有内容吗?在其中创建一个文件,看看是否可以从域中访问它。这两个错误看起来不相关。此类文件或目录不应返回404,但ACME质询将收到403。您确定nginx用户可以访问
    acme challenge
    路径上的所有内容吗?在那里创建一个文件,看看是否可以从域访问它。