开发SDK中,用到了ios请求https接口的问题,开始在度娘那里搜了一个,上面介绍叫做忽略证书认证,然后就是一坨一坨的码段子,菊花+C后,OK!跑通了!

本以为一知半解可以糊弄过去,后来后台处理发现问题,当被后台问起我的处理操作时才发现,这部分我并没有处理清晰,认识上存在藏有隐患,不能保证代码的可靠性。。

So又重新的找度娘,结果发现,千篇一律的复制,全部都叫做忽略证书。。绕过证书。。这么解释并不能令人信服!最后都是按照自己的理解,换一个同义词而已,疯了疯了。。

当然,如果只是为了完成功能,那这么做可以,代码我就不往上放了。而我觉得如果一个新认知的东西只是知道会用,那只是技术员级别干的事。更加深入的了解,才能让我用的更踏实,这才是体面的工程师。

问过安卓的工程师,他们的处理是信任一切证书,我按照这个思路开始疯狂的在谷哥,病(必应)等了解,最终还是哥更了解我,在stackoverflow上面有所提到,信任任何证书,达到通过验证的目的。
由于我并不是在webview上面做展示,只是NSURLConnection去请求数据,所以不存在与webview对接的技术烦恼,好了,下面是网上基本都可以找到的代码:

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace 

 { 

 return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]; 

 } 


 - (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 

 { 

 if ([challenge previousFailureCount] ==0){ 

 NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; 

 [challenge.sender useCredential:credential forAuthenticationChallenge:challenge]; 

 }else{ 

 [[challenge sender]cancelAuthenticationChallenge:challenge]; 

 }


}
具体的执行顺序可以打断点自行了解,方法在官方说明也介绍的很详细,我就不多说了。。
以上代码只针对非第三方认证请求(自做的证书)的,可以完全信任,如果是第三方的,那就需要写一段证书的验证处理了,代码可以去下面的博客里面看。