Android 网络和安全机制(七)

1、网络框架对比和源码分析

  关于网络框架,一类是基础的网络框架,如HttpUrlConnection, HttpClient, OkHttp;另一类是对其进行封装并组合其他技术一起使用,如VolleyXutilsRetrofitOkGoMvpArms等。
  在网络框架中,很多人总是喜欢乱做对比,比如拿Retrofit和OkHttp做对比,其实他们不在一个层级,不能说好用不好用来做对比
  底层库中,HttpUrlConnection, HttpClient是比较老的,现在基本都推荐用OkHttp做网络请求的底层库,在4.4以上新的Android 系统版本中也是默认使用的OkHttp
  对于上层框架的使用,我觉得是仁者见仁,智者见智,都有自己的特点,目前这几个上层框架底层也基本上是OkHttp了,其中,Volley是google官方2014年推出的,适用于高并发、数据量少的场景;Xutils是一个国人写的综合库,包括网络加载、图片、数据库等内容;Retrofit是最主流的square开发的高效网络库,Restful API;OkGo是一个相比Retrofit好上手一点的库,它的很多配置都已经搞好了,和Retrofit一样支持https本地认证、双向认证; MvpArms不仅仅是一个网络加载库了,是一种流行的架构模式:MVP+OkHttp+Retrofit+Dagger2+Rxjava+RxLifeCycle的MVP开发框架

2、自己去设计网络请求框架,怎么做?

  学习成熟网络框架OKHTTP的设计思维,如果要实现restful风格的话,参考retrofit的封装格式;
一般而言,我们需要考虑的方面有:
1、构建我们的请求Request:包含url,请求方法请求参数请求头编码请求体编码格式超时时间代理端口代理主机等。
2、由Dispatcher分发器并行分发我们的Request请求,这里的分发器实际是一个线程池。
3、准备开始连接服务器,连接http获取https服务器地址,https需要考虑自签名证书、双向SSL验证等安全问题。
4、Response得到服务器的回调,考虑输入流关闭的问题,大文件传输的问题,线程切换问题,缓存问题。

3、okhttp源码

Okhttp3从使用到源码

4、网络请求缓存处理,okhttp如何处理网络缓存的
5、从网络加载一个10M的图片,说下注意事项
6、TCP的3次握手和四次挥手
7、TCP与UDP的区别
8、TCP与UDP的应用
9、HTTP协议

  见12问

10、HTTP1.0与2.0的区别

  见12问

11、HTTP报文结构

  见12问

12、HTTP与HTTPS的区别以及如何实现安全性

两者的区别:
  1、HTTP是明文传输,传输内容容易被篡改或者窃取;HTTPS是密文传输,https 相当于包装了SSL\TLS协议的HTTP。
  2、https在网络请求效率上会低于http,因为采用了不同的请求协议以及更复杂的安全验证操作。
  3、https需要申请CA证书,用于验证公钥这个证书收费,http不用。

如何实现安全?
  主要是通过非对称加密+对称加密+CA证书来保证请求安全的。
  因为http协议是基于TCP/IP协议进行传输的,内容填写了相应的目标地址,端口,内容等信息,这些信息在途径中间路由时是可以被第三方窥视的,这种问题通常是通过“加密”来解决的。
  接下来让我们分析一下http以及https的握手流程,这样能够更清楚的理解https为何是安全的

http三次握手.png

第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
中间人可以抓取我们三次握手的数据包来进行分析,因此这种方式存在很大的安全隐患。
  HTTPSHTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。如下图:
https握手.png

1. 客户端发起HTTPS请求
2. 服务端的配置
  采用HTTPS协议的服务器必须要有一套数字证书,可以是自己制作或者CA证书。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用CA证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。公钥给别人加密使用,私钥给自己解密使用。
3. 传送证书
  这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构过期时间等。
4. 客户端解析证书
  这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值,然后用证书对该随机值进行加密。
5. 传送加密信息
  这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
6. 服务端解密信息
  服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称解密。所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。
7. 传输加密后的信息
  这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。
8. 客户端解密信息
  客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容。

13、如何验证证书的合法性?

  上题中的第四部就是验证证书的合法性的,我们为何要验证证书的合法性呢,因为我们访问的服务器有可能是中间人代理服务器,并不是真正的服务器。我们客户端持有真正的公钥,如果不是服务器真实证书的签名则会解密失败,如果是真签名则会生成一个随机对称加密密钥,然后对密钥加密后传到服务端。后面的信息内容都是由这个中间人并不知道的随机对称加密密钥加密后进行传输的

14、https中哪里用了对称加密,哪里用了非对称加密,对加密算法(如RSA)等是否有了解?

  首先我们必须知道为啥需要有对称加密和非对称加密,因为两者各有优缺点,对称加密传输速度快,但对称加密算法本生容易泄露,必须保证只有服务器和客户端知道这个算法;这也是非对称算法出现的原因,就是为了加密对称算法用的,非对称算法安全,但效率低,时间代价是对称的100倍级别 ,其中,对称加密算法有:AES、DES 非对称加密:RSA、DSA 散列算法 :MD5、SHA1 等。算法选择(从性能和安全性综合)
对称加密: AES(128位),
非对称加密: ECC(160位)或RSA(1024),
消息摘要: MD5
数字签名:DSA

15、client如何确定自己发送的消息被server收到?

  当client收到服务器返回的二次握手信息,包含client发送的SYN+服务器确认的SYN

16、谈谈你对WebSocket的理解

  WebSocket是应用层html5出的一种协议,相比较http而言优势是支持长连接,Websocket只需要一次HTTP握手,整个通讯过程是建立在一次连接/状态中,也就避免了HTTP的非状态性,服务端会一直知道你的信息,直到你关闭请求;同时WebSocket协议解决了服务器与客户端全双工通信的问题。
 注:什么是单工、半双工、全工通信?
信息只能单向传送为单工;
信息能双向传送但不能同时双向传送称为半双工;
信息能够同时双向传送则称为全双工。

17、WebSocket与socket的区别

网络协议模型.png

如上图所示socket处于抽象层,是http的底层协议;而WebSocket是类似于http的应用层协议,WebSocket是应用层html5出的一种协议。
HTTP 协议有一个缺陷:通信只能由客户端发起,做不到服务器主动向客户端推送信息。
WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。
它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。

18、谈谈你对安卓签名的理解。

Android 签名是为了保证应用发布者是本人,大致有几种,以前Eclipse 用KeyStore进行签名;现在android studio开发app采用JKS进行签名;android系统签名采用的pem/pk8。
每个android app都会有自己的签名,如果我们没有指定签名,编译时会默认用SDK目录下的debug签名文件。
常见的签名jks在android studio中有两种方式给app签名,一种是build时generate signed apk ;一种是在build文件中配置签名,如下:

signingConfigs {
        debug {
        }
        release {
            keyAlias 'xxx'
            keyPassword 'xxx'
            storeFile file('../xxx.jks')
            storePassword 'xxx'
        }
    }
release {
            buildConfigField "boolean", "IS_DEBUG", "false"
            minifyEnabled true    // 是否混淆
            shrinkResources true   //是否清理无用资源
            zipAlignEnabled true   //是否启用zipAlign压缩
            signingConfig signingConfigs.release
}
19、请解释安卓为啥要加签名机制?

1、应用程序升级,验证app的唯一性,包名和签名都一致才允许升级。
2、应用程序模块化,可以模块化部署多个应用到一个进程,只要他们的签名一样。
3、代码或者数据共享,同一个签名有相同的权限,可以共享数据和代码。

20、视频加密传输

  要处理这个问题首先我们要知道为何视频需要进行加密?因为 盗链盗播 的存在,让版权价值大打折扣。用户通过一次付费行为,就可以拿到付费视频的播放URL,将播放URL进行二次分发,这种行为叫做盗链;用户直接将视频下载到本地,然后再进行二次上传分发,这种行为叫做盗播
常用的视频加密技术有:
  1、分片加密
基于苹果公司的HLS协议,服务器需要切片出TS文件并进行AES加密,生成m3u8索引文件,然后客户端下载到本地给播放器播放。
  2、文件的前中后加密
这三段加密都涉及到文件的读取,尤其对于大文件的读取,我们使用java的RandomAccessFile(随机访问文件)
这个类来进行文件的加密和解密.

21、App 是如何沙箱化,为什么要这么做?

  沙箱是为app提供隔离环境的一种安全机制,严格控制执行的程序所访问的资源,以确保系统的安全,让app在独立的进程中执行任务,让其不能访问外部进程的资源,这样一个应用出问题了,其他的应用进程能够保证不被影响。

22、权限管理系统(底层的权限是如何进行 grant 的)?

  应用程序在应用层的AndroidManifest.xml中所申请的权限将会在Android系统启动时,经过解析后,逐步映射到内核层的组ID用户ID,最终由内核层的setgid()setuid()函数设置后才能执行;在进行权限申请时,6.0以上需要动态代码申请,6.0以下直接在AndroidManifest.xml注册即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容