****.项目中网络层如何做安全处理?
1.判断API的调用请求是否来自于经过授权的APP。如若不是则拒绝请求访问
2.在数据请求的过程中进行URL加密处理:防止反编译,接口信息被静态分析。
3.数据传输加密:对客户端传输数据提供有效的加密方案,以防止网络接口的拦截。
如果可以尽量使用HTTPS,可以有效的避免接口数据在传输中被攻击。
最常见的两种网络协议
Http(HyperText Transfer Protocol)又称为超文本传输协议,是互联网上应用最为广泛的一种网络协议。Http是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求来获得数据。
HttpS可以理解为加密后的http协议,现在苹果正在大力限制开发者使用http协议,而强制要求使用https协议,不过因为https的使用需要每年支付一定的费用,所以目前大多数中国的互联网公司还以使用http为主。
HTTPS和HTTP的区别主要为以下四点:
一、https协议需要到ca申请证书,一般免费证书很少,需要交费。
二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
为什么选择http协议
简单快速,因为Http协议简单,所以HTTP服务器的程序规模小,因而通信速度很快
灵活
HTTP允许传输各种各样的数据
HTTP的基本通信过程(两大步骤)
请求:客户端向服务器索要数据
响应:服务器返回客户端相应的数据
Http最常用的请求方法
GET请求
从指定的服务器中获取数据
特点:
GET请求能够被缓存
GET请求会保存在浏览器的浏览记录中
以GET请求的URL能够保存为浏览器书签
GET请求有长度限制
GET请求不安全
POST请求
提交数据给指定的服务器处理
特点
POST请求不能被缓存下来
POST请求不会保存在浏览器浏览记录中
以POST请求的URL无法保存为浏览器书签
POST请求没有长度限制
相对于GET请求来说, POST请求更加安全
选择GET和POST的建议
如果需要大量数据,比如文件上传,只能用POST请求;
GET的安全性比POST要差些,如果包含机密\敏感信息,建议用POST
如果仅仅是索要数据,建议使用GET
如果是增加、修改、删除数据,建议使用POST
Http网络请求的结构
请求头
客户端发出的网络请求的“头”部分
请求头一般包含一些简单的配置信息,例如客户端信息,是GET请求还是POST请求等等。
请求体
客户端发出的网络请求的“身体”部分
具体要请求的内容的正文,以及一些提交给服务器的保密内容,例如用户名和密码
响应头
服务器返回的数据的配置信息,例如数据类型,响应结果,响应码等零碎的信息
在代码中一般表达为response这个变量
响应体
服务器返回的数据的具体内容(一般由服务器分段返回)
在代码中一般表达为data这个变量
HTTPS底层原理(SSL握手详解)
HTTP协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险,而协议TLS/SSL具有身份验证、信息加密和完整性校验的功能,可以避免此类问题发生。
HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。HTTPS主要作用是:
1.对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全
2.对网站服务器进行真实身份认证
HTTPS协议的主要功能基本都依赖于TLS/SSL协议,TLS/SSL的功能实现主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。
结合三类算法的特点,TLS的基本工作方式是,客户端使用非对称加密与服务器进行通信,实现身份验证并协商对称加密使用的密钥, 然后对称加密算法采用协商密钥对信息以及信息摘要进行加密通信,不同的节点之间采用的对称密钥不同,从而可以保证信息只能通信双方获取。
SSL握手
首先明白网络各层的协议和作用,可以参考文章头部的链接。SSL握手是发生在TCP三次握手之后的
第一阶段:ClientHello
客户端发起请求,以明文传输请求信息,包含版本信息,加密套件候选列表,压缩算法候选列表,随机数random_C,扩展字段等信息。
第二阶段:ServerHello-ServerHelloDone
如上图可以看出这个阶段包含4个过程( 有的服务器是单条发送,有的是合并一起发送)。服务端返回协商的信息结果,包括选择使用的协议版本,选择的加密套件,选择的压缩算法、随机数random_S等,其中随机数用于后续的密钥协商。服务器也会配置并返回对应的证书链Certificate,用于身份验证与密钥交换。然后会发送ServerHelloDone信息用于通知服务器信息发送结束。
这里1和2的随机数现在客户端和服务端都有了,后续会用到
第三阶段:证书校验
客户端这边还需要对服务器返回的证书进行校验。只有证书验证通过后,才能进行后续的通信。(具体分析可参看后续的iOS证书验证过程)
第四阶段:ClientKeyExchange-Finished
服务器返回的证书验证合法后, 客户端计算产生随机数字Pre-master Key(预设主密钥),并用server证书中公钥加密,发送给服务器。同时客户端会根据已有的三个随机数根据相应的生成协商密钥(主密钥+两个随机数通过复杂算法生成真正的传输密钥)。客户端会通知服务器后续的通信都采用协商的通信密钥和加密算法进行加密通信。然后客户端发送Finished消息用于通知客户端信息发送结束。
第五阶段:服务器端生成协商密钥
服务器也会根据已有的三个随机数使用相应的算法生成协商密钥,会通知客户端后续的通信都采用协商的通信密钥和加密算法进行加密通信。然后发送Finished消息用于通知服务器信息发送结束。
第六阶段:握手结束
在握手阶段结束后,客户端和服务器数据传输开始使用协商密钥进行加密通信。
iOS应用安全之HTTP/HTTPS详解(AFNetworking配套策略) - Deft_MKJing的博客 - CSDN博客