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

Swift 5中Alamofire实现SSL公钥固定方案求助(ServerTrustPolicyManager已弃用)

Swift 5 + Alamofire 实现SSL公钥固定方案

Alamofire 5+ 已弃用ServerTrustPolicyManager,改用ServerTrustManager配合PinPublicKeysEvaluator实现公钥固定,以下是具体集成步骤:

1. 准备公钥数据

先将服务器的公钥转为Data格式,通常从PEM格式字符串处理而来:

// 处理PEM格式公钥为Data
func publicKeyData(from pemString: String) -> Data? {
    let cleanedPEM = pemString.replacingOccurrences(of: "-----BEGIN PUBLIC KEY-----", with: "")
                              .replacingOccurrences(of: "-----END PUBLIC KEY-----", with: "")
                              .replacingOccurrences(of: "\n", with: "")
    return Data(base64Encoded: cleanedPEM)
}

// 替换为你的服务器公钥PEM字符串
guard let targetPublicKeyData = publicKeyData(from: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAO...\n-----END PUBLIC KEY-----") else {
    fatalError("无效的公钥格式")
}

2. 创建公钥固定评估器

使用PinPublicKeysEvaluator(Alamofire内置的公钥固定实现):

let publicKeyEvaluator = PinPublicKeysEvaluator(
    publicKeys: [targetPublicKeyData],
    validateCertificateChain: true,
    validateHost: true
)

参数说明:

  • publicKeys: 支持传入多个公钥Data,用于服务器公钥更新时的平滑过渡
  • validateCertificateChain: 开启证书链完整性验证,建议保持true
  • validateHost: 开启主机名验证,防止域名劫持,建议保持true

3. 配置Alamofire Session

将评估器绑定到指定域名,创建自定义Session:

let serverTrustManager = ServerTrustManager(evaluators: [
    "your-api-domain.com": publicKeyEvaluator
])

// 自定义Session,后续所有请求通过该Session发起
let secureSession = Session(serverTrustManager: serverTrustManager)

4. 发起验证请求

使用配置好的secureSession发起网络请求,自动触发公钥固定验证:

secureSession.request("https://your-api-domain.com/api/data").responseJSON { response in
    // 处理响应
}

可选:全局Session配置

如果希望所有默认AF.request()都应用验证规则,可替换Alamofire的全局Session:

AF.session = secureSession

注意事项

  • 公钥更新:服务器更换公钥前,需提前在App中添加新公钥,避免请求失败
  • 开发调试:仅在开发环境可临时使用DisabledEvaluator跳过验证,上线必须移除
  • 安全建议:不要关闭validateCertificateChain和validateHost,否则会降低安全等级

内容的提问来源于stack exchange,提问作者Bhimashankar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 06:27:25