支持服务器的iOS 9 ATS SSL错误

我安装了Xcode 7,并尝试在iOS 9下运行我的应用程序。我得到臭名昭着的错误: Connection failed! Error - -1200 An SSL error has occurred and a secure connection to the server cannot be made. Connection failed! Error - -1200 An SSL error has occurred and a secure connection to the server cannot be made. 事情是我的服务器支持TLSv1.2,我正在使用NSURLSession

那可能是什么问题?

苹果已经发布了App Transport Security的完整需求清单。

原来,我们正在使用TLS v1.2,但缺less一些其他要求。

这是完整的检查清单:

  1. TLS至less需要1.2版本。
  2. 连接密码仅限于提供前向保密的密码(请参阅下面的密码列表)。
  3. 该服务需要至less使用SHA256指纹的证书,该证书具有2048位或更大的RSA密钥或者256位或更大的椭圆曲线(ECC)密钥。
  4. 无效的证书导致硬故障并且没有连接。

接受的密码是:

 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 

在iOS9中,苹果增加了一项名为App Transport Security(ATS)的新function。

ATS在networking呼叫期间执行最佳做法,包括使用HTTPS。

苹果预发布文档:

ATS防止意外泄露,提供安全的默认行为,并且易于采用。 您应该尽快采用ATS,无论您是创build新应用还是更新现有应用。

如果您正在开发新的应用程序,则应该专门使用HTTPS。 如果您有现有的应用程序,则应尽可能使用HTTPS,并尽快制定一个计划来迁移应用程序的其余部分。

在你的info.plist中添加下面的关键字,然后看看。

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

即使你可以添加特定的exception,

 <key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>testdomain.com</key> <dict> <key>NSIncludesSubdomains</key> <false/> <key>NSExceptionAllowInsecureHTTPSLoads</key> <false/> <key>NSExceptionRequiresForwardSecrecy</key> <true/> <key>NSExceptionMinimumTLSVersion</key> <string>TLSv1.2</string> <key>NSThirdPartyExceptionAllowInsecureHTTPSLoads</key> <false/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <true/> <key>NSThirdPartyExceptionMinimumTLSVersion</key> <string>TLSv1.2</string> <key>NSRequiresCertificateTransparency</key> <false/> </dict> ... </dict> </dict> 

看看这个苹果提供的文档 。

我在iOS 9的运行时遇到了类似的问题,我做了什么修复工作就是将NSAppTransportSecurity Dictionary添加到我的info.plist文件中, NSAllowsArbitraryLoads Bool设置为true并在清理和重build之后运行。

我希望这有帮助!

对于我的代理被阻止尝试从不同的来源使用互联网将解决问题。 Wifi,局域网等