Mac OS应用遇TIC SSL信任错误:后端迁服务器后API连接失败
解决Mac OS应用服务器迁移后API连接SSL信任错误(-9802)
嘿,这个问题我之前帮团队排查过好几次——你看到的Strict Trust Evaluation yielded status(-9802)和TIC SSL Trust Error本质就是Mac系统/应用不信任新服务器的SSL证书,毕竟刚迁完服务器,大概率是新机器的证书配置出了问题。给你一步步来的解决方案:
第一步:先确认服务器端证书是否合法
首先得排除是服务器的问题,用Mac终端跑这个命令检查证书链:
openssl s_client -connect your-api-domain:443
看完输出重点看这几个地方:
- 有没有出现
Verify return code: 0 (ok),如果是其他数字比如20(unable to get local issuer certificate)就是证书链不全 - 检查
Subject:里的域名是否和你的API域名完全匹配(包括www/非www的区别) - 也可以直接用Safari访问API的基础地址,看地址栏的锁图标,点进去查看证书详情,有没有弹出“证书不受信任”的提示
第二步:如果是内部/自签证书,手动信任
如果你们用的是自签证书或者公司内部CA签发的证书,需要让Mac系统信任它:
- 把证书文件(.crt/.pem格式)拖到「钥匙串访问」应用里,选择「系统」钥匙串(不是登录)
- 找到导入的证书,右键>「显示简介」
- 切换到「信任」标签,把「使用此证书时」下的「SSL」选项改成「始终信任」
- 输入Mac密码确认,然后重启你的应用
注意:Mac Catalina及以上版本,第一次导入自签证书后,还要去「系统偏好设置>安全性与隐私>通用」里点击「允许」该证书(底部会有提示)
第三步:代码层面临时调试(仅限测试环境!)
如果只是想临时验证API功能,不想折腾证书,可以在NSURLSession的代理方法里临时跳过SSL验证(绝对不要放到生产环境):
func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { let credential = URLCredential(trust: challenge.protectionSpace.serverTrust!) completionHandler(.useCredential, credential) return } completionHandler(.performDefaultHandling, nil) }
第四步:生产环境的正确姿势
如果是上线用的应用,绝对不能用第三步的方法,必须保证服务器证书是正规CA签发的(比如Let's Encrypt免费证书、Digicert等付费证书),并且证书链配置完整,域名完全匹配——这样Mac系统会自动信任,不需要任何额外配置。
内容的提问来源于stack exchange,提问作者Rutger Huijsmans
相关产品推荐
相关产品推荐

