如何使用 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 身份验证?

使用客户端证书与 Alamofire 进行身份验证

您如何使用 Alamofire 测试证书固定?

如何在 Alamofire 中实现自签名证书?

如何使用 Alamofire 访问具有无效证书的本地 Https?

针对多个 CA 的 Alamofire 5 自定义 SSL 验证