SSL证书暂时出现在网站上,然后消失

时间:2016-04-25 21:37:06

标签: node.js ssl nginx https

我在我的网站上实施了SSL,但Chrome上的绿色条闪烁片刻然后消失了。我的证书由Comodo签署。 AFAIK我的nginx配置是正确的,但我似乎无法让https坚持下去。我的8080重定向工作,我的证书有chmod 600,并且在指定的目录中。

有什么想法吗?

server {
    listen          8080;
    server_name     *.example.com;
    return          301 https://www.example.com;
}

server {
    listen                  443 ssl;
        server_name             *.example.com;
        ssl_certificate         /home/ubuntu/example.com.ssl/example.com.crt;
        ssl_certificate_key     /home/ubuntu/example.com.ssl/example.com.key;
        ssl_protocols           TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers             HIGH:!aNULL:!MD5;
    location / {
        proxy_pass  http://localhost:3333;
    }
}

编辑:我的证书由受信任的机构签署。

1 个答案:

答案 0 :(得分:0)

正如评论中所述,https配置设置最好通过此工具运行您的网站进行测试:https://www.ssllabs.com/ssltest/

您提到遗漏了一些CA文件,因此我猜测您的证书只是您网站的证书而不是完整链回到根证书?

通过查看您的证书文件可以轻松验证这一点:

ssl_certificate     /home/ubuntu/example.com.ssl/example.com.crt;

如果此文件包含一个证书,那么(只有一个BEGIN CERTIFICATE行)就是问题。它应包含至少两个证书(对于三个证书链),如果您的CA使用更长的证书链,则可能包含更多证书。根证书不需要(也不应该是!)在浏览器已知的文件中。

因此,获取中间证书(它们应该已经提供了您的证书 - 但也可以here for Comodo),然后合并到一个文件中:

cat example.com.crt intermediate.crt > example.com_with_chain.crt

或者如果你有两个中间体,那么如下所示(其中intermediate1.crt os是颁发证书的证书,它由intermediate2.crt颁发,由浏览器信任的root证书颁发):

cat example.com.crt intermediate1.crt intermediate2.crt > example.com_with_chain.crt

请注意,订单很重要。然后更新您的ssl_certificate配置以指向这些组合的crt,然后重新启动Nginx并重复ssltest测试。