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>
在ATS docs,苹果只允许以下开箱:
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
设置NSThirdPartyExceptionRequiresForwardSecrecy
国旗NO
Info.plist中增加了以下额外的:
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
我不同意将他们的国旗命名为“... ExceptionRequiresForwardSecrecy”,因为技术上DHE提供了完美的前向保密性,只比相应的ECDHE版本慢。听起来像我应该有两个标志,一个是提出保密的例外,一个只是说你很舒服握手较慢。
从技术上讲,你也可以使例外域<your-firebase-app>.firebaseio.com
,并没有NSIncludesSubdomains
标志,但我想这样做足够通用。
既然我们允许非ECDHE密码,火力地堡将不得不禁止其服务器端的这开箱工作(除非开发商想先从较低层次的东西比的NSURLRequest乱搞,看到this SO post关于配置的详细信息SSL密码,但是你会花费更多的时间来做这件事,而不是增加几行Info.plist)。安全方面,我们提供相同版本的相同密码,只是不使用椭圆曲线版本(提供不错的性能改进,但排除某些浏览器[特别是移动浏览器])。有关DHE vs ECDHE的更多信息(以及其他一些不错的SSL背景w.r.t Forward Secrecy是here)。
对于它的价值,实时客户端不存在这个问题,所以我会强烈建议使用那些美好火力地堡体验:)
很难猜测的iOS是不满从错误。如果您找到了挖掘更多详细错误信息的方法,请发送电子邮件至[email protected],我们可以看看我们是否可以确定iOS不喜欢我们的SSL配置。 –
谢谢。我将复制错误消息和电子邮件支持。 – User5103156