... SO
我在端口8080上的服务器上运行节点应用程序,我正在尝试使用NGINX和CloudFlare使其能够在SSL上运行。请注意以下内容......
...我以前的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;
}
}
...我按照示例here及其提供的链接here,我怀疑上面的一切都是必需的(我是一个极简主义者)。每当我运行sudo nginx -t
时,我仍然会遇到ssl_certificate和ssl_certificate_key未指定的错误。我无法弄清楚如何从CloudFlare下载require文件,据我所知,我不相信我应该这样做。
如果我尝试重新使用CloudFlare origin pull证书作为ssl_certificate和ssl_certificate_key,我收到错误nginx: [emerg] SSL_CTX_use_PrivateKey_file("/etc/nginx/certs/cloudflare.crt") failed (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line:Expecting: ANY PRIVATE KEY error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib)
我确信可以创建自己的自签名证书,但我计划最终使用此策略来启动生产机器。非常感谢任何指导我指向正确方向的帮助。
答案 0 :(得分:5)
看起来你正在使用Cloudflare的Origin CA服务,很好!
问题似乎是您已将SSL私钥放在ssl_client_certificate
属性中,而不是将您的真实SSL证书放入配置中。您的Nginx SSL配置应包含以下行:
ssl_certificate /path/to/your_certificate.pem;
ssl_certificate_key /path/to/your_key.key;
确保SSL证书对应于具有正确内容的.PEM文件,并且证书密钥文件也包含具有正确内容的.KEY文件。
要使用Origin CA生成证书,请导航至Cloudfalre仪表板的加密部分。从那里,单击“原始证书”部分中的“创建证书”按钮。完成向导中的步骤后,您将看到一个允许您下载证书文件和密钥文件的窗口。确保将它们放在正确的文件中并将它们安装在Web服务器上。
进一步阅读: