in httpdns_ios_demo/httpdns_ios_demo/Example/AlamofireExamples/AlamofireHttpsScenario.swift [117:143]
func evaluate(serverTrust: SecTrust? , host: String? ) -> Bool {
if serverTrust == nil {
return false
}
// 创建证书校验策略
var policies = [SecPolicy]()
if host != nil {
policies.append(SecPolicyCreateSSL(true, host! as CFString))
} else {
policies.append(SecPolicyCreateBasicX509())
}
// 绑定校验策略到服务端的证书上
SecTrustSetPolicies(serverTrust!, policies as CFTypeRef)
// 评估当前serverTrust是否可信任
var result: SecTrustResultType = .invalid
if SecTrustEvaluate(serverTrust!, &result) == errSecSuccess {
// 官方建议在result = .unspecified 或 .proceed的情况下serverTrust可以被验证通过
// 详情请参考Apple官方文档
return result == .unspecified || result == .proceed
} else {
// 处理失败的情况
return false
}
}