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
配置NGINX+;CloudFlare+;SSL_Ssl_Nginx_Https_Ubuntu 16.04_Cloudflare - Fatal编程技术网

配置NGINX+;CloudFlare+;SSL

配置NGINX+;CloudFlare+;SSL,ssl,nginx,https,ubuntu-16.04,cloudflare,Ssl,Nginx,Https,Ubuntu 16.04,Cloudflare,所以 我在端口8080的服务器上运行了一个节点应用程序,我正在尝试使用NGINX和CloudFlare使其能够通过SSL工作。请注意以下几点 我的主机运行的是Ubuntu 16.04 LTS 我目前正在使用CloudFlare的通用SSL(免费层) 我的测试主机DNS设置为test.company.com 我已将CloudFlare源拉证书从post复制到我的测试箱的/etc/nginx/certs …我以前的NGINX配置看起来像 server { listen 80; lo

所以

我在端口8080的服务器上运行了一个节点应用程序,我正在尝试使用NGINX和CloudFlare使其能够通过SSL工作。请注意以下几点

  • 我的主机运行的是Ubuntu 16.04 LTS
  • 我目前正在使用CloudFlare的通用SSL(免费层)
  • 我的测试主机DNS设置为test.company.com
  • 我已将CloudFlare源拉证书从post复制到我的测试箱的/etc/nginx/certs
  • …我以前的NGINX配置看起来像

    server {
        listen 80;
    
        location / {
            proxy_pass http://localhost:8080;
        }
    }
    
    ……现在看起来

    # HTTP
    server {
      listen 80;
      listen [::]:80 default_server ipv6only=on;
      return 301 https://$host$request_uri;
    }
    
    # HTTPS
    server {
      listen 443;
      server_name test.company.com;
    
      ssl on;
      ssl_client_certificate /etc/nginx/certs/cloudflare.crt;
      ssl_verify_client on;
      ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
      ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
      ssl_prefer_server_ciphers on;
    
      location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://localhost:8080/;
        proxy_ssl_session_reuse off;
        proxy_set_header Host $http_host;
        proxy_cache_bypass $http_upgrade;
        proxy_redirect off;
      }
    }
    
    …我遵循了这个例子和它提供的链接,我怀疑上面的一切都是必需的(我是一个极简主义者)。每当我运行
    sudonginx-t
    时,我仍然会在未指定ssl\u证书和ssl\u证书密钥方面出错。我不知道如何从CloudFlare下载require文件,据我所知,我认为我不需要这样做

    如果我尝试将CloudFlare原始pull证书作为ssl_证书和ssl_证书_密钥重新使用,则得到的错误
    nginx:[emerg]ssl_CTX_use_PrivateKey_文件(“/etc/nginx/certs/CloudFlare.crt”)失败(SSL:error:0906D06C:PEM例程:PEM\u read\u bio:no start line:expected:ANY PRIVATE KEY error:140B0009:SSL例程:SSL\u CTX\u use\u PRIVATE KEY\u file:PEM lib)


    我相信有可能创建我自己的自签名证书,但我计划最终使用此策略来加速生产机器。非常感谢为我指明正确方向的任何帮助。

    看起来您正在使用Cloudflare的原始CA服务,很好

    该问题看起来像是您将SSL私钥放入了
    SSL\u client\u certificate
    属性中,而没有将真正的SSL证书放入配置中。您的Nginx SSL配置应该包含以下行:

    
    ssl_certificate/path/to/your_certificate.pem;
    ssl\u证书\u密钥/path/to/your\u key.key;
    

    确保SSL证书对应于具有正确内容的.PEM文件,并且证书密钥文件也包含具有正确内容的.Key文件

    要使用源CA生成证书,请导航到Cloudfalre仪表板的Crypto部分。从那里,单击源证书部分中的Create certificate按钮。完成向导中的步骤后,您将看到一个窗口,该窗口允许您下载证书文件和密钥文件。请确保将它们放置在在正确的文件中,并将其安装到web服务器上

    进一步阅读:


    使用我自己生成的pem和密钥,它是有效的。使用CloudFlare生成的文件,我也有同样的问题。你发现了什么问题吗?@ClémentDuveau我已经有一段时间没有研究过这个问题了,但我想当你第一次创建CloudFlare发行版(或任何它的名称)时,ssl_certificate_密钥在当时提供一次,并且需要与您可以随时从CloudFlare下载的证书一起使用。在我写这篇文章时,我认为我根本无法访问原始密钥文件。我希望这会有所帮助,但我真的不确定。