1.HTTPS协议原理
https是对应用层http多加了一层软件层(加密层),加入了加密和解密(对正文)
概念:
- 加密就是把 明文 (要传输的信息)进行一系列变换, 生成 密文 .
- 解密就是把 密文 再进行一系列变换, 还原成 明文 .
- 在这个加密和解密的过程中, 往往需要一个或者多个中间的数据, 辅助进行这个过程, 这样的数据称为 密钥
运营商劫持
实例:下载一个天天动听软件,点击下载后,下载链接变成了下载qq浏览器的链接
由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器, 交换机等), 那么运营商的网络设备就可以解析出你传输的数据内容, 并进行篡改.
为什么要对http请求进行加密?因为http的内容是明文传输的,明文数据会经过路由器、wifi热点、通信服务运营商、代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是 中间人攻击 ,所以我们才需要对信息进行加密。
常见加密方式
对称加密:单密钥的加密方法,同一个密钥可以进行加密和解密
特点:算法公开,计算量小,加密速度快
非对称加密:两个密钥用来进行加密和解密,分为公开密钥和私有密钥
常见算法:RSA,DSA,ECDSA、
特点:算法强度复杂,安全性依赖算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密速度快(慢)
公钥和私钥是配对的,最大缺点就是 运算速度非常慢 ,比对称加密慢很多。
两种方式:
1)公钥加密,私钥解密(只有私钥能解,解密的人少,用这种多)
2)公钥解密,私钥加密(私钥才能加密)
数据指纹(数据摘要),基本原理:利用单向散列函数(Hash函数)对信息进行运算,生成一串固定长度的数字摘要(数据指纹并不是一种加密机制(加密需要包含加密和解密),但可以用来判断数据有没有被篡改)
摘要常见算法:MD5,SHAI,SHA256,SHA512,算法把无限的映射成有限,因此可能会有碰撞(概率极低)
摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比。
文章(文本)和二进制都可以使用hash摘要 -> 生成固定长度的字符串
场景1:服务器放在公网上,数据库主机放在服务器的子网中,就可以提高查询数据库的安全性;但如何保证数据库内部的数据安全性?账号和密码这种可以存其对应的数据摘要。
场景2:客户端张三向网盘传一部电影A,他上传到网盘上了。后来李四也传电影A,李四立马就传完了(秒传)。分析:第一次张三传的时候,网盘服务端 将电影A在本地用hash算法形成了数据摘要,保存了下来。第二次李四传的时候,网盘客户端 把李四要传的电影A用同样hash算法形成摘要,传递摘要,网盘服务端进行搜索,找到了,就说明历史文件存在,关联一下就行了(秒传)。
加密方案推导
方案一:只使用对称加密
缺陷:首次的时候,无法同步双方的密钥X(无法对密钥做加密,鸡生蛋,蛋生鸡)
方案二:只使用非对称加密(只一边创建公钥私钥)
缺陷:
1)看起来只能保证一边的安全性,即拿着公钥加密一端向持有私钥一端发(实则一边都保证不了)
2)运算速度非常慢
方案三:双方都使用非对称加密
缺陷:1)双方都用对方的公钥进行加密,双方的私钥进行解密(看起来两边通都安全,实则不安全)
2)运算速度非常慢
方案四:非对称加密+对称加密
过程:客户端向服务端发起请求,服务端创建公钥S,私钥S',应答把公钥S发给客户端。客户端创建对称密钥X,用公钥S给对称密钥X加密,发送给服务端。服务端收到数据,用私钥S'解密得到对称密钥X后,返回应答。从此往后,客户端和服务端都用这个对称密钥X进行通信(解决了通信的效率问题)
缺陷:还是和方案三一样不安全
为什么方案三和方案四不安全?
中间人攻击情况分析:
前提:中间人在一开始客户端和服务器还没通讯时就已经在了
过程:
1)客户端向服务端发送请求,服务端创建公钥S,私钥S',返回公钥S。
2)这时服务端公钥S被中间人拦下来了,中间人保存公钥S,中间人创建自己公钥M,私钥M',将自己的公钥M发给客户端。
3)客户端这时就误以为它拿到了服务端的公钥,实则是中间人的,创建对称密钥X,用中间人公钥M加密X,发送给服务端4)发送给服务端过程中被中间人拦下,中间人用私钥M',解析得到客户端对称密钥X。它再用服务端公钥S给对称密钥X加密,发给服务端,服务端用S'解析得到X。
这时,中间人就完美隐身了,客户端和服务端都是通过对称密钥X加密解密的,中间人有X,所有的数据中间人都能知道。
CA认证(解决客户端无法识别公钥是否合法)
理解数据签名
签名过程:数据通过使用hash函数得到一个散列值(数据摘要),用非对称私钥进行加密得到签名。数据+签名打包起来发送,打包后叫做证书。
验证过程:证书拿到后,进行拆分,数据部分使用与签名过程同样的hash函数得到数据摘要,非对称公钥对签名部分进行解密得到数据摘要,对比两个数据摘要,如果一样验证成功,可以信任;反之不可信任,丢弃。
细节:
谁来签名?CA机构,CA机构拥有私钥,有签名的权利。
验证的公钥哪来的?浏览器等都要内置CA机构的公钥对签名进行解密
因为世界上只有CA机构具有私钥,那么只有CA机构有签名的权利(大家都认的公钥进行解密,那么只有私钥持有者具备签名权利)
解决客户端无法识别公钥的合法性:
client第一次请求,返回结果,得到的是一个证书(包含公钥)。
证书:一份明文数据+携带了签名
方案五:对称加密+非对称加密+证书认证
服务端申请证书,CA机构根据提交的.csr文件形成数据,数据加密后形成数据摘要,CA用私钥进行加密得到签名,签名和数据一起打包(证书)发送给服务端,服务端申请证书成功。
服务端使用https协议,客户端发请求时,服务端发送证书。客户端收到证书,用CA公钥进行解密然后验证服务端公钥的合法性,合法则得到服务端公钥。后续正常按对称+非堆成的方式走(双非一对,CA非对称,服务端非对称,服务端和客户端对称)
如果这个过程中有中间人怎么办?
情况分析:
1)对证书进行局部篡改1.对签名篡改:签名篡改了,客户端用公钥进行解密会失败,即使没有失败,解密出来的数据摘要验证也会失败。
2.对数据进行篡改:客户端用公钥解密后,对比数据摘要验证不通过
2)对证书进行整体篡改
整体篡改,即直接换一个完整证书。如果证书合法,验证不会通过,因为证书上带了域名,可以根据域名的差异进行识别;如果证书不合法,验证也会不通过,因为验证时数据摘要会不同。
即:证书无法被局部篡改 或 整体篡改
总结:加了证书和验证这个过程,客户端就可以确定服务端公钥合法性了,后续就可以安全通信了。
细节点:
为什么摘要内容在网络传输的时候一定要加密形成签名?
如果黑客把 数据和摘要内容 一起篡改了,数据的哈希值还是摘要内容,客户端分辨不出来。
为什么签名不直接加密,而是要先hash形成摘要?
缩小签名密文的长度,加快数字签名的验证签名的运算速度。
如何成为中间人
ARP欺骗:在局域网中,hacker经过收到ARP Request广播包,能够偷听到其它节点的 (IP, MAC)地址。例,黑客收到两个主机A, B的地址,告诉B (受害者) ,自己是A,使得B在发送给A 的数据包都被黑客截取
ICMP攻击:由于ICMP协议中有重定向的报文类型,那么我们就可以伪造一个ICMP信息然后发送给局域网中的客户端,并伪装自己是一个更好的路由通路。从而导致目标所有的上网流量都会发送到我们指定的接口上,达到和ARP欺骗同样的效果
假wifi && 假网站等