美文网首页程序员的日常程序员
苹果强制要求HTTPS协议了吗?-没有

苹果强制要求HTTPS协议了吗?-没有

作者: 晓飞90 | 来源:发表于2016-12-05 15:34 被阅读359次

    马上到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。
    

    相关文章

      网友评论

        本文标题:苹果强制要求HTTPS协议了吗?-没有

        本文链接:https://www.haomeiwen.com/subject/hhakmttx.html