App Transport Security

2017/1/11 posted in  HTTP

App Transport Security is a feature that improves the security of connections between an app and web services. The feature consists of default connection requirements that conform to best practices for secure connections.

App Transport Security(ATS)是Apple为提高系统及应用安全性而在iOS 9和OS X EI Capitan中引入的新特性,必然,出于安全性的考虑,在新发布的watchOS 2系统中也会适用。

一旦开启ATS后,应用所有的网络请求将会自动转换为HTPPS传输,且采用一系列配置要求来保证数据传输的安全性,包括:

  • Transport Layer Security协议版本要求TLS1.2以上;
  • 服务的Ciphers配置要求支持Forward Secrecy等;
  • 证书签名算法符合ATS要求等。

这些配置项在升级服务器支持HTTPS过程中都需要严格遵守的,否则就会导致你的HTTPS服务在iOS 9系统中连接仍是失效的。

如果你的App的服务也在升级以适配ATS要求,可以使用如下的方式进行校验:

在OS X EI Capitan系统的终端中通过nscurl命令来诊断检查你的HTTPS服务配置是否满足Apple的ATS要求: $ nscurl --verbose --ats-diagnostics https://

当然,你也可以参考Apple提供官方指南 App Transport Security Technote进行服务的升级配置以满足ATS的要求。

Apple虽然希望开发者可以积极的参与并为系统及应用安全共同努力,但官方仍提供了一些参考配置去禁用ATS功能或降低ATS的安全性要求。

开发者可以在App的Info.plist中添加NSAppTransportSecurity的相关配置,用以禁用ATS或者添加白名单,可用的配置参数如下:

  1. NSAllowsArbitraryLoads - 设置true即支持所有HTTP请求
  2. NSExceptionDomains - 添加白名单
  3. NSExceptionMinimumTLSVersion - 白名单指定域名支持的TLS版本
  4. NSExceptionRequiresForwardSecrecy - 白名单指定域名是否支持Forward Secrecy
  5. NSExceptionAllowsInsecureHTTPLoads - 白名单指定域名禁用ATS
  6. NSThirdPartyExceptionMinimumTLSVersion - 白名单指定第三方服务域名最低支持的TLS版本
  7. NSThirdPartyExceptionRequiresForwardSecrecy - 白名单指定第三方服务域名是否支持Forward Secrecy
  8. NSThirdPartyExceptionAllowsInsecureHTTPLoads - 白名单指定第三方域名禁用ATS