马上到17年了,网上流传的苹果强制要求协议必须用https的日子马上就要到了是不是真的呢,用http协议的App会不会下架呢,而且12月23日到27日苹果是暂停审核的哦。
苹果并没有出官方文档强制执行
今天打了苹果技术支持电话,电话号码是 4006-701-855 ,说现在并没有这个要求,以后会不会强制也没有确定,不信的话你可以打电话哦。
下面就说说http和https那些事。
1.iOS 9以后将要求网络请求使用HTTPS协议.并没有强制要求
15年6月份的WWDC上,Apple提出了App Transport Security(ATS)的概念。
这一特性的主要意图是为我们的App与服务器之间提供一种安全的通信方式,以防止中间人窃听、篡改传输的数据。这一特性在iOS 9+和OS X
10.11+中是默认的支持项。
这一概念的提出,也将意味着Apple将会慢慢转向支持HTTPS,而可能放弃HTTP。
App Transport Security技术要求
服务端必须支持TLS 1.2或以上版本;必须使用支持前向保密的密码;
证书必须使用SHA-256或者更好的签名hash算法来签名,如果证书无效,
则会导致连接失败。
Apple认为这是目前保证通信安全性的最佳实践,特别是使用TLS 1.2和前向保密。
当然,相信Apple也会与时俱进,不断的修正ATS,以保证网络通信的安全性。
1.默认配置
在iOS 9+和OS X 10.11+中,如果我们的App使用了NSURLConnection、CFURL 或者NSURLSession相关
的API来进行数据通信的话,则默认是通过ATS的方式来传输数据。在此配置下,如果我们使用HTTP
来进行通信,则会导致请求失败,并报错误。
2.自定义配置[过度时期]
过渡时期Apple允许我们在Info.plist文件中来自行配置以修改默认设置(Exceptions),下表是一些键
值及对应的类型和说明:键类型说明NSAppTransportSecurityDictionary配置ATS的顶层键值
NSAllowsArbitraryLoadsBoolean这是一个开关键,设置不在NSExceptionDomains列表中的其它域ATS特性
。默认值是NO,如果设置为YES,则会关闭其它域的ATS特性。NSExceptionDomainsDictionary特定域列表Dictionary
需要自定义配置的域名,键是对应的域名,如www.apple.com
NSExceptionMinimumTLSVersion String
指定域所需要的TLS的最低版本。有效值包括:TLSv1.0、TLSv1.1、TLSv1.2。默认值是TLSv1.2
NSExceptionRequiresForwardSecrecy Boolean
指定域是否需要支持前向保密。默认值是YES
NSExceptionAllowsInsecureHTTPLoads Boolean
指定域的请求是否允许使用不安全的HTTP。使用这个键来访问没有证书,或者证书是自签名、过期或
主机名不匹配的证书。默认值为NO,表示需要使用HTTPS。
NSIncludesSubdomains Boolean
指定自定义的值是否应用到域的所有子域中。默认值是NO
NSThirdPartyExceptionMinimumTLSVersion String
类似于NSExceptionMinimumTLSVersion键,只不过指定的是应用本身无法控制的第三方组件的域所需要的TLS的最低版本。
NSThirdPartyExceptionRequiresForwardSecrecy Boolean
同上。指定第三方组件的域是否需要支持前向保密
NSThirdPartyExceptionAllowsInsecureHTTPLoads Boolean
同上。指定第三方组件的域的请求是否使用HTTPS
2.iOS 中 HTTPS 的使用
参考:http://www.jianshu.com/p/20d5fb4cd76d
马上到年底了,第一部分讲的恐怕以后都不会用上了,下面来说一下https的使用吧。
一、HTTPS
HTTPS就是将HTTP协议数据包放到SSL/TSL层加密后,在TCP/IP层组成IP数据报去传输,以此保
证传输数据的安全;而对于接收端,在SSL/TSL将接收的数据包解密之后,将数据传给HTTP协议
层,就是普通的HTTP数据。HTTP和SSL/TSL都处于OSI模型的应用层。
二、App Transport Security
iOS9中新增App Transport Security(简称ATS)特性, 主要使到原来请求的时候用到的HTTP,都转向TLS1.2协议进行传输。这也意味着所有的HTTP协议都强制使用了HTTPS协议进行传输。
备注:上面没有提到:【估计以后用不到了】
一般我们如果还是使用的http,不更新的话,可通过
在 Info.plist 中声明,倒退回不安全的网络请求。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
三、iOS 中用HTTPS 注意的问题
官方文档:
These are the App Transport Security requirements:
- The protocol Transport Security Layer (TLS) must be at least version 1.2.
- Connection ciphers are limited to those that provide forward secrecy (see the list of ciphers below.)
- Certificates must use at least an SHA256 fingerprint with either a 2048 bit or greater RSA key, or a 256 bit or greater Elliptic-Curve (ECC) key.
根据原文描述:
首先必须要基于TLS1.2版本协议。再来就是连接的加密方式要提供Forward Secrecy,文档中罗列
出支持的加密算法(如下表)。最后就是证书至少要使用一个SHA256的指纹与任一个2048位或者更
高位的RSA密钥,或者是256位或者更高位的ECC密钥。如果不符合其中一项,请求将被中断并返回nil。
网友评论