手机和操作系统

“此证书不受信任”: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 会严格检查。

系统自带的根证书显示不受信任,怎么回事?

可能有人手动改了它的信任设置,或者描述文件限制了它。在钥匙串访问里打开“系统根证书”,双击这张根证书,把“使用此证书时”改回“使用系统默认”。

资料来源

  1. Apple:钥匙串访问使用手册
  2. Apple:iOS 13 和 macOS 10.15 中的受信任证书要求
  3. Apple:关于受信任证书即将实施的限制