HTTPS 证书在 Chrome 上运行,但在 Firefox 上运行不成功

HTTPS 证书在 Chrome 上运行,但在 Firefox 上运行不成功

我已经在 NginX 中安装了 SSL 证书,但它在 FireFox 上不起作用。

下面是我的 nginx 配置,不是我自己写的,我特别担心 localhost 服务器指向不同的(有故障的)证书。但我不确定这些是否被使用。

http {
    passenger_root /usr/local/rvm/gems/ruby-1.9.3-p327/gems/passenger-3.0.18;
    passenger_ruby /usr/local/rvm/wrappers/ruby-1.9.3-p327/ruby;

    include       mime.types;
    default_type  application/octet-stream;

    access_log  /opt/nginx/logs/access.log;

    client_max_body_size 100m;

    sendfile        on;
    keepalive_timeout  65;

    gzip  on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_proxied any;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    # Make sure gzip does not lose large gzipped js or css files
    gzip_buffers 16 8k;
    # Disable gzip for certain browsers.
    gzip_disable "MSIE [1-6].(?!.*SV1)";

    server {
        listen    80;
        server_name  localhost;

        #charset koi8-r;

        access_log  logs/host.access.log;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    server {
        listen       80;
    server_name  yyyytest.xxx.nl;
        root /home/railsapps/yyyytest.xxx.nl/source/current/public;
        passenger_enabled on;
        rails_env preview;
    }

    server {
        listen       80;
        server_name  wijziging.xxx.nl;
        rewrite      ^ https://$server_name$request_uri? permanent;
    }

   server {
        listen       80;
        server_name  yyyy.xxx.nl;
        rewrite      ^ https://$server_name$request_uri? permanent;
    }

   server {
        listen       443;
        server_name  localhost;

        #charset koi8-r;

        access_log  logs/host.access.log;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        ssl                  on;
        ssl_certificate      /etc/ssl/certs/yyyy_xxx_nl.crt;
        ssl_certificate_key  /etc/ssl/certs/positivessl.key;
    }

   server {
        listen       443;
        server_name  wijziging.xxx.nl yyyy.xxx.nl;
        root /home/railsapps/yyyy.xxx.nl/source/current/public;
        passenger_enabled on;

        ssl                  on;
        ssl_certificate      /etc/ssl/certs/wijziging_xxx_nl.crt;
        ssl_certificate_key  /etc/ssl/certs/wijziging_xxx_nl.key;
    }
}

但该证书在 Chrome 中有效。

答案1

TL;DR:您的配置看起来不错,但正如 deppfx 所说,您似乎尚未将证书链输入回 Comodo 的证书文件。您只需将额外的证书附加到 .crt 文件(示例中为 cert.pem)即可完成此操作。服务器证书必须是文件中的第一个,否则私钥和公钥之间会不匹配。

长版本:

每个浏览器都有一个它信任的证书列表,用于颁发其他证书。但您使用的证书通常会有一个中间步骤 - 即根 Comodo 证书已用于签署中间证书,并且该证书已用于颁发您的证书。因此,证书链如下所示:

Root Comodo certificate -> Intermediate certificate -> Your certificate

因此,当 Firefox 连接时,它会发现您的证书存在,并且已由自称是 Comodo 的人签名。但由于 Firefox 没有中间证书,因此无法验证这是否确实是 Comodo,因此无法信任您的证书。

当您将中间证书添加到配置中时,Firefox 将同时收到您的证书和中间证书。然后 Firefox 可以检查中间证书是否确实由 Firefox 拥有的根证书签名,然后它将信任您的证书。

一步步:

  1. 您已经在文件 /etc/ssl/certs/wijziging_xxx.nl.crt 中拥有自己的证书。

  2. 根据以下说明下载中间证书和根证书https://support.comodo.com/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=1365&nav=0,96,1,95

  3. 将这些证书添加到 wiziging_xxx.nl.crt,如下所示:

    cat /path/to/intermediate.crt >> /etc/ssl/certs/wijziging_xxx.nl.crt

    cat /path/to/root.crt >> /etc/ssl/certs/wijziging_xxx.nl.crt

  4. 重新启动 nginx。

答案2

看起来您缺少根 CA(证书颁发机构)和证书颁发路径。

证书不良

良好证书

参考Bob的回答这里

相关内容