iOS适配ATS支持Https过AppStore审核


思维导图

说明:文章中部分内容参考了网络资源,如cocoaChina中的文章。

App Transport Security

iOS9中新增App Transport Security(简称ATS)特性, 主要使到原来请求的时候用到的HTTP,都转向TLS1.2协议进行传输。这也意味着所有的HTTP协议都强制使用了HTTPS协议进行传输。在 iOS 9 和 OS X 10.11 中,默认情况下非 HTTPS 的网络访问是被禁止的。当然,因为这样的推进影响面非常广,作为缓冲,我们可以在 Info.plist 中添加 NSAppTransportSecurity字典并且将 NSAllowsArbitraryLoads设置为 YES来禁用 ATS。

不过,WWDC 16 中,Apple 表示将继续在 iOS 10 和 macOS 10.12 里收紧对普通 HTTP 的访问限制。从 2017 年 1 月 1 日起,所有的新提交 app 默认ATS Configuration Basics / ATS 配置基础知识是不允许使用 NSAllowsArbitraryLoads来绕过 ATS 限制的,也就是说,我们最好保证 app 的所有网络请求都是 HTTPS 加密的,否则可能会在应用审核时遇到麻烦

最新的消息是苹果迫于压力,已经延迟了必须ATS的限制,不过这事情早晚要做的,还是尽快搞好

ATS 配置基础知识

对于使用 iOS9.0, OS X v10.11 SDK 及以上的 app 来说,ATS(App Transport Security)默认开启,NSAllowsArbitraryLoads是字典NSAppTransportSecurity的根键,默认值NO。

在启用 ATS 的情况下,所有的 HTTP 请求必须为 HTTPS(RFC 2818) 连接。任何不安全的 HTTP 请求都将失败。ATS 使用 TLS(Transport Layer Security)v1.2(RFC 5246)。

字典NSAppTransportSecurity的总体结构

NSAppTransportSecurity : Dictionary {     

NSAllowsArbitraryLoads : Boolean     

NSAllowsArbitraryLoadsInMedia : Boolean     

NSAllowsArbitraryLoadsInWebContent : Boolean     

NSAllowsLocalNetworking : Boolean     

NSExceptionDomains : Dictionary {

<domain-name-string>: Dictionary {

NSIncludesSubdomains : Boolean

NSExceptionAllowsInsecureHTTPLoads : Boolean

NSExceptionMinimumTLSVersion : String

NSExceptionRequiresForwardSecrecy : Boolean   // Default value is YES

NSRequiresCertificateTransparency : Boolean

}}}

所有键可以分为两类:主键,这些键用来定义 app 的总体 ATS 策略;子键,即NSExceptionDomains下面的键,使用这些键针对某个域名单独配置。

主键包括:

NSAllowsArbitraryLoads

设置为 YES,解除整个 app 的 ATS 限制;但是,通过-NSExceptionDomains进 行的配置依然有效。默认值为 NO。

注意:设置为 YES,会引发 App Stroe 的审查,开发者必须说明原因。

NSAllowsArbitraryLoadsInMedia

设置为 YES,解除通过 AV Foundation 框架访问媒体内容时的 ATS 限制;启用这个 键,务必确保载入的媒体内容已经被加密,例如受FairPlay保护的文件,或者是安全的 HLS流媒,其中不包含敏感的个人信息。默认为 NO。

NSAllowsArbitraryLoadsInWebContent

设置为 YES,解除通过 web view 发出的网络请求的 ATS 限制。启用这个键,可以使 app 访问任意网页内容,但不影响 app 的总体 ATS 策略。此键值默认为 NO。

NSAllowsLocalNetworking

设置为 YES,使得 app 可以载入任意本地资源,但不影响 app 的总体 ATS 策略。默 认为 NO。

NSExceptionDomains

为一个或多个域名单独配置 ATS。

被单独配置的域名,默认受到完全的 ATS 限制,不管NSAllowsArbitraryLoads的值 如何;需要通过子键,进一步配置

所有的子键都属于NSExceptionDomain。向Info.plist中添加这一主键:

创建字典,针对一个或多个域名,以便进行 ATS 配置。

这意味着之前使用主键所做的设置,对于这个域名来说,已经无效。

例如,及时之前设置NSAllowsArbitraryLoadsInMedia为 YES,然而NSExceptionDomain所代表的域名依然不能访问不安全的媒体内容。

基于这样的设定,可以针对域名进行 ATS 配置,增加或减少安全措施。例如:

将NSExceptionAllowsInsecureHTTPLoads设置为 YES,就 ;这样做会引发 App Store 的审查,详情见App Store Review for ATS。

通过配置NSExceptionRequiresForwardSecrecy为 NO,取消正向保密。

通过配置NSExceptionMinimumTLSVersion,更改 TLS 最低版本

NSExceptionDomains字典构成:

<域名字符串>代表想要配置的特定域名。可以添加多个域名(即添加多个这样的键),为它们统一配置 ATS 策略。这个键对应一个字典,包含以下子键:

NSIncludesSubdomains 设置为 YES,当前域名的 ATS 策略适用于其所有子域名。默认为 NO。

NSExceptionAllowsInsecureHTTPLoads 设置为 YES,可以同时通过 HTTP 和 HTTPS 访问当前域名。默认为 NO。注意,配置这个键值,将引发 App Store 的审查,开发者必须说明原因。

NSExceptionMinimumTLSVersion* 指定 TLS 的最低版本,因此可以使用版本较低,有安全漏洞的 TLS 协议。注意,配置这个键值,将引发 App Store 的审查,开发者必须说明原因。

NSExceptionRequiresForwardSecrecy* 设置为 NO,允许针对当前域名使用不支持正向保密的 TLS 加密算法。默认为 YES。

NSRequiresCertificateTransparency* 设置为 YES,将验证域名服务器证书的Certificate Transparency时间戳 。默认为 NO。

使用 ATS 的前提条件

在 ATS 完全开启的情况下,系统要求 app 的 HTTPS 连接必须满足以下要求:

X.509 数字证书必须满足下列标准中的一项:

由操作系统内嵌的根证书颁发机构签发

由通过操作系统管理员或用户主动安装的根证书颁发机构签发TLS 版本必须为1.2,任何不使用或使用较低版本 TLS / SSL 的连接,都将失败。

连接必须使用 AES-128 或 AES-256 对称加密算法。 TLS 算法套装必须以 ECDSA 密钥交换的形式支持正向保密,加密算法必须为下面之一:

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

服务端的叶证书签名密钥必须为下面之一:

至少2048位的 RSA 密钥

至少256位的 ECC 密钥

此外,服务器证书的哈希算法必须为 SHA-2,其摘要长度至少位256位(即 SHA-256 及以上)。上面的标准,未来可能会发生变化。但不会影响到 app 二进制包的兼容性。

App Store 对于 ATS 相关项的审核

某些对 ATS 的配置会引发 App Store 的审核,开发者必须说明原因。这些键有:

NSAllowsArbitraryLoads

NSExceptionAllowsInsecureHTTPLoads

NSExceptionMinimumTLSVersion

以下是一些原因说明例子,供参考:

必须连接由其他机构控制的服务器,其还不支持安全连接。

必须支持那些还未升级至可使用安全连接,不得不通过公共域名访问网络的设备。

必须通过 web 展示来源不一的各种网络内容,但又不能完全使用NSAllowsArbitraryLoadsInWebContent所管理的类。

向 App Store 提交审核时,开发者应主动提供足够的信息,以便解释 app 无法使用安全连接的原因

实现支持安全ATS策略

app内服务器网络请求访问支持https解决方案:

搭建https服务器,搭建https服务器需要ssl证书:

HTTPS服务器满足ATS默认的条件,而且SSL证书是通过权威的CA机构认证过的,那么我们在使用Xcode开发的时候,对网络的适配什么都不用做,我们也能正常与服务器通信。

第三方sdk接入与支持http访问:

主要是围绕info.pilst配置文件作相关的安全ATS策略

NSExceptionDomains 的设置方法如下, 比如我们要将 第三方 域名排除在 ATS 验证之外,就可以这样:

info.plist ATS设置

结束,谢谢点击~~~


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容