let url = "https://www.mycompany.com"var manager: SessionManager? { let serverTrustPolicy = ServerTrustPolicy.pinCertificates( certificates: ServerTrustPolicy.certificates(),valIDateCertificateChain: true,valIDateHost: true ) let serverTrustPolicIEs: [String: ServerTrustPolicy] = [ url: serverTrustPolicy ] let config = URLSessionConfiguration.default return SessionManager(configuration: config,serverTrustPolicyManager: ServerTrustPolicyManager(policIEs: serverTrustPolicIEs))}
现在当我想要发出API请求时,我有这个方法:
func request(routerRequest request: URLRequestConvertible) -> DataRequest { assert(url != "","A base URL string must be set in order to make request") print("URL: \(url) : \(request)") return (manager ?? SessionManager.default).request(request)}
现在我遇到的问题是,当我使用类似查尔斯代理的东西时,这仍然有用……所有请求仍在进行中.证书钉扎不应该阻止像Charles Proxy这样的东西能够工作,因为证书不匹配吗?
我已经测试了其他正确使用证书固定的应用程序,它们会阻止任何类型的代理(Charles或其他)建立连接.如果我在启用Charles时尝试运行像Uber或我的Wells Fargo银行应用程序的应用程序,每个请求都会被拒绝,我会看到一个错误,上面写着“无法完成请求,ssl证书无效”(这是不是逐字的).
在配置SessionManager之后,我觉得有一个步骤我不知道了.我阅读并帮助我遇到的大多数文档似乎暗示在配置管理器以启用证书固定后,它应该拒绝任何带有无效证书的请求.谁能帮我?我错过了什么?
我感谢任何和所有的帮助.提前致谢!
解决方法 我将回答我自己的问题,只是因为我希望将来有可能帮助其他人解决同样的问题.当我在上面配置serverTrustPolicIEs时,您创建了一个String:ServerTrustPolicy的字典,我的错误位于服务器名称的字符串中.let serverTrustPolicIEs: [String: ServerTrustPolicy] = [ url: serverTrustPolicy]
我的url属性是我们用于API的baseURL,它是https://www.mycompany.com/API – 这引起了我的所有问题.一旦我调整到只是域名www.mycompany.com,钉扎就像预期的那样工作!现在,当我启用了启用固定的Charles Proxy时,我拒绝了所有请求,并且Charles发出错误消息“没有请求,可能是SSL证书被拒绝了”.
我没有进行任何严格的字符串 *** 作,而是将此扩展添加到将来使用 – 如果您有多个baseURL,则需要从中提取域名:
extension String { public func getDomain() -> String? { guard let url = URL(string: self) else { return nil } return url.host }}
现在你可以这样做:
let serverTrustPolicIEs: [String: ServerTrustPolicy] = [ url.getDomain() ?? url : serverTrustPolicy]
希望这有助于将来的其他人!祝好运
总结以上是内存溢出为你收集整理的ios – Alamofire ServerTrustPolicy证书固定不阻止Charles Proxy Swift 3全部内容,希望文章能够帮你解决ios – Alamofire ServerTrustPolicy证书固定不阻止Charles Proxy Swift 3所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)