我刚刚将代码更新为Swift 2.0,以便与Xcode 7配合使用。我的应用程序执行NSURLAuthenticationMethodServerTrust
和NSURLAuthenticationMethodClientCertificate
身份验证。
问题是NSURLAuthenticationMethodServerTrust
身份验证在我的模拟器上停止工作-但在我的iOS 8.3测试设备上仍然工作。除了我的旧项目,这不是Swift 2.0,也仍然工作。
错误:NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
从NSURLSession检索到错误:
Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo=0x7fcf75053070 {NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0x7fcf73700d00>, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorCodeKey=-9802, NSUnderlyingError=0x7fcf735284b0 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1200.)", NSLocalizedDescription=An SSL error has occurred and a secure connection to the server cannot be made., NSErrorFailingURLKey=https://mywebapi/dosomething, NSErrorFailingURLStringKey=https://mywebapi/dosomething, _kCFStreamErrorDomainKey=3} [GetOneTimeTokenController.swift:76]
我仍在部署iOS 8.0。
以下是我处理身份验证质询的方式(使用自签名证书):
if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodClientCertificate {
let urlCredential:NSURLCredential = NSURLCredential(
identity: identityAndTrust.identityRef,
certificates: identityAndTrust.certArray as [AnyObject],
persistence: NSURLCredentialPersistence.ForSession);
completionHandler(NSURLSessionAuthChallengeDisposition.UseCredential, urlCredential);
} else if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
completionHandler(NSURLSessionAuthChallengeDisposition.UseCredential, NSURLCredential(trust: challenge.protectionSpace.serverTrust!));
} else {
challenge.sender?.continueWithoutCredentialForAuthenticationChallenge(challenge)
Logger.sharedInstance.logMessage("Unexpected Authentication Challange", .Error);
}
3条答案
按热度按时间vmpqdwk31#
那么你的模拟器很可能运行的是iOS 9。在iOS 9中,TLS 1.2是强制执行的。如果你不使用它,你的请求将失败。
请查看this post以了解更多信息。
您可以将以下代码放在
Info.plist
中绕过它:但它只是一个临时解决办法,直到您可以实现TLS1.2。
cczfrluj2#
你没有绕过TLS层。请找到下面的答案,它对我使用自签名证书有效。
以下是与自签名SSL证书配合使用的代码更改
在info.plist文件中完成的更改
eh57zj3b3#
我有同样的问题与iOS9和xcode 7只是补充:
到plist文件。它正在工作,但在您可以实现TLS 1.2之前,它是一个临时的解决方案。