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

Alamofire 5 针对多CA的自定义SSL证书验证实现问题咨询

Alamofire 5 单主机证书校验降级方案

Alamofire 5 开放了ServerTrustEvaluating协议,你可以通过自定义评估器实现多步校验逻辑,无需受默认提供的校验策略限制,具体实现方式如下:

1. 自定义信任评估器

实现遵循ServerTrustEvaluating协议的自定义类,内部先执行证书钉扎校验,校验失败时自动降级到常规SSL校验:

import Alamofire

class CustomPriorityTrustEvaluator: ServerTrustEvaluating {
    // 本地保存的钉扎证书
    private let pinnedCertificates: [SecCertificate]
    // 常规校验评估器,支持自研CA配置
    private let fallbackEvaluator: ServerTrustEvaluating
    
    init(pinnedCerts: [SecCertificate], additionalAnchors: [SecCertificate] = [], validateHost: Bool = true) {
        self.pinnedCertificates = pinnedCerts
        // 配置降级后的常规校验逻辑,自研CA根证书可传入additionalTrustAnchors参数
        self.fallbackEvaluator = DefaultTrustEvaluator(
            validateHost: validateHost,
            additionalTrustAnchors: additionalAnchors,
            performDefaultValidation: true
        )
    }
    
    func evaluate(_ trust: SecTrust, forHost host: String) throws {
        // 第一步:优先执行证书钉扎校验
        let pinEvaluator = PinnedCertificatesTrustEvaluator(
            certificates: pinnedCertificates,
            validateHost: validateHost
        )
        do {
            try pinEvaluator.evaluate(trust, forHost: host)
        } catch {
            // 钉扎校验失败,执行降级校验
            try fallbackEvaluator.evaluate(trust, forHost: host)
        }
    }
}

2. 绑定自定义评估器到指定主机

初始化ServerTrustManager时,为目标主机指定自定义的评估器即可:

// 加载本地钉扎证书和自研CA根证书
let pinnedCerts = Bundle.main.certificates(withSuffix: "cer")
let rootCACerts = Bundle.main.certificates(withSuffix: "root.cer")

// 配置评估器映射
let trustManager = ServerTrustManager(evaluators: [
    "your-custom-host.com": CustomPriorityTrustEvaluator(
        pinnedCerts: pinnedCerts,
        additionalAnchors: rootCACerts
    )
])

// 生成业务使用的Session实例
let afSession = Session(serverTrustManager: trustManager)

补充说明

  • 如果你需要的是公钥钉扎而非证书钉扎,把代码中的PinnedCertificatesTrustEvaluator替换为PublicKeysTrustEvaluator即可,逻辑无需调整
  • 如果不需要自研CA支持,不传additionalAnchors参数即可,降级后会走系统默认的SSL校验逻辑

内容的提问来源于stack exchange,提问作者Eric E.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:27:02