我知道这类问题已被多次询问,但似乎有答案,但我无法让它发挥作用。
在我的环境中,生产是我拥有有效SSL证书的唯一地方。在我的iOS应用程序中使用Alamofire构建反对生产很好。我不想开发/测试生产,我们现在无法获得任何其他环境的有效SSL证书。
我发现this来自Alamofire开发人员的答案提出了解决此问题的方法,但这对我不起作用。当我针对非生产运行我的应用程序时,我看到的失败暗示它正在使用NSURLConnection而不是NSURLSession,因为建议的解决方案似乎依赖。
NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)
如果有人可以分享他们的解决方案(也许是一个要点?),那会不会喜欢它。
答案 0 :(得分:1)
我终于明白了。我引用的SO答案中有一个小而重要的错误。我为它提交了一个编辑,但是会在这里发布工作代码:
"http://www.oracle.com/biee/bi-domain"
问题在于它没有使用let manager = Alamofire.Manager.sharedInstance
manager.delegate.sessionDidReceiveChallenge = { session, challenge in
var disposition: NSURLSessionAuthChallengeDisposition = .PerformDefaultHandling
var credential: NSURLCredential?
if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
disposition = NSURLSessionAuthChallengeDisposition.UseCredential
credential = NSURLCredential(forTrust: challenge.protectionSpace.serverTrust)
} else {
if challenge.previousFailureCount > 0 {
disposition = .CancelAuthenticationChallenge
} else {
credential = manager.session.configuration.URLCredentialStorage?.defaultCredentialForProtectionSpace(challenge.protectionSpace)
if credential != nil {
disposition = .UseCredential
}
}
}
return (disposition, credential)
}
的单例实例。相反,它正在创建一个从未被Alamofire框架使用的全新实例。