App Transport Security打破了Web视图

时间:2015-07-08 22:37:59

标签: uiwebview nsurlsession ios9 app-transport-security

我在iOS8下运行良好的应用程序不再在iOS9下运行。问题是,尽管我的.plist文件中包含以下内容:

<key>NSAppTransportSecurity</key>
<dict>
   <!--Include to allow all connections (DANGER)-->
   <key>NSAllowsArbitraryLoads</key>
   <true/>
</dict>

以下代码:

NSURL *targetURL = [NSURL URLWithString:_caseStudyListTitleURL];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[_myWebView loadRequest:request];

导致错误:
NSURLSession / NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9813)

这当然会导致显示空的webView。

应用中的所有其他NSURLSession代码都正常运行。

我在测试iPad上运行XCode 7 Beta 3和iOS 9。

对此有任何想法将不胜感激!

2 个答案:

答案 0 :(得分:2)

试试这个解决方案:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>yourdomain.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
        </dict>
    </dict>
</dict>

答案 1 :(得分:0)

这种情况正在发生,因为您使用的是自签名证书,因此需要添加一些额外的代码。因为默认情况下iOS会拒绝所有不受信任的https连接。

限制不受信任的连接是非常好的默认行为,任何禁用此操作都是非常危险的。

使用此方法绕过身份验证质询:

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

//code to cancel authentication challenge

}

如果您不知道如何使用它取消身份验证质询,那么您可以从article regarding loading HTTPS url in WebView找到一些很好的帮助。

Also have a look at this answer as well