我在NSURLProtocol中使用NSURLSession来捕获一些流量并通过UIWebView的代理引导它.当我浏览具有无效证书的HTTPS站点时,UIWebView失败并显示:
错误域= NSURLErrorDomain代码= -1202"此服务器的证书无效.您可能正在连接到假装为"revoked.grc.com"的服务器,这可能会使您的机密信息面临风险." UserInfo = {NSURLErrorFailingURLPeerTrustErrorKey =,NSLocalizedRecoverySuggestion =您是否还要连接到服务器?,NSErrorFailingURLKey =,NSErrorFailingURLStringKey =,NSErrorPeerCertificateChainKey =("",""),NSErrorClientCertificateStateKey = 0,NSLocalizedDescription =此服务器的证书无效.您可能正在连接到假装为"revoked.grc.com"的服务器,这可能会使您的机密信息面临风险.,_ kCFStreamErrorDomainKey = 3,NSUnderlyingError = 0x170255420 {Error Domain = kCFErrorDomainCFNetwork Code = -1202"(null)"的UserInfo = {_ kCFStreamPropertySSLClientCertificateState = 0,kCFStreamPropertySSLPeerTrust =,_kCFNetworkCFStreamSSLErrorOriginalValue = -9807,_kCFStreamErrorDomainKey = 3,_kCFStreamErrorCodeKey = -9807,kCFStreamPropertySSLPeerCertificates =( "", "")}},_kCFStreamErrorCodeKey = -9807}
在iOS 9及更低版本中,但在iOS 10中,它会出现以下错误:
错误域= kCFErrorDomainCFNetwork代码= 310"与安全Web代理服务器(HTTPS)通信时出现问题." UserInfo = {NSErrorFailingURLStringKey =,NSErrorFailingURLKey =,_ kCFStreamErrorCodeKey = -2096,_kCFStreamErrorDomainKey = 4,NSLocalizedRecoverySuggestion =请检查您的代理设置.有关此问题的帮助,请与系统管理员联系.,NSLocalizedDescription =与安全Web代理服务器(HTTPS)通信时出现问题.}
所以在iOS 10中,我无法弄清楚通过代理的不受信任的网站的方式.如果我在NSURLProtocol(即NSURLSession)中浏览具有无代理的无效证书的站点,那么它在iOS 10中也能正常工作.
执行didReceiveChallenge委托方法.
AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
if([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]){
SecTrustRef trust = [[challenge protectionSpace] serverTrust]; …