在UIWebview中允许未经validation的SSL证书

我在UIWebView中embedded一个网站。 在开发过程中,我指向了localhost。 问题是,只要它点击“https://”url,它不会加载。 当我加载移动Safari浏览器的url,我得到这个popup窗口:

在这里输入图像说明

有没有一种方法来覆盖这与UIWebView允许未经validation的url?

Nick的回答会让你的应用程序不被苹果公司在App Store中所接受,George的答案将无法加载.css或.js或任何其他次要下载页面的其余部分。 这里有一个完整的答案,允许UIWebView从不受信任的证书的网站加载页面。

如果只是在开发过程中进行testing,则可以在NSURLRequest上创build一个类别,并覆盖下面的私有方法:

#if DEBUG @implementation NSURLRequest (NSURLRequestWithIgnoreSSL) + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host { return YES; } @end #endif 

只要把它放在你的.m文件的任何一个地方(比如app委托),或者把它放在它自己的.m文件中。 你不需要一个匹配的头文件。

#if DEBUG是一种预防措施,可以防止您在提交给苹果公司时意外地将其启用,但是如果您需要它在发布版本中工作,请将其删除(并确保您记得在您之前将其恢复或删除此类别提交给苹果)。

在iOS 9中,所有无效或自签名证书的SSL连接都将失败。 这是iOS 9.0或更高版本以及OS X 10.11和更高版本中新的App Transport Securityfunction的默认行为。

您可以通过在NSAppTransportSecurity字典中将NSAppTransportSecurity设置为YES来覆盖Info.plist此行为。 不过,我build议仅为testing目的覆盖此设置。

在这里输入图像说明

有关信息,请参阅此处的 App Transport Technote。

尼克·洛克伍德Swift 3.0版本的答案。

这仅仅是为了testing/开发的目的:

 extension NSURLRequest { #if DEBUG static func allowsAnyHTTPSCertificate(forHost host: String) -> Bool { return true } #endif } 

使用下面的两个方法,我们可以在UIWebview中允许未经validation的ssl

 -(BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace; -(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge; 

我已经在这里详细地回答了这个问题

有一种合法的方法(至less通过App Store法律)。 当您使用NSURLConnection时,有两种方法可用于允许使用自签名SSL证书:

如何使用NSURLConnection与SSL连接不可信的证书?

如果你实现的UIWebViewDelegate使用

 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 

返回NO,这样WebView不会自行加载。 然后构build一个NSURLConnection(可以通过上面的链接与未签名的证书一起使用)。

当然,通常的SSLbuild议适用于这里:
– 不要在生产服务器上使用未签名的证书!
– 总是表面警告让你的用户决定是否接受证书或不。

我知道它有点晚了,但它可以帮助别人,我发现一篇文章绕过ssl在iOS应用程序,所有你需要做的是设置你的web视图,并从应用程序发送到您的服务器的请求,如果你有一个SSL错误意味着你没有一个有效的证书在你的服务器上,为了绕过你必须使用webview委托方法1)可以validation对保护空间2.)应该开始加载请求3.)接收身份validation挑战你可以复制这些function从这个URL ,对我来说,它工作得很好。 希望能帮助到你