浏览器
MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT:Firefox 自签名证书报错
MOZILLA_PKIX_ERROR_SELF_SIGNED_CERTMOZILLA_PKIX_ERROR_SELF_SIGNED_CERT 的意思是:网站出示的证书是它自己给自己签的,没有任何证书颁发机构为它担保。 家里路由器、自己搭的测试服务器出现这个很正常;公开网站出现,就说明服务器配置错了,或者有别人在冒充它应答。
先判断是网站的问题还是你电脑的问题
从外部也能看到自签名证书,就是服务器这么配的;外部看到正常证书,就是你所在的网络在拦截。用 SSL 检测 测一下:
curl ssl.sh/example.com
- 检测也看到自签名证书:服务器就是这么配的。你是管理者就换证书;不是的话,不要在上面输入任何信息。
- 检测看到的是正常 CA 签发的证书:你所在的网络在拦截连接。公共 Wi-Fi 认证页、部分代理和恶意软件都会出示自签名证书。切到手机流量对比一下。
原因
4 种原因里,前 3 种是服务器出示了设备或系统自带的自签名证书,第 4 种是网络拦截。
1. 设备自带的默认证书
路由器、NAS(群晖、威联通等)、服务器管理口、打印机第一次开机都会生成自签名证书。用 IP 或 .local 名访问时,本来也用不了公开证书。
2. Web 服务器的默认占位证书
有些 Linux 发行版会装一个占位证书(比如 Debian 的 ssl-cert-snakeoil)。虚拟主机指向了它,或者真证书加载失败,访客拿到的就是这张占位证书。
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -subject -issuer -fingerprint -sha256
subject 和 issuer 完全一样,就是自签名。
3. 共享服务器上 SNI 没匹配上
请求的域名没有对应的 server 块,默认站点可能用的是自签名证书。宝塔面板上新建站点没开 SSL 时,访问它的 HTTPS 地址也可能拿到别的站或默认的证书。
4. 被拦截
公共 Wi-Fi 认证页、替 HTTPS 应答的代理可能用自签名证书。见 公共 Wi-Fi 认证页报错。
在各浏览器/系统上的样子
这个代码只出现在 Firefox,Chrome、Edge 等浏览器把同样的问题报成 NET::ERR_CERT_AUTHORITY_INVALID。
| 浏览器 | 显示内容 |
|---|---|
| Firefox | “警告:面临潜在的安全风险”,说明证书因自签名而不受信任 |
| Chrome / Edge / 360 / QQ 浏览器 | NET::ERR_CERT_AUTHORITY_INVALID |
| Safari | “此连接非私人连接” |
| curl | SSL certificate problem: self-signed certificate |
站长怎么修
对外网站换成公开 CA 签发的免费证书,内部系统改用内部 CA 签发。
1. 对外的网站一律用公开证书。
sudo certbot --nginx -d example.com -d www.example.com
宝塔面板可在“网站 → 设置 → SSL → Let's Encrypt”里一键申请;也可以用阿里云、腾讯云的免费证书。
2. 配置指向正式的证书文件,而不是占位证书:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
3. 内部系统用内部 CA 签发证书,通过终端管理软件统一下发根证书。临时实验用的话,自签名证书生成器 能生成带正确 SAN 的证书。
4. 确认结果。 用 curl ssl.sh/example.com 看颁发者是否已经变成公开 CA。
常见问题
家里路由器后台的自签名证书可以接受吗?
可以,前提是你在自己家的网络里、地址是你自己输入的。最好第一次接受前,把证书指纹和路由器设置页里显示的对一下。公开网站的自签名证书不要接受。
公司内部服务器怎么才能不弹警告?
建一个小型内部 CA,用它给服务器签证书,再把 CA 根证书装到需要访问的设备上;服务器有公网域名的话,直接用公开证书更省事。让每个人自己加例外既管不过来,也会让大家养成乱点“继续”的习惯。
一个大网站突然显示自签名证书,是怎么回事?
你和网站之间有别的东西在替网站服务器应答,比如公共 Wi-Fi 认证页、配置错的代理,或者恶意软件。不要继续访问,换个网络对比一下。
家里内网的设备能用上公开证书吗?
有自己的域名就可以。把 nas.example.com 这样的名字解析到设备的内网地址,再用 DNS-01 验证申请证书,这种方式不要求设备能从公网访问。群晖等 NAS 系统可以自动续期这类证书,全家人访问都不会再看到自签名警告。