关于iOS 9发行版中的ATS SSL

我的应用程序使用http,但尚未针对iOS9进行更新。 今天我在iPad上升级到iOS9,我的所有应用程序仍在使用http。 似乎Apple在iOS9发布版本中没有强制https。 有人知道Apple会在什么时候这样做,否则Apple不会这样做? 出于某种原因,我不想更新我的应用程序。

在基于Xcode 7构建的应用程序上启用ATS,但在使用早期版本的Xcode构建的应用程序上启用ATS。 这是为了防止数十万个应用在iOS 9上“破解”。

如果您使用Xcode 7重建应用程序,将为您的应用程序启用ATS,您需要更改后端以使用HTTPS或在info.plist中添加例外。

从本质上讲,ATS被“强制”用于新的/更新的应用程序(或者您需要明确部分或完全禁用它),但不适用于旧应用程序。

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

NSAppTransportSecurity  NSAllowsArbitraryLoads   

目前的应用程序在iOS 9上运行良好.ATS SSL要求为iOS 9构建了大量应用程序。

来自App Transport Security Technote

默认行为:
使用NSURLConnection,CFURL或NSURLSession API的所有连接都在为iOS 9.0或更高版本以及OS X 10.11或更高版本构建的应用程序中使用App Transport Security默认行为。 不符合要求的连接将失败。

关键部分是: 为iOS 9.0或更高版本构建的应用程序

这些是App Transport Security要求:

  • 服务器必须至少支持传输层安全性(TLS)协议版本1.2。
  • 连接密码仅限于提供前向保密的密码(请参阅下面的密码列表。)
  • 证书必须使用SHA256或更好的签名哈希算法进行签名,使用2048位或更高的RSA密钥或256位或更高的椭圆曲线(ECC)密钥。
  • 无效的证书导致硬故障并且没有连接。