Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Https iOS 9 ATS和Firebase REST_Https_Firebase_Ios9 - Fatal编程技术网

Https iOS 9 ATS和Firebase REST

Https iOS 9 ATS和Firebase REST,https,firebase,ios9,Https,Firebase,Ios9,我正在构建一个简单的iOS应用程序,使用RESTAPI与Firebase对话 基本上,我使用nsursession.sharedSession().dataTaskWithRequest连接到 该应用程序在iOS 8中运行良好。我能够通过GET/PUT/PATCH/DELETE操作数据。但由于iOS 9引入了ATS,我现在有了https错误: NSURLSession/NSURLConnection HTTP加载失败 (kCFStreamErrorDomainSSL、CFNetwork SSL

我正在构建一个简单的iOS应用程序,使用RESTAPI与Firebase对话

基本上,我使用
nsursession.sharedSession().dataTaskWithRequest
连接到

该应用程序在iOS 8中运行良好。我能够通过GET/PUT/PATCH/DELETE操作数据。但由于iOS 9引入了ATS,我现在有了https错误:

NSURLSession/NSURLConnection HTTP加载失败

(kCFStreamErrorDomainSSL、CFNetwork SSLHandshake失败)

我完全了解Info.plist中的解决方案。但是,我想利用iOS 9中的新安全功能

我检查了Firebase连接安全性(通过点击Chrome的绿色锁定按钮),它似乎与苹果的ATS要求兼容

我的错误是因为我使用NSURLSession的方式吗?还是因为Firebase的安全设置

PS:我已测试,NSURLSession连接良好,无错误。我的应用程序也很简单,不需要auth


谢谢你的帮助。

TL;DR:这与Firebase服务器允许的SSL密码有关(ATS只需要开箱即用的ECDHE)

如上所述,Info.plist中的解决方法是添加以下内容:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>firebaseio.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
        </dict>
    </dict>
将Info.plist中的
nsthirdPartyExceptionRequiresForwardSecreticy
标志设置为
NO
,将添加以下附加标志:

TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA
我不同意他们将标志命名为“…ExceptionRequiresForwardSecretary”,因为从技术上讲,DHE提供了完美的前向保密,只是比可比的ECDHE版本慢。在我看来,应该有两个标志,一个是“向前保密”的例外,另一个只是说你对缓慢握手感到舒服

从技术上讲,您也可以使用例外域
.firebaseio.com
,而不使用
nsincludesubdomains
标志,但我想让它具有足够的通用性

由于我们允许使用非ECDHE密码,Firebase将不得不禁止服务器端使用非ECDHE密码,这样才能开箱即用(除非开发人员希望开始使用比NSURLRequest更低级的东西,请参阅以获取有关配置SSL密码的更多信息,但您将花费更多的时间,而不是在info.plist中添加几行代码)

就安全性而言,我们提供了相同密码的可比版本,只是没有使用椭圆曲线版本(它提供了不错的性能改进,但排除了某些浏览器[特别是移动浏览器])。关于DHE与ECDHE的更多信息(以及其他一些优秀的SSL背景w.r.t前向保密)


值得一提的是,实时客户端没有这个问题,因此我强烈建议使用这些客户端以获得更好的Firebase体验:)

很难猜测iOS对这个错误有何不满。如果你想办法找出更多详细的错误信息,请发电子邮件给我们support@firebase.com我们可以看看是否可以确定iOS不喜欢我们的SSL配置。谢谢。我将复制错误消息和电子邮件支持。谢谢您的评论。我切换到Firebase SDK。只想提到XCode 7在默认情况下将ENABLE_BITCODE设置为yes,并且会在Firebase SDK中抛出一个错误。将其设置为“否”将清除该消息。你有新SDK发布的时间吗?@User5103156我们将研究ENABLE_位代码,以及是否可以在Firebase SDK上设置它。谢谢你的提醒!作为一个相对轻松但可以说不太安全的替代方案:github.com/leecrosley/cordova plugin transport security我已经完成了上述操作,但仍然会出现错误CFNetwork SSLHandshake failed(-9806),只有在设备锁定时才会出现。使用objective-c版本的sdk-如有任何帮助,将不胜感激:)我已关闭位代码,但仍会收到错误
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA