网站SSL证书配置问题求助:Nginx部署自签证书后遭浏览器警告
问题描述
按照ArchWiki指南生成自签SSL证书,执行命令如下:
# mkdir /etc/nginx/ssl # cd /etc/nginx/ssl # openssl req -new -x509 -nodes -newkey rsa:4096 -keyout server.key -out server.crt -days 1095 # chmod 400 server.key # chmod 444 server.crt
部署到Nginx后,浏览器弹出「您的连接不是私密连接」的安全警告,Nginx核心配置片段如下:
server { server_name www.example.com; listen 443 ssl; listen [::]:443 ssl; ssl_certificate /path/server.crt; ssl_certificate_key /path/server.key; ... }
原因分析
- 自签证书无权威CA背书:浏览器默认只信任由全球公认的根证书颁发机构(CA)签发的证书,你生成的自签证书未经过这类机构认证,因此被判定为不安全连接。
- 证书域名不匹配(潜在因素):如果生成证书时填写的
Common Name(CN)与www.example.com不一致,或者未添加该域名作为Subject Alternative Name(SAN),也会触发域名不匹配的警告。
解决方法
方案一:本地信任自签证书(仅适用于测试/开发环境)
操作步骤:
- 从服务器将
server.crt证书文件复制到本地机器。 - 根据操作系统添加到信任列表:
- Linux:
sudo cp server.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates - Windows:双击证书文件,点击「安装证书」→选择「本地计算机」→「将所有证书放入下列存储」→选择「受信任的根证书颁发机构」完成安装。
- macOS:双击证书文件,在钥匙串访问中找到该证书,右键「显示简介」→「信任」选项卡设置「使用此证书时」为「始终信任」。
- 浏览器单独配置:部分浏览器(如Chrome)可在安全设置中手动导入证书并标记为受信任。
- Linux:
方案二:使用权威CA签发的免费证书(适用于生产环境)
推荐使用Let's Encrypt提供的免费可信证书,通过certbot工具一键部署:
操作步骤:
- 安装certbot及Nginx插件(Arch Linux环境):
sudo pacman -S certbot certbot-nginx - 生成并自动部署证书:
该命令会自动修改Nginx配置、安装证书,并设置证书自动续期。sudo certbot --nginx -d www.example.com
额外优化:确保自签证书域名匹配
若坚持使用自签证书,重新生成时需明确指定域名信息,避免不匹配问题:
openssl req -new -x509 -nodes -newkey rsa:4096 -keyout server.key -out server.crt -days 1095 \ -subj "/CN=www.example.com" \ -addext "subjectAltName=DNS:www.example.com,DNS:example.com"
这条命令直接设置CN为www.example.com,同时添加SAN字段包含主域名和裸域名,覆盖常见的域名匹配场景。
内容的提问来源于stack exchange,提问作者ConquestAce
相关产品推荐
相关产品推荐

