使用Alamofire连接自签名URL时遭遇SSL错误代码-1200求助
解决Alamofire自签名SSL证书禁用验证后仍报错-1200的问题
我之前调试项目时也碰到过一模一样的情况——明明配置了禁用自签名URL的SSL验证,结果还是弹出SSL错误代码-1200(NSURLErrorServerCertificateUntrusted)。后来排查出几个容易踩坑的点,你可以逐一排查:
1. 确保ServerTrustPolicy配置完全正确
你的代码看起来没写完,大概率是ServerTrustPolicy的设置有遗漏。要针对目标域名明确指定.disableEvaluation策略,并且要保证域名完全匹配(包括是否带www、端口号等)。完整的配置示例如下:
static let sessionManager: SessionManager = { let configuration = URLSessionConfiguration.default configuration.timeoutIntervalForRequest = NetworkConfiguration.sessionTimeoutInterval configuration.httpAdditionalHeaders = [ "Accept": "application/json", "Content-Type": "application/json" ] // 针对你的自签名域名配置禁用验证策略 let serverTrustPolicies: [String: ServerTrustPolicy] = [ "your-self-signed-domain.com": .disableEvaluation // 如果是泛域名证书,可以用 "*.your-domain.com" ] // 必须把策略传入ServerTrustPolicyManager再初始化SessionManager let sessionManager = SessionManager( configuration: configuration, serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies) ) return sessionManager }()
2. 检查iOS ATS(App Transport Security)配置
即使Alamofire跳过了SSL验证,iOS系统级的ATS可能依然会拦截请求。你需要在Info.plist中添加针对目标域名的ATS例外配置:
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>your-self-signed-domain.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.2</string> </dict> </dict> </dict>
注意:尽量避免直接设置
NSAllowsArbitraryLoads = true(全局禁用ATS),这在App Store审核时可能会被拒,精准配置例外域名更稳妥。
3. 确认Alamofire版本兼容性
如果你的项目用的是Alamofire 5及以上版本,API已经发生了变化——原来的SessionManager被替换成了Session,ServerTrustPolicy也改成了TrustEvaluator。对应的配置示例如下:
static let session: Session = { let configuration = URLSessionConfiguration.default configuration.timeoutIntervalForRequest = NetworkConfiguration.sessionTimeoutInterval configuration.httpAdditionalHeaders = HTTPHeaders.default.dictionary let serverTrustManager = ServerTrustManager(evaluators: [ "your-self-signed-domain.com": DisabledTrustEvaluator() ]) let session = Session( configuration: configuration, serverTrustManager: serverTrustManager ) return session }()
4. 排查证书本身的问题
虽然已经禁用了验证,但如果自签名证书存在严重问题(比如过期、域名完全不匹配、证书链断裂),也可能触发这个错误。可以先把证书导入到测试设备的信任列表中,测试是否能正常连接,以此排除证书本身的问题。
按照上面的步骤排查下来,基本就能解决SSL错误-1200的问题了。
内容的提问来源于stack exchange,提问作者Rashmi Ranjan mallick
相关产品推荐
相关产品推荐

