ios - 使用 UIWebView 忽略无效的服务器证书

标签 ios uiwebview

<分区>

我们有一个使用 UIWebView 来显示内容的 iOS 应用程序。我们用如下代码加载数据:

NSURL *url = [NSURL URLWithString:myURLString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[_webView setDelegate:self];
[_webView loadRequest:request];

这过去适用于 HTTP 请求,但现在我们对具有自签名 SSL 证书的服务器使用 HTTPS。运行上述代码时,将调用 webView:didFailLoadWithError: 委托(delegate)方法,并出现以下错误:

The certificate for this server is invalid. You might be connecting to a server that is pretending to be "blah.blah.blah.com" which could put your confidential information at risk."

我只想忽略无效证书并继续请求,就像在 Mobile Safari 中所做的那样。

我已经了解了如何在使用 NSURLConnection 时解决此问题(例如,请参见 HTTPS request on old iphone 3g),但是使用 UIWebView 可以做什么?

我想我可以重新编写代码,使其使用 NSURLConnection 发出请求,然后通过调用其 loadHTMLString:baseURL: 将结果放入 Web View 中方法,但是当页面包含图像、CSS、JavaScript 等时,这会变得复杂。有没有更简单的方法?

最佳答案

请注意:此 API 目前不受支持,实际上只能在安全的测试环境中使用。有关详细信息,请查看此 CocoaNetics article .

[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]]; 将允许您忽略证书错误。您还需要将以下内容添加到文件的开头,以授予您访问这些私有(private) API 的权限:

@interface NSURLRequest (DummyInterface)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host;
+ (void)setAllowsAnyHTTPSCertificate:(BOOL)allow forHost:(NSString*)host;
@end

关于ios - 使用 UIWebView 忽略无效的服务器证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6792213/

相关文章:

ios - CollectionViewController header 从屏幕边缘开始 Swift 4

ios - 用于填充 TableViewController 的本地 XML 文件

ios - NSNotificationCenter - 观察者选择器被调用两次

ios4 - 如何在iPhone应用程序的UIWebView中启用 "select all"?

iphone - 一个 View 中的两个或多个 Collection View

iOS 钥匙串(keychain)在设备之间共享数据

ios - 如何在 WKWebView 上的指定位置获取消息?

ios - 在 iOS 中获取展开/折叠 UITableView 的动态 UIWebview 内容高度

iphone - 如何从 iPhone 中的 UIWebView 发送电子邮件?

ios - 为什么我的导航项/栏的颜色很深?