Nginx配置HTTPS后浏览器提示证书无效,但openssl测试正常求助
解决自签名SSL证书在浏览器中无效的问题
核心原因
浏览器对证书的校验比openssl s_client更严格,主要触发报错的两个关键点:
- 自签名证书不在浏览器的受信任根证书列表中
- 证书缺少
Subject Alternative Name (SAN)字段,或证书的通用名(CN)与访问的域名/IP不匹配
具体修复步骤
1. 重新生成包含SAN字段的合规自签名证书
现代浏览器要求证书必须包含SAN字段,仅设置CN字段的旧证书会被判定无效。执行以下命令生成符合规范的证书:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt -subj "/CN=<你的服务器域名或IP>" -addext "subjectAltName=DNS:<你的服务器域名>,IP=<服务器公网IP>"
替换命令中的<你的服务器域名或IP>为实际访问时使用的地址,确保两者完全一致。
2. 更新Nginx配置并重启服务
确认Nginx的SSL配置块指向新生成的证书和密钥:
server { listen 443 ssl; server_name <你的服务器域名或IP>; ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; # 保留原有的其他SSL配置内容 }
重启Nginx使配置生效:
sudo systemctl restart nginx
3. 在浏览器中手动信任证书
自签名证书无第三方CA背书,需手动添加到浏览器信任列表:
- Chrome:访问目标地址后,点击地址栏"不安全"提示 → 查看证书 → 详细信息 → 复制到文件,再通过系统证书管理器导入该证书,并设置为"受信任的根证书颁发机构"。
- Midori:打开浏览器设置 → 隐私与安全 → 证书 → 导入生成的
nginx-selfsigned.crt,勾选信任该证书用于网站认证。
4. 验证证书有效性
用以下命令检查证书是否包含正确的SAN字段:
openssl x509 -in /etc/ssl/certs/nginx-selfsigned.crt -text -noout | grep -A 3 "Subject Alternative Name"
若输出内容包含你设置的域名/IP,说明证书配置符合要求。
内容的提问来源于stack exchange,提问作者stustd
相关产品推荐
相关产品推荐

