2015-08-15 70 views
0

我想我的运行在iOS应用9 - 虽然我的网址是HTTPS的Xcode 7测试版5,NSURL连接仍然抛出一个错误:任何人都没有例外地在iOS 9上工作NSURLConnection?

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802) 

我试图避免使用异常来获得这工作。我的服务器支持所需的协议:https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/index.html

谢谢...

更新:release notes表明它们已经下降默认支持DHE_RSA密码的:

“DHE_RSA密码套件现在是默认禁用安全Transport for TLS clients。这可能会导致无法连接到仅支持DHE_RSA密码套件的TLS服务器,使用SSLSetEnabledCipher明确启用密码套件的应用程序不会受到影响,并且如果明确启用,仍然会使用DHE_RSA密码套件。

这些是我的服务器支持的密码。查看完整列表在这里: https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/index.html

所以我想我需要使用SSLSetEnabledCiphers每一个NSURLConnection的,或升级我的服务器来支持DHE_ECDSA密码。或者现在使用异常机制。

我错过了什么?任何人都有使用SSLSetEnabledCiphers的示例代码?

谢谢。

+0

http://stackoverflow.com/questions/30720813/ cfnetwork-sslhandshake-failed-ios-9 –

+0

是的,这有变通办法。我试图采用TLS协议,而不是在plist中使用异常代码。 – Richard

+0

对此我仍然没有很好的答案,但我有一个商店的应用程序通行证,但上周已实施。 –

回答

0

这是交易。关于DHE_RSA密码套件默认支持的无害语言是Apple在beta 5中的一个非常大的改变。许多服务器在默认情况下不支持ECDHE_ECDSA密码。为了在我的服务器上支持这些密码,看起来我将不得不升级一些东西或几个东西。甚至重新编译一些东西。确认。

我想我只需要确保所有的URL都是HTTPS!

具体而言,我可以通过使用info.plist中的“NSExceptionRequiresForwardSecrecy = NO”键来支持通过HTTPS链接到我的服务器。如有必要,也不要忘记“NSIncludesSubdomains = YES”键。

有用的背景,特别是如果的Diffie-Helmen兑换,椭圆曲线和正向保密不熟悉你:

http://blog.ivanristic.com/2013/08/configuring-apache-nginx-and-openssl-for-forward-secrecy.html

http://blog.lowsnr.net/2014/10/26/configuring-apache-2-2-ssltls-for-forward-secrecy/

+0

感谢hynek.me,进一步的研究表明,要支持ECDHE密码,您需要Apache 2.4或Apache 2.2.26。不知道这些版本有多普遍。 http://archive.apache.org/dist/httpd/CHANGES_2.2.26 – Richard

+0

听起来这对他们来说太快了,这会让所有人都打开它而不是更新他们的服务器... –

+0

幸运的是,我有很好的公司:Facebook SDK不支持他们的服务器上的Forward Secrecy: https://developers.facebook.com/docs/ios/ios9 – Richard

相关问题