野火IM ATS处理

1. 1. 什么是ATS

ATS的全称是“App Transport Security”,是苹果在iOS9版本引入新的安全特性,要求所有App内的网络访问必须使用HTTPS进行网络访问,无法访问HTTP的服务。

2. 2. 是否可以关掉ATS

ATS是可以关掉的,可以根据网上教程,很容易地关掉ATS功能,这样应用就可以继续使用HTTP网络。也可以针对特定域名增加例外,只对这个域名关闭ATS。苹果在推出ATS特性时要求,所有应用必须在2017.1.1之前实施HTTPS,但目前已经数次延期,HTTPS的普及工作进展缓慢,短期内难以实现,但为了避免某一天苹果强制要求ATS和提高应用的安全性,我们建议用户还是尽力支持ATS。

3. 3. 野火IM如何处理

以野火IM Demo为例,所有的网络访问分为应用和SDK两部分,以下分别说明

3.1. 3.1 野火IM Demo应用的网络访问分析

野火IM Demo应用是个演示应用,正常情况下客户应该会使用自己的应用(需要把demo应用中获取token的功能迁移到客户自己的应用服务中),也可以直接使用。目前主要的功能只有登录,手机扫码/扫码确认登录等少数几个接口。客户端使用的都是系统提供的高级API,可以支持HTTPS。处理方法就是直接在服务器端支持HTTPS,然后客户端的APP Server Address换成HTTPS的地址即可。

//正式商用时,建议用https,确保token安全
NSString *APP_SERVER_ADDRESS = @"https://wildfirechat.cn:8888";

3.2. 3.2 野火SDK的网络访问分析

野火SDK的网络访问分为四部分,协议栈长链接,协议栈IM短链接,协议栈媒体服务短链接和Kit层网络请求。由于我们协议栈基于微信mars二次开发而来,所以协议栈内的网络请求都依赖于mars提供的机制。以下分别说明:

3.2.1. 3.2.1 协议栈长链接

协议栈长链接使用的是TCP链接,TCP链接不在ATS控制范围之内,可以放心使用。值得注意的是微信mars由于自己特殊的处理方式,是不支持tls的,因此微信后来研发了mmtls来增强安全性。我们没有跟随微信这套协议,而是自己研发了加密方案,使用aes加密,同样安全可靠。

3.2.2. 3.2.2 协议栈IM短链接

同样是TCP的链接,但mars模拟实现了http的请求,不经过系统的高级API,因此IM短链接同样不在ATS控制范围之内,可以放心使用。这个链接是协议栈与IM服务直接建立的短链接。同样使用了我们自研的加密方案。

3.2.3. 3.2.3 协议栈媒体服务短链接

同样是TCP的链接,是mars模拟实现的http请求,不经过系统的高级API,因此媒体服务短链接同样不在ATS控制范围之内。由于媒体消息要上传到媒体服务,需要在媒体服务上实现我们的加密方案。因此社区版使用的第三方媒体服务无法添加对应功能,在社区版上只能使用的是没有加密的http请求。专业版提供自研的媒体服务,使用的是加密方案。

3.2.4. 3.2.4 Kit层网络请求

Kit层在显示媒体消息时,需要访问媒体链接,使用的系统高级API,因此受到ATS的控制。媒体链接是上传生成时生成的,如果是专业版,可以为文件存储服务配置HTTPS,可以通过IM服务配置直接使用HTTPS;如果使用是社区版,可以在第三方服务提供商哪里提供HTTPS支持,然后在IM服务里进行配置。如果使用内置文件存储,请使用HTTP,然后在ATS中加上例外。

专业版配置方法:

media.bucket_XXX_name media
media.bucket_XXX_domain https://cdn.wildfirechat.cn/media ## 这里配置为https的schema

社区版配置方法:

qiniu.bucket_XXX_name media
qiniu.bucket_XXX_domain https://pghnpyzos.bkt.clouddn.com ## 这里配置为https的schema

3.3. 3.3 野火IM ATS处理

综上所述:

  1. 野火IM的App应用应该在App服务中增加HTTPS支持,然后在客户端改完HTTPS的服务器地址。

  2. 在SDK层,如果使用社区版,如果使用第三方媒体服务,需要在第三方媒体服务处增加HTTPS的支持,然后在IM服务中进行配置。如果使用内置文件存储,请在ATS中增加例外申请。如果使用专业版请按照专业版说明操作。

2018 © wildfirechat.cn 京ICP备18060403号-1 all right reserved,powered by Gitbook该文件修订时间: 2019-11-13 20:20:05

results matching ""

    No results matching ""