在 Alamofire 4 中动态允许自签名证书

Posted

技术标签:

【中文标题】在 Alamofire 4 中动态允许自签名证书【英文标题】:Allowing self-signed certs dynamically in Alamofire 4 【发布时间】:2016-11-09 20:12:58 【问题描述】:

我在 Swift 3 中使用 Alamofire 4 来构建一个应用程序,以将数据放入 API 以供 MDM 服务器进行大规模更新。

一些用户为其本地托管服务器使用内置 CA 或自签名 SSL 证书,如果该证书未下载并安装到钥匙串中,Alamofire 将不允许通信。

我找到了自述文件的安全部分,并在其中编写了以下代码:

    private static var Manager: Alamofire.SessionManager = 

    // Create the server trust policies
    let serverTrustPolicies: [String: ServerTrustPolicy] = [
        "my.on-prem-server.com": .disableEvaluation            
    ]

    // Create custom manager
    let configuration = URLSessionConfiguration.default
    configuration.httpAdditionalHeaders = Alamofire.SessionManager.defaultHTTPHeaders
    let manager = Alamofire.SessionManager(
        configuration: URLSessionConfiguration.default,
        serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
    )

    return manager
()

问题是我不是唯一一个使用它的人,而且我无法在其中静态设置每个人的服务器信息。不是每个人的服务器都会是“my.on-prem-server.com”

我有一个名为“allowUntrustedURL”的字符串变量,它是从viewWillAppear() 上的委托填充的(他们在不同的视图中输入他们的服务器信息),但是当我尝试时

let serverTrustPolicies: [String: ServerTrustPolicy] = [
        allowUntrustedURL: .disableEvaluation            
    ]

我收到以下错误:Instance member 'allowUntrustedURL' cannot be used on type 'myViewController'

所以我想我对选择持开放态度。我考虑过要求人们下载他们的 SSL 证书并将其安装到钥匙串中——但我认为如果可能的话,我宁愿有一个复选框来禁用该要求。

我可以选择全局禁用 Alamofire 的受信任 SSL 要求的方法(最好在选中一个框或允许不受信任的内容之后),或者传入一个变量的方法,我可以用他们的 URL 填充它们填东西。

编辑:我还在 URL 中尝试了某种通配符,但我似乎无法让任何类型的通配符或全局允许工作。

【问题讨论】:

【参考方案1】:

尝试将serverTrustPolicies 设为var 并用viewDidLoad 之类的方法对其进行初始化。 我认为您的问题是 serverTrustPolicies 在您尝试访问时尚不可用。

【讨论】:

我实际上在全局范围内定义了它,并已将其填充到 viewDidLoad 上,因此它应该可用,并且其中应该有数据。我认为这更多地是数据类型/属性与值等的问题。我只是对不同的数据类型还不够了解,还没有把我的手指放在上面。这是我的第一个 swift 项目。编辑:我读错了,虽然我们在谈论服务器变量。让我试一试。 不幸的是,没有。我想我可能只是切换回 HTTP 请求的内置方法。 Alamofire 太棒了,但我不需要它所能做的绝大多数事情,这让我头疼了一段时间。不过,我感谢您的帮助。 @MikeLevenick this question 可能会帮助你 感谢您的所有帮助。我最终只是返回并构建自己的 URLSessions 而不是使用 AlamoFire。这是一个很棒的工具,但我不需要它的 90%,而且不受信任的证书是一个很大的障碍。

以上是关于在 Alamofire 4 中动态允许自签名证书的主要内容,如果未能解决你的问题,请参考以下文章

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

Alamofire 测试包括自签名证书?

Alamofire + kingfisher Https 自签名证书

如何允许用户在 iOS 中使用 AFNetworking 信任和固定自签名 SSL 证书

允许 HTTPS 包装器的自签名证书

无效签名,自签名证书?