iOS9收到错误“发生SSL错误,无法建立与服务器的安全连接”

2020/11/15 04:42 · ios ·  · 0评论

由于我使用iOS 9升级了现有项目,因此我不断收到错误消息:

发生SSL错误,无法建立与服务器的安全连接。

For the iOS9, Apple made a radical decision with iOS 9, disabling all unsecured HTTP traffic from iOS apps, as a part of App Transport Security (ATS).

To simply disable ATS, you can follow this steps by open Info.plist, and add the following lines:

<key>NSAppTransportSecurity</key>
  <dict>
      <key>NSAllowsArbitraryLoads</key>
      <true/>
  </dict>

尽管允许任意加载(NSAllowsArbitraryLoads = true)是一个不错的解决方法,但您不应完全禁用ATS,而应启用要允许的HTTP连接:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.1</string>
    </dict>
  </dict>
</dict>

iOS 9强制使用HTTPS的连接为TLS 1.2,以避免最近的漏洞。在iOS 8中,甚至还支持未加密的HTTP连接,因此TLS的较早版本也不会出现任何问题。解决方法是,可以将此代码段添加到Info.plist中:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

*参考App Transport Security(ATS)

在此处输入图片说明

如果您仅针对特定域,则可以尝试将其添加到应用程序的Info.plist中:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>example.com</key>
        <dict>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

似乎iOS 9.0.2中断了对有效HTTPS终结点的请求。我目前的怀疑是它需要SHA-256证书,否则会因此错误而失败。

要重现,请使用野生动物园检查UIWebView,然后尝试导航到任意HTTPS端点:

location.href = "https://d37gvrvc0wt4s1.cloudfront.net/js/v1.4/rollbar.min.js"
// [Error] Failed to load resource: An SSL error has occurred and a secure connection to the server cannot be made. (rollbar.min.js, line 0)

现在尝试前往Google(因为他们当然拥有SHA-256证书):

location.href = "https://google.com"
// no problemo

为传输安全性添加一个例外(如上面@stéphane-bruckert的回答所述)可以解决此问题。我还认为完全禁用NSAppTransportSecurity也可以,尽管我读过完全禁用可能会危害您的应用程序审查。

[编辑]我发现,简单地枚举NSExceptionDomainsdict中要连接的域即可解决此问题,即使将NSExceptionAllowsInsecureHTTPLoads设置保留为true也是如此。:\

问题是服务器端的ssl证书。干扰或证书与服务不匹配。例如,当网站使用www.mydomain.com的ssl证书而您使用的服务在myservice.mydomain.com上运行时。那是另一台机器。

当我将HTTPS URL指定为https://www.mywebsite.com时,出现相同的错误但是,当我将其指定为不带三个W时,它可以正常工作:https : //mywebsite.com

Xcode项目-> goto info.plist,然后单击+按钮,然后单击添加(应用程序传输安全设置)扩展,允许任意负载设置为是。谢谢

我的问题是NSURLConnection,iOS9中弃用了该问题,因此我将所有API更改为NSURLSession,从而解决了我的问题。

iOS9中不推荐使用NSURLConnection

就我而言,我在模拟器中遇到了此问题,因为我的计算机日期晚于当前日期。因此,当您遇到SSL错误时,也请检查这种情况。

我在播放时遇到错误

finished with error [-1200] Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={NSErrorFailingURLStringKey=https://remote-abcabc-svc.an.abc.com:1935/abr/_definst_/smil:v2/video/492F2F82592F59EA74ABAA6B9D6E6F42/F6B1BD452132329FBACD32730862CAE0/091EAD80FE9BEDD52A2F33840CA3CBAC.v3.eng.smil/playlist.m3u8, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorDomainKey=3, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <692A1174-DA1C-4267-9560-9020A79F8458>.<1>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalDataTask <692A1174-DA1C-4267-9560-9020A79F8458>

我确保我在plist文件的异常域中添加了条目,并且NSAllowsArbitraryLoads设置为true,但仍然看到错误。

然后我意识到我正在使用https而不是http播放URL。

我将视频网址设置为http并解决了问题。

我在某些网络电话而不是其他网络电话中收到此错误。我已连接到公共wifi。那个免费的wifi似乎在篡改某些URL,因此会产生错误。

当我连接到LTE时,该错误消失了!

本文地址:http://ios.askforanswer.com/ios9shoudaocuowufashengsslcuowuwufajianliyufuwuqideanquanlianjie.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!