美文网首页
iOS进行HTTP/HTTPS适配(ATS)

iOS进行HTTP/HTTPS适配(ATS)

作者: OwenWong | 来源:发表于2019-10-21 17:42 被阅读0次

一、HTTP与HTTPS的原理

HTTP传输: HTTP传输.png
HTTPS传输: HTTPS传输.png
从上图可以看出:HTTPS就是在HTTP的基础上,在传输层和会话层之间了一个SSL层,简单来说都作用是负责数据的加解密,从而保证了数据都安全。

二、官方相关文档解读

App Transport Security (ATS)在iOS 9.0之后就默认开启了。也就是我吗之前请求HTTPS的时候NSAllowsArbitraryLoads这个key的值默认设置为NO了,而且这个键现在在NSAppTransportSecurity字典的第一层。

NSAppTransportSecurity : Dictionary {
    NSAllowsArbitraryLoads : Boolean
    NSAllowsArbitraryLoadsForMedia : Boolean
    NSAllowsArbitraryLoadsInWebContent : Boolean
    NSAllowsLocalNetworking : Boolean
    NSExceptionDomains : Dictionary {
        <domain-name-string> : Dictionary {
            NSIncludesSubdomains : Boolean
            NSExceptionAllowsInsecureHTTPLoads : Boolean
            NSExceptionMinimumTLSVersion : String
            NSExceptionRequiresForwardSecrecy : Boolean
            NSRequiresCertificateTransparency : Boolean
        }
    }
}

除了NSExceptionRequiresForwardSecrecy默认的值时YES。其它的默认的值都是NO。

NSAppTransportSecurity字典分两个层级配置,前面四个
NSAllowsArbitraryLoads,NSAllowsArbitraryLoadsForMedia,
NSAllowsArbitraryLoadsInWebConten, NSAllowsLocalNetworking 是对整个APP全局的配置。如果我们需要对某个域名有区分的对待就需要在NSExceptionDomains里面进行相应的配置。

NSAllowsArbitraryLoads
设置为YES的话,就会使得除了开发者在NSExceptionDomains里面配置的域名以外所有的网络连接不受限制。

如果你设置为YES的话,需要在提审核的时候说明这样做的原因。

NSAllowsArbitraryLoadsForMedia
设置为YES的话,所有在APP里面使用AV Foundation framework加载的视频都不会被限制。如果不设置的话,就仅用于加载已加密的媒体,例如由FairPlay或安全HLS保护的文件,并且不包含个人信息。

如果你设置为YES的话,同样也是需要在提审核的时候说明你这样做的原因。

NSAllowsArbitraryLoadsInWebContent

如果你设置为YES的话,系统会禁用对来自Web视图的请求的所有ATS限制,也就是你的WebView的请求不不一定需要HTTPS,APP就可以使用嵌入式浏览器来显示任意内容,但是应用的其他部分还是需要用ATS。

如果你设置为YES的话,同样也是需要在提审核的时候说明你这样做的原因。

NSAllowsLocalNetworking
设置为YES的话就允许加载本地资源。

NSExceptionDomains
NSExceptionDomains其实是相当于NSAllowsArbitraryLoads的一个子集。后者是全局的作用,而前者主要是用于对某些域名的限制作用。他的主要作用其实就是用于们自签名的证书,具体使用细节我会在后面具体介绍。

NSExceptionDomains字典里面各键的值意义如下。

NSIncludesSubdomains
默认为NO,如果设置为YES,则表示当前设置域名的所有子域名也使用同样的配置

NSExceptionAllowsInsecureHTTPLoads
允许不安全的HTTP请求,这里所谓的不安全,不代表改变了 Transport Layer Security (TLS)或是事HTTPS的请求。所谓的不安全主要是因为使用自签名的证书,没有经过CA认证所以苹果并不知道是不是安全的,如果开发者允许那么苹果也允许加载。
设置为YES,在审核的时候你需要说明原因

NSExceptionMinimumTLSVersion
这个属性用于表面你的HTTPS的TLS版本,因为苹果默认是支持TLS1.2,所以如果你使用了较低的版本你你需要自己指明。
设置为这个键后,在审核的时候你也需要说明原因。

NSExceptionRequiresForwardSecrecy
如果设置为NO,则允许不支持完全前向保密(PFS)的TLS密码(对于指定的域名)。 默认值为YES。关于完全正向保密,可以看这篇文章TLS完美前向保密(perfect forward secrecy)翻译。

NSRequiresCertificateTransparency
如果设置为YES,则对于命名域的服务器证书,需要有效的签名证书透明度的时间戳。 默认值为NO。

以上这么多内容,对于iOS开发者来自说最重要的信息就是有五个键,如果开发者不使用默认值,则需要在审核的时候进行说明。这五个键是

NSAllowsArbitraryLoads
NSAllowsArbitraryLoadsForMedia
NSAllowsArbitraryLoadsInWebContent
NSExceptionAllowsInsecureHTTPLoads
NSExceptionMinimumTLSVersion

这对于嵌入了很多网页或是视频的APP来说感觉会比较麻烦一些。

原文链接:iOS进行HTTPS适配深入理解与实践
官方文档:Preventing Insecure Network Connections
相关文章:关于iOS10中ATS的问题

相关文章

网友评论

      本文标题:iOS进行HTTP/HTTPS适配(ATS)

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