Ionic Angular应用iOS端SSL Pinning配置Xcode报错求助
Ionic Angular iOS端SSL Pinning -9813错误解决思路
Xcode抛出的-9813错误对应iOS系统的NSURLErrorServerCertificateUntrusted,说明SSL证书校验未通过,由于iOS和Android的证书校验逻辑、资源读取规则存在差异,安卓正常不代表iOS配置正确,可按照以下步骤排查:
- 排查证书格式与资源配置
iOS要求固定的证书为PEM格式,且需上传完整证书链(叶子证书+中级CA证书+根CA证书),不可仅上传叶子证书。同时需确认在config.xml的ios平台配置段添加了证书资源复制规则,确保证书被正确打包进iOS应用的资源目录,示例配置:
注意iOS文件系统大小写敏感,配置的证书文件名、后缀需和实际文件完全一致。<platform name="ios"> <resource-file src="你本地证书路径/xxx.pem" target="xxx.pem" /> </platform> - 排查插件调用参数
调用SSL Pinning配置方法时,模式参数需明确设置为pinned,不可复用Android端的特殊配置参数。同时确认传入的证书文件名和资源目录中的文件名完全匹配,不要漏写后缀。 - 排查ATS配置冲突
检查Xcode项目info.plist中的ATS配置,不要为需要做SSL Pinning的域名添加NSExceptionAllowsInsecureHTTPLoads例外,也不要开启全局NSAllowsArbitraryLoads配置,该配置会跳过部分系统校验逻辑,导致插件的Pinning规则失效。 - 排查插件版本兼容性
低于3.0.0版本的cordova-plugin-advanced-http存在iOS端Pinning实现缺陷,搭配Cordova iOS 6+、Ionic 6+以上版本时会出现校验失败问题,建议将插件升级到最新稳定版,升级后重新移除并添加iOS平台,避免旧版本缓存影响。 - 排查请求环境匹配问题
测试时关闭Charles、Fiddler等抓包代理,这类工具会替换请求的SSL证书,导致Pinning校验失败。同时确认请求使用的域名和证书绑定的域名完全匹配,若使用IP请求,需确保证书SAN字段包含对应IP,否则会触发校验失败。
内容的提问来源于stack exchange,提问作者Razman Sarit
相关产品推荐
相关产品推荐

