如何使用 Alamofire 关闭证书验证?
Posted
技术标签:
【中文标题】如何使用 Alamofire 关闭证书验证?【英文标题】:How do I turn off validation for certificate with Alamofire? 【发布时间】:2020-12-22 08:39:20 【问题描述】:我只是像这样创建会话:
let configuration = URLSessionConfiguration.default
configuration.urlCache = nil
let session = Alamofire.Session(configuration: configuration)
当我创建请求时,我收到以下错误:
此服务器的证书无效。您可能正在连接到伪装成“my.serwer.pl”的服务器,这可能会使您的机密信息面临风险。
如何禁用它以不检查证书是否有效?
objective-c 和 AFNetworking 是这样的:
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
[securityPolicy setValidatesDomainName:NO];
[securityPolicy setAllowInvalidCertificates:YES];
manager.securityPolicy = securityPolicy;
【问题讨论】:
【参考方案1】:当我尝试使用 Alamofire 调用 API 时,我遇到了完全相同的错误,因此为了绕过这个错误,我在 SO 的一些答案的帮助下创建了一个会话。
private let session: Session =
let manager = ServerTrustManager(evaluators: ["yourDomainName": DisabledTrustEvaluator()])
let configuration = URLSessionConfiguration.af.default
return Session(configuration: configuration, serverTrustManager: manager)
()
我用session.request
代替了AF.request
。就是这样。
【讨论】:
【参考方案2】:禁用 IP 地址验证 - Alamofire
遗憾的是,无法禁用所有服务器的验证,但如果您想禁用某些服务器的验证,则需要使用服务器信任管理器创建 Alamofire 会话:
// Disabling verification for 0.0.0.0 (replace with your own server of course).
let manager = ServerTrustManager(evaluators: ["0.0.0.0": DisabledTrustEvaluator()])
// Creating the session.
let session = Session(serverTrustManager: manager)
然后您可以正常使用会话,并且请求应该会通过。 如果您正在使用多个不同的服务器,您可以像这样将它们添加到列表中:
let manager = ServerTrustManager(evaluators: [
"0.0.0.0": DisabledTrustEvaluator(),
"1.1.1.1" : DisabledTrustEvaluator()
])
几天前我刚遇到这个问题,所以我对它进行了大量研究,如果这仍然不适合您,我也许可以为您提供另一种解决方案以使其正常工作,所以请在 cmets 中询问。
【讨论】:
以上是关于如何使用 Alamofire 关闭证书验证?的主要内容,如果未能解决你的问题,请参考以下文章
在 authManger.Login wapper 函数中实现关闭以进行 Alamofire 身份验证?