iOS9 - ATS_safiri的博客-程序员宅基地

技术标签: ios  iOS9 新特性  

转载自:

iOS 9学习系列:如何使用ATS提高应用的安全性

苹果新『应用通信安全』的理解和使用


在2015的WWDC大会上,Apple明确表示了它打算以身作则的通过一个新特性来提高操作系统的安全性,它就是App Transport Security.Apple期望开发者们在他们的应用中使用App Transport Security.

什么是App Transport Security?

简短的说就是ATS,是iOS9和OS X El Capitan的一个新特性。(尽管Apple没有提到watchOS,我们可以推测 App Transport Security 也同样适用于watchOS 2。)App Transport Security 的目标是提高Apple 操作系统的安全性以及在此操作系统上运行的任何应用的安全性。

基于HTTP传输数据的网络请求都是明文。App Transport Security 通过强力推行一系列的最好的安全实际操作来积极地促进安全性,最重要的一个就是要求网络请求必须在一个安全的链接上传输。开启App Transport Security后,网络传输自动通过HTTPS传输而不是HTTP.

还有一系列其他的要求来进一步提高安全性能。例如,App Transport Security要求TLS (Transport Layer Security) 1.2或者更高。可能你并不是很了解 TLS,但我保证你肯定听过SSL (Secure Sockets Layer)。TLS是SSL的继承人,它是一系列加密协议的集合用来加强在网络连接上的安全性。

如何设置ATS?

在iOS 9 和 OS X EI Caption之后,当使用NSURLSession的时候默认会开启ATS。然而不幸的是,对于大多数开发者而言,这将意味着在他们基于新版本的操作系统做开发时,情况有了很大的变化。好消息是,苹果官方提供了一些可选配置项来决定是否开启ATS模式,也就是可以选择开启或者不开启。

开发者可以针对某些确定的URL不使用ATS,这需要在工程中的info.plist中标记NSExceptionDomains。在NSExceptionDomains字典中,可以显式的指定一些不使用ATS的URL。这些你可以使用的例子可以是:

  • NSIncludesSubdomains

  • NSExceptionAllowInsecureHTTPLoads

  • NSExceptionRequiresForwardSecrecy

  • NSExceptionMinimumTLSVersion

  • NSThirdPartyExceptionAllowsInsecureHTTPLoads

  • NSThirdPartyExceptionMinimumTLSVersion

  • NSThirdPartyExceptionRequiresForwardSecrecy

subdomain 子域 exception [ɪk'sepʃ(ə)n; ek-] 例外 insecure [,ɪnsɪ'kjʊə; ,ɪnsɪ'kjɔː] 不安全的 secrecy ['siːkrɪsɪ] 保密

这些关键字使我们可以更加细致的设置针对不使用ATS的域名情况下禁用ATS或者一些特殊的ATS选项。

info.plist

如何使用ATS?

关于App Transport Security,每个应用都属于4个大类当中的一类。我们来看看每一个大类都是怎样影响应用的。

例1 所有情况都使用ATS

如果你的应用只基于支持HTTPS的服务器,那么你太幸运了。你的应用不需要做任何改变。但是,注意App Transport Security要求TLS 1.2而且它要求站点使用支持forward secrecy协议的密码。证书也要求是符合ATS规格的。因此慎重检查与你的应用交互的服务器是不是符合ATS的要求非常重要。

例2 特殊情况除外,都使用ATS

如果你希望自己所有的域名,除了一些已知并不会使用ATS之外的,所有通信都使用ATS。这种情况下你可以指定一些不使用ATS的特殊情况,而其余的情况使用ATS。

对于这种场景,可以使用 NSExceptionDomains 来标识使用ATS默认设置的域。为了筛选出所有域或者子域,可以创建一个包含想要排除使用ATS的URL的字典,然后设置其中的 NSExceptionAllowInsecureHTTPLoads 的值为true。

例2

例3 除特殊情况外,都不使用ATS

一种与上例相反的情况,你可能进希望在你明确知道支持的域内使用ATS。这种情况下,需要设置 NSAllowArbitraryLoads 为true,然后在 NSExceptionDomains 字典中定义需要保证安全性的URL。需要保证安全性的每个域都需要有自己的字典,而且字典中的 NSExceptionAllowInsecureHTTPLoads 选项需要设置为false*NSExceptionAllowsInsecureHTTPLoads* 设置为YES
arbitrary ['ɑːbɪt(rə)rɪ] 任意的

例3

这里写图片描述

例4 低级的ATS

在某些情况下,可能ATS用于所有情况,或者一些,或者是自有的URL,但是并未针对所有的ATS最佳实践全部支持。也许你的应用服务器仅支持TLS1.2,但是不支持之后的版本,与其把涉及到的所有域都设置为不用ATS,不如设置为支持版本较低的ATS。这种场景下,需要创建一个NSExceptionDomains字典,这是一个对于每个域都要重用的字典选项,然后设置NSExceptionRequiresForwardSecrecy值为false。类似的,如果你希望向前支持,但是需要最低版本的TLS,你可以通过NSExceptionMinimumTLSVersion关键字定义你的应用服务器所支持的TLS版本。
例4

例5 NSA-friendly模式

如果想完全不使用ATS(不建议使用这种模式,并且需要你完全理解其隐藏的危险。)你可以在info.plist中设置NSAllowArbitraryLoads属性为true。

例5

带"ThirdParty"字样的关键字:
在功能上,这些关键字与不含有"ThirdParty"的关键字有同样的效果。
而且实际运行中所调用的代码将会完全忽略是否使用"ThirdParty"关键
字。你应该使用适用于你的场景的关键字而不必过多考虑这些。


虽然ATS大多数安全特性都是默认可用的,Certificate Transparency是必须设置的。
如果你有支持Certificate Transparency的证书,你可以查
NSRequiresCertificateTransparency关键字来使用Certificate Transparency。
再次强调,如果你的证书不支持Certificate Transparency,此项需要设置为不可用。

如果需要调试一些由于采用了ATS而产生的问题,需要设置
CFNETWORK_DIAGNOSTICS为1,这样就会打印出包含被访问的URL和ATS错
误在内的NSURLSession错误信息。要确保处理了遇到的所有的错误消息,这
样才能使ATS易于提高可靠性和扩展性。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/safiri/article/details/48319221

智能推荐

计算机图形学——MFC和OpenGL两种方法实现光照模型_图形学用mfc实现球体_小黄鸭and小黑鸭的博客-程序员宅基地

计算机图形学——MFC和OpenGL两种方法实现光照模型1、OpenGL实现Phong光照:见上一个实验实现效果:2、C++实现Phong光照:           参考资料:https://wenku.baidu.com/view/c8cb630bf78a6529647d5335.html              实现效果:

福禄克同轴适配器DTX-COAX配DTX-1800用_深圳创联信息的博客-程序员宅基地

DTX-COAX高清视频线测试套装使用DTX系列电缆认证分析仪(DTX1800,DTX1200,DTX-LT,DTX-CLT)的同轴电缆测试适配器DTX-COAX可以快速简便地测试同轴电缆链路。DTX系列电缆认证分析仪(DTX1800,DTX1200,DTX-LT,DTX-CLT)增加了测试同轴电缆系统的功能,包括上一代的数据电缆(例如10BASE-2或10BASE-5以太网)和视频分发同轴电缆,功能得到了进一步增强。深圳连讯销售的全新同轴电缆测试适配器和升级软件为您的DTX系列电缆...

个人开发笔记整理_engineer_he的博客-程序员宅基地

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

springboot thymeleaf 对自定义标签赋值_thymeleaf label 赋值_Robert·Ran的博客-程序员宅基地

在开发中遇到需要对自定义属性进行赋值,之前项目的写法为:<a href="javascript:void(0);" th:data-uri="${s.resUrl}"></a>,结果在新项目中js 通过data_uri = $(this).attr('data-uri')获取到的值为undefined,网上看了几篇博文(比较详细的一篇博客https://blog.csdn...

用户口令审计3_willowpy的博客-程序员宅基地

ophcrack-彩虹表审计Windows系统账号密码破解工具Windows账号密码加密保存于SAM数据库中 Pwdump / samdump2可获得密码HASHOphcrack用于破解Windows账号密码的HASH基于彩虹表的密码破解工具 明文> HASHO→HASH1 官方提供Ophcrack LiveCD 高级彩虹表由Objectif Securite出售 免费彩虹表http://ophcrack .sourceforge.net/tables.phpPreferen

基于matlab仿真实验---16QAM调制与解调_16qam调制仿真误比特率为啥会比理论高_三分奶茶七分糖丶的博客-程序员宅基地

基于matlab仿真实验---16QAM1.仿真要求2.三、仿真方案详细设计16QAM 调制原理:16QAM 解调原理:3.仿真代码仿真结果1.仿真要求用基带等效的方式仿真16-QAM在AWGN信道下的误码率和误比特率性能,并与理论值相比较。2.三、仿真方案详细设计16QAM 调制原理:16QAM 是用两路独立的正交 4ASK 信号叠加而成, 4ASK 是用多电平信号去键控载波而得到的信号。正交幅度调制是利用多进制振幅键控( MASK )和正交载波调制相结合产生的。 16 进制的正交振幅调制是一

随便推点

数据库期末考源代码_网络数据库期末作业源代码_charlottehe的博客-程序员宅基地

USE master;IF DB_ID('EduBase') IS NOT NULL BEGIN ALTER DATABASE EduBase SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE EduBase; ENDCREATE DATABASE EduBase ON (NA...

Android开发使用Glide获取图片背景色淡绿色解决办法_glide修改色调_cyt_victory的博客-程序员宅基地

第一次写博客,文笔不好,请大家多多关照,欢迎拍砖 在Android开发中,常用的加载图片工具有,Glide,Picasso,Fresco,其中Glide和Picasso使用方法极为相似,相对于Picasso来说,Glide加载图片更为迅速,内存占用更小等优点,但图像呈现和图像质量略逊一筹,而Fresco还未曾使用,对此不作评价。首先集成Glide,因为项目用的是这个版本,所以就以此版本为例 如果

SpringBoot手动获取Bean_奚学长又装死的博客-程序员宅基地

SpringBoot中,普通Java类也需要被Spring管理的话,就需要手动注入使用手动注入Bean:EpochPeTestdomainMapper testDomainMapper = SpringUtil.getBean(EpochPeTestdomainMapper.class);如下新建一个工具类:/** * 实现ApplicationContextAware接口,...

STM32 基本定时器_choushan2212的博客-程序员宅基地

1. STM32的Timer简介 STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。其中系统嘀嗒定时器是前文中所描述的SysTick,看门狗定时器以后再详细研究。今天主要是研究剩下的8个定时器。 ...

windbg获取TEB(线程环境块)信息_windbg teb_code_greenhand的博客-程序员宅基地

windbg下载安装配置符号路径如果是win10直接下载windbg预览版,预览版只有win10才能用,我的是win7所以下载的是老版本的,老版本去官网中的win10 sdk中下载 链接:https://developer.microsoft.com/zh-cn/windows/downloads/sdk-archive下载后会有x86和64位两个版本,两个版本都要配置符号路径,否则只能使用...

python3调用matlab函数_狗尾草L的博客-程序员宅基地

1.版本对应问题python3.6可以调用matlab2018b的引擎运行函数实现方式:在matlab2018b的安装目录下,进入extern\engines\python\,在该文件夹位置下进入cmd。然后输入python setup.py install如果没有错误提示则继续,有错误,则查看自己的python和matlab版本,一定要对应。然后输入python,进入pytho...

推荐文章

热门文章

相关标签