您的位置:首页 > 理论基础 > 计算机网络

iOS中的HTTPS

2016-12-28 16:26 405 查看
  在WWDC 15,Apple提出的ATS (App Transport Security) ,是 Apple 在推进网络通讯安全的一个重要方式。在 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 默认是不允许使用
NSAllowsArbitraryLoads
来绕过 ATS 限制的,也就是说,我们最好保证 app 的所有网络请求都是 HTTPS 加密的,否则可能会在应用审核时遇到麻烦。

关于WWDC 16的这个规定,有几点内容在下面做一个说明:

经过本人三次和苹果中国区技术支持电话交流(最近的一次是2016年12月21日),苹果总部仍没有对强制使用HTTPS协议进行通信发布通知,因此中国区这边还是会对App按以往标准进行审核(最新消息是延迟了,https://developer.apple.com/news/?id=12212016b);

默认情况下我们的 app 可以访问加密足够强 (TLS v1.2 以上,AES-128 和 SHA-2 以及 ECDHC 等) 的 HTTPS 内容。这对所有的网络请求都有效,包括
NSURLSession
、通过 AVFoundation 访问的流媒体、
WebView
等。

可以继续添加
NSAllowsArbitraryLoads
YES
来全面禁用 ATS,不过如果这么做的话,需要在提交 app 时进行说明,为什么需要访问非 HTTPS 内容。一般来说,可能简单粗暴地开启这个选项,而又无法找到正当理由的 app 会难以通过审核

相比于使用
NSAllowsArbitraryLoads
将全部 HTTP 内容开放,选择使用
NSExceptionDomains
来针对特定的域名,通过设定该域名下的
NSExceptionAllowsInsecureHTTPLoads
来开放 部分HTTP域名,
应该要相对容易过审核。“需要访问的域名是第三方服务器,他们没有进行 HTTPS 域名适配”会是审核时的一个可选理由,但是这应该只需要针对特定域名,而非全面开放。如果访问的是自己的服务器的话,可能这个理由会无法通过

对于网页浏览和视频播放的行为,iOS 10 中新加入了
NSAllowsArbitraryLoadsInWebContent
NSAllowsArbitraryLoadsForMedia
键。通过将它们设置为
YES
,可以让app 中的
UIWebView
WKWebView
或者使用
AVFoundation
播放的在线视频不受 ATS 的限制。虽然依然需要在审核时进行说明,但这也应该是绝大多数使用了相关特性的 app 的首选。坏消息是这个键在 iOS 9 中并不会起作用

总结一下:

对于 API 请求,基本上是必须使用 HTTPS 的,特别是使用自己的服务器。这个需要后端尽快升级到 HTTPS 。如果使用的是第三方的 API,而他们没有提供 HTTPS 支持的话,需要在
NSExceptionDomains
中进行添加,然后在提交审核的时候进行说明。

如果app 只需要支持 iOS 10(应该还没有公司这么做),并且有用户可以自由输入网址进行浏览的功能,或者是在线视频音频播放功能的话,只加入
NSAllowsArbitraryLoadsInWebContent
NSAllowsArbitraryLoadsForMedia
,并且将组件换成
UIWebView
WKWebView
,以及
AVFoundation
中的 player 就可以了。如果你还需要支持 iOS 9,并且需要访问网页和视频的话,可能只能去开启
NSAllowsArbitraryLoads
然后提交时进行说明,并且看 Apple 审核员的脸色决定让不让通过了。

需要特别说明的是,当
NSAllowsArbitraryLoads
NSAllowsArbitraryLoadsInWebContent
NSAllowsArbitraryLoadsForMedia
同时存在时,根据系统不同,表现的行为也会不一样。简单说,iOS 9 只看
NSAllowsArbitraryLoads
,而 iOS 10 会优先看
InWebContent
ForMedia
的部分。在 iOS 10 中,要是后两者存在的话,在相关部分就会忽略掉
NSAllowsArbitraryLoads
;如果不存在,则遵循
NSAllowsArbitraryLoads
的设定。

  最后,关于iOS客户端有可能涉及到的开发工作,主要有如下几种类型:

后台接口;

图片、语音等资源类文件(一般是配置到CDN服务器的);

WebView

客户端第三方SDK,如友盟、乐视、百度等。

硬编码的URL链接。

下面的饼图是iOS各系统的占有比率,感兴趣的可以自己随时从苹果官方网站查看:https://developer.apple.com/support/app-store/



  参考资料:
http://oncenote.com/2014/10/21/Security-1-HTTPS/ https://www.kancloud.cn/digest/ios-security/67013
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: