在 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 + kingfisher Https 自签名证书