【问题标题】:App Transport Security breaks Web View应用程序传输安全中断 Web 视图
【发布时间】:2015-09-27 02:16:59
【问题描述】:

我在 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。

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

【问题讨论】:

  • 你解决了吗?目标 URL 是使用 HTTP 还是 HTTPS?你能用一个你可以公开分享的 URL 重现这个吗?

标签: uiwebview nsurlsession ios9 app-transport-security


【解决方案1】:

试试这个解决方案:

<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>

【讨论】:

    【解决方案2】:

    这是因为您使用的是自签名证书,因此需要添加一些额外的代码。因为默认情况下 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.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-15
      • 2016-02-09
      • 2015-11-15
      • 2016-06-07
      • 2016-01-05
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多