手机和操作系统
“此证书不受信任”:macOS 钥匙串里怎么处理
此证书不受信任“此证书不受信任”的意思是:macOS 无法把这张证书连到它信任的根证书,或者某个信任设置明确禁止了它。 你会在钥匙串访问、从 Safari 或“邮件”打开的证书详情里看到它,间接表现就是 Safari 的“此连接非私人连接”。怎么修取决于这张证书属于公开网站、你们公司,还是你自己的开发环境。
先判断是网站的问题还是你设备的问题
公开网站检测出证书链有问题,就是网站要修;检测正常,问题在这台 Mac 的拦截软件或信任设置。公开网站先用 SSL 检测 查:
curl ssl.sh/example.com
- 检测提示证书链有问题:网站要修,不要在你的 Mac 上改信任设置。
- 检测正常:对比 Mac 上看到的证书和检测结果。颁发者不同,说明被拦截了(杀毒软件、代理或描述文件);证书相同,说明本地某个信任设置不对。
在 Mac 上可以用苹果自带的工具测试:
security verify-cert -c server.pem -p ssl -s example.com
原因
Mac 上最常见的原因是内部服务器和开发工具用了自签名或私有 CA 证书。
1. 自签名或私有 CA 证书
内部服务器和开发工具用的证书,根证书不在“系统根证书”钥匙串里。这是正常的:有意识地安装 CA 根证书,或者换成公开证书。
2. 缺中间证书
服务器只发了站点证书;macOS 通常会自己下载中间证书,但 AIA 地址访问不了时就不行。国内访问部分境外 CA 的 AIA 地址不稳定时容易出现。用 证书链工具 修好服务器的证书链。
3. 信任设置被改过
在钥匙串访问里被设成“永不信任”的根证书或中间证书,或者被描述文件限制,会覆盖系统默认值。
4. 证书不符合苹果的 TLS 规则
用于 TLS 时,macOS 要求证书有 SAN、RSA 密钥至少 2048 位、SHA-2 签名、EKU 含 serverAuth,并且有效期受限(2019 年 7 月 1 日后签发的证书不超过 825 天,2020 年 9 月 1 日后签发的公开证书不超过 398 天)。自己做的证书经常漏掉其中一条。
5. 拦截类软件
会检查 HTTPS 的安全工具把根证书装在“系统”钥匙串里。安装失败或被删掉后,被拦截的网站就显示为不受信任。
在各浏览器/系统上的样子
| 位置 | 显示内容 |
|---|---|
| 钥匙串访问 | 红色图标,“此证书不受信任”或“此根证书不受信任” |
| Safari | “此连接非私人连接” |
| 邮件 | 提示无法验证服务器身份 |
| Mac 上的 Chrome | NET::ERR_CERT_AUTHORITY_INVALID |
站长怎么修
修法取决于证书归属:公开网站修证书链,公司或开发用 CA 只信任根证书,不合规的证书重新签发。
1. 公开网站:使用公开 CA 的证书并发送完整证书链,用 curl ssl.sh/example.com 确认。
2. 公司或开发用 CA:信任根证书,而不是一张张服务器证书。在终端里:
sudo security add-trusted-cert -d -r trustRoot \
-k /Library/Keychains/System.keychain company-root.crt
或者在钥匙串访问里双击根证书,展开“信任”,把“使用此证书时”设为“始终信任”。电脑多的话,用 MDM 描述文件统一下发。
3. 不合规的证书重新签发,满足苹果的要求,部署前用 证书解析 检查一遍。
常见问题
能把网站证书设成“始终信任”吗?
不是你管的网站就不要。这样做等于让 Mac 接受这张证书,哪怕它是冒充者的。“始终信任”只用于从可靠来源获得的、你自己的开发 CA 或公司 CA 根证书。
钥匙串里信任了根证书,Chrome 为什么还警告?
macOS 上的 Chrome 会采用系统钥匙串或登录钥匙串里信任的根证书,但要重启浏览器才生效。Firefox 用自己的证书库,除非开启了企业根证书。另外要确认证书符合苹果的规则,Safari 会严格检查。
系统自带的根证书显示不受信任,怎么回事?
可能有人手动改了它的信任设置,或者描述文件限制了它。在钥匙串访问里打开“系统根证书”,双击这张根证书,把“使用此证书时”改回“使用系统默认”。