![HTTPS 证书在 Chrome 上运行,但在 Firefox 上运行不成功](https://linux22.com/image/614864/HTTPS%20%E8%AF%81%E4%B9%A6%E5%9C%A8%20Chrome%20%E4%B8%8A%E8%BF%90%E8%A1%8C%EF%BC%8C%E4%BD%86%E5%9C%A8%20Firefox%20%E4%B8%8A%E8%BF%90%E8%A1%8C%E4%B8%8D%E6%88%90%E5%8A%9F.png)
我已经在 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 拥有的根证书签名,然后它将信任您的证书。
一步步:
您已经在文件 /etc/ssl/certs/wijziging_xxx.nl.crt 中拥有自己的证书。
根据以下说明下载中间证书和根证书https://support.comodo.com/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=1365&nav=0,96,1,95
将这些证书添加到 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
重新启动 nginx。