You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:40:03