use*_*752 5 ssl proxy uiwebview nsurlsession ios10
我在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];
SecCertificateRef cert = SecTrustGetCertificateAtIndex(trust, 0);
if ([[appDelegate certStore] containsCertificate:cert]) {
completionHandler(NSURLSessionAuthChallengeUseCredential,[NSURLCredential credentialForTrust:trust]);
return;
}
}
completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
如果我使用 连接到该主机openssl s_client,将证书复制到文件中,然后openssl x509 -in cert.crt -text -noout在该文件上运行,我会看到以下内容:
Signature Algorithm: sha1WithRSAEncryption
Run Code Online (Sandbox Code Playgroud)
iOS 10 中已弃用对 SHA-1 证书的支持,并且需要应用程序传输安全例外。
这意味着两件事:
第二步非常重要。据我了解,2016 年之后,您将无法提交包含 SHA-1 ATS 例外的应用程序的新版本。
| 归档时间: |
|
| 查看次数: |
4972 次 |
| 最近记录: |