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 中添加
不过,在WWDC 16 中,Apple 表示将继续在 iOS 10 和 macOS 10.12 里收紧对普通 HTTP 的访问限制。从 2017 年 1 月 1 日起,所有的新提交 app 默认是不允许使用
关于WWDC 16的这个规定,有几点内容在下面做一个说明:
经过本人三次和苹果中国区技术支持电话交流(最近的一次是2016年12月21日),苹果总部仍没有对强制使用HTTPS协议进行通信发布通知,因此中国区这边还是会对App按以往标准进行审核(最新消息是延迟了,https://developer.apple.com/news/?id=12212016b);
默认情况下我们的 app 可以访问加密足够强 (TLS v1.2 以上,AES-128 和 SHA-2 以及 ECDHC 等) 的 HTTPS 内容。这对所有的网络请求都有效,包括
可以继续添加
相比于使用
对于网页浏览和视频播放的行为,iOS 10 中新加入了
总结一下:
对于 API 请求,基本上是必须使用 HTTPS 的,特别是使用自己的服务器。这个需要后端尽快升级到 HTTPS 。如果使用的是第三方的 API,而他们没有提供 HTTPS 支持的话,需要在
如果app 只需要支持 iOS 10(应该还没有公司这么做),并且有用户可以自由输入网址进行浏览的功能,或者是在线视频音频播放功能的话,只加入
需要特别说明的是,当
最后,关于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
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
相关文章推荐
- 网络编程基础--常用类
- https://yq.aliyun.com/articles/65125?spm=5176.100240.searchblog.18.afqQoU
- HTTP协议浅析(下): 使用HTTP协议实现通信
- HTTPS抓包之Charles
- Swift 网络请求数据与解析
- ip分片与linux实现(整理自网络)
- 还有 3 天,苹果就要关上 HTTP 大门了
- Linux-磁盘及网络IO工作方式解析
- HttpServlet源码
- [转]神经网络-激活函数
- httpClient使用的工具类
- angularjs+文件上传 http头content-type字段变化
- Android 文件下载引擎,稳定、高效、简单易用:FileDownloader(结合okhttp)
- 网络编程基础--TCP/IP
- ClearContainer 网络部分源码分析
- TCP和UDP概念
- nfs 网络文件共享
- HttpClient中post请求http、https示例
- https免费申请ssl证书
- TCP/IP协议族学习笔记