一、http 出现的安全问题
http 在通信过程中存在两个安全性问题
- 通信使用明文(不加密),内容可能被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
二、https 保证安全的手段
https 并不是一个新的协议, 而是一个加强版的 http 。其原理是在 http 和TCP
之间建立了一个中间层,当 http 和TCP
通信时并不是像以前那样直接通信,直接经过了一个中间层进行加密,将加密后的数据包传给TCP
, 响应的,TCP
必须将数据包解密,才能传给上面的 http 。这个中间层也叫安全层
。安全层
的核心就是对数据加解密
。
主要依赖的手段
- 对称加密:采用协商的密钥对数据加密
- 非对称加密:实现身份认证和密钥协商
- 摘要算法:验证信息的完整性
- 数字签名:身份验证
三、对称加密
对称加密指的是加密和解密使用的秘钥都是同一个,是对称的。只要保证了密钥的安全,那整个通信过程就可以说具有了机密性
生成密钥过程:
- 首先,客户端会给服务器发送一个随机数
client_random
和一个加密的方法列表。 - 服务器接收后给客户端返回另一个随机数
server_random
和加密方法。 - 现在,两者拥有三样相同的凭证:
client_random
、server_random
和加密方法。 - 接着用这个加密方法将两个随机数混合起来生成密钥,这个密钥就是浏览器和服务端通信的
暗号
实现过程:
在每次发送真实数据之前,服务器先生成一把密钥,然后先把密钥传输给客户端。之后服务器给客户端发送真实数据的时候,会用这把密钥对数据进行加密,客户端收到加密数据之后,用刚才收到的密钥进行解密。
优缺点:
- 优点:对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高
- 缺点:对称加密,密钥管理的安全性很低,因为加密和解密都使用同一个密钥,在密钥的发送过程中,密钥可能被第三方截取,导致第三方也可以破解密文
四、非对称加密
非对称加密,存在两个秘钥,一个叫公钥,一个叫私钥。两个秘钥是不同的,公钥可以公开给任何人使用,私钥则需要保密,公钥主要是用来加密的,私钥则是用来解密
公钥与私钥是一对。传输双方均有自己的一对密钥(也就是双方每方均有:公、私密钥一把,双方加起来共4把)
实现过程:
- 客户端要向服务器发送信息,客户端和服务器都要产生一对用于加密和解密的公钥和私钥
- 客户端的私钥保密,客户端的公钥告诉服务器;服务器的私钥保密,服务器的公钥告诉客户端
- 客户端要给服务器发送信息时,客户端用服务器的公钥加密信息,因为服务器的公钥是公开的,客户端可以得到
- 客户端将这个消息发给服务器(已经用服务器的公钥加密消息)
- 服务器收到这个消息后,服务器用自己的私钥解密客户端的消息。其他所有收到这个报文的人都无法解密,因为只有服务器才有服务器的私钥
优缺点:
- 非对称密钥的算法强度复杂(是优点也是缺点),安全性依赖于算法与密钥
- 优点:安全性较高,比对称密钥安全性高很多。 非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要
- 缺点:由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快
五、混合加密
- 在 https 通信过程中,采用的是对称加密+非对称加密,也就是混合加密,因为只用对称加密的话,会有安全隐患,只用非对称加密,对性能消耗又太大
实现过程:
- 浏览器向服务器发送
client_random
和加密方法列表 - 服务器接收到,返回
server_random
、加密方法以及公钥 - 浏览器接收,接着生成另一个随机数
pre_random
, 并且用公钥加密,传给服务器。(敲黑板!重点操作!) - 服务器用公钥解密这个被加密后的
pre_random
现在浏览器和服务器有三样相同的凭证:client_random
、server_random
和pre_random
。然后两者用相同的加密方法混合这三个随机数,生成最终的密钥
即使被第三方截取到密钥也没有用,因为密钥已经被公钥给加密过了,没有私钥去解密,第三方也不能获取到秘文的内容