如何使用iOS 7的NSURLSession接受自签名SSL证书

发布时间:2019-07-11 发布网站:脚本之家
脚本之家收集整理的这篇文章主要介绍了如何使用iOS 7的NSURLSession接受自签名SSL证书脚本之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下代码( swift实现):
func connection(connection: NSURLConnection,canAuthenticateAgainstProtectionSpace protectionSpace: NSURLProtectionSpace) -> Bool
{
    return protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust
}

func connection(connection: NSURLConnection,didReceiveAuthenticationChallenge challenge: NSURLAuthenticationChallenge)
{
    if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust
    {

        if challenge.protectionSpace.host == "myDomain"
        {
            let credentials = NSURLCredential(forTrust: challenge.protectionSpace.serverTrust)
            challenge.sender.useCredential(credentials,forAuthenticationChallenge: challenge)
        }
    }

    challenge.sender.continueWithoutCredentialForAuthenticationChallenge(challenge)

}

它在iOS 8.x中完美地工作,但不工作iOS 7.x
在iOS 7.x我有错误:

NSURLConnection / CFURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9813)

任何想法?
谢谢!!!

解决方法

两个连接:canAuthenticateAgainstProtectionSpace:和连接:didReceiveAuthenticationChallenge:在iOS 8中已被弃用,所以你应该使用其他方法.

我在项目中使用的是NSURLSessionDelegate的委托方法.坚持那个协议,然后添加这个方法:

func URLSession(session: NSURLSession,didReceiveChallenge challenge: NSURLAuthenticationChallenge,completionHandler: (NSURLSessionAuthChallengeDisposition,NSURLCredential!) -> Void) {
    completionHandler(NSURLSessionAuthChallengeDisposition.UseCredential,NSURLCredential(forTrust: challenge.protectionSpace.serverTrust))
}

然后,当您使用委派设置为self时,初始化NSURLSession.例如:

var session = NSURLSession(configuration: configuration,delegate: self,delegateQueue:NSOperationQueue.mainQueue())

然后使用该会话实例调用dataTaskWithRequest方法:

var task = session.dataTaskWithRequest(request){
    (data: NSData!,response: NSURLResponse!,error: NSError!) -> Void in
    if error != nil {
        callback("",error.localizedDescription)
    } else {
        var result = NSString(data: data,encoding:
            NSASCIIStringEncoding)!
    }
}
task.resume()

完整的工作实例可以找到here.

出于安全考虑,如果您使用自签名证书,我建议同时执行公钥固定(https://gist.github.com/edwardmp/df8517aa9f1752e73353)

总结

以上是脚本之家为你收集整理的如何使用iOS 7的NSURLSession接受自签名SSL证书全部内容,希望文章能够帮你解决如何使用iOS 7的NSURLSession接受自签名SSL证书所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:76874919,请注明来意。

脚本之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ” ,选择关注!
精选程序员所需精品干货内容!

标签: