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

时间:2016-11-09 20:12:58

标签: swift api ssl swift3 alamofire

我在Swift 3中使用Alamofire 4构建一个应用程序,将PUT数据转换为MDM服务器的API,以进行大规模更新。

有些用户为其本地托管服务器使用内置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填充的变量的方法因为他们正在填补空缺。

编辑:我还在网址中尝试了某种通配符,我似乎无法获得任何通配符或全局限额。

1 个答案:

答案 0 :(得分:0)

尝试serverTrustPolicies var并使用viewDidLoad等方法对其进行初始化。 我认为当您尝试访问它时,您的问题serverTrustPolicies尚不可用。