【发布时间】: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 中尝试了某种通配符,但我似乎无法让任何类型的通配符或全局允许工作。
【问题讨论】:
标签: swift api ssl swift3 alamofire