不加密的HTTP面临的风险
HTTP信息明文传播,带来了三大风险。
- 窃听风险(eavesdropping):第三方可以获知通信内容。
- 篡改风险(tampering):第三方可以修改通信内容。
- 冒充风险(pretending):第三方可以冒充他人身份参与通信。
HTTPS通信的基本过程
- 客户端向服务器端索要并验证公钥。
- 双方协商生成 session密钥。
- 双方采用session密钥进行加密通信,就是普通HTTP协议之上的加密通信,通信内容通过session密钥加密。
第1、2步称为TLS握手。
TLS 握手过程
客户端请求 ClientHello
在这一步,客户端主要向服务器提供以下信息。
(1) 支持的协议版本,比如TLS 1.0版。
(2) 一个客户端生成的随机数,稍后用于生成session密钥。
(3) 支持的加密方法,比如RSA公钥加密。
(4) 支持的压缩方法。服务器回应 SeverHello
服务器的回应包含以下内容。
(1) 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
(2) 一个服务器生成的随机数,稍后用于生成session密钥。
(3) 确认使用的加密方法,比如RSA公钥加密。
(4) 服务器证书。
除了上面这些信息,如果服务器需要确认客户端的身份,就会再包含一项请求,要求客户端提供"客户端证书"。比如,金融机构往往只允许认证客户连入自己的网络,就会向正式客户提供USB密钥,里面就包含了一张客户端证书。
- 客户端响应
(1) 一个随机数。该随机数用服务器公钥加密,防止被窃听。
(2) 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
(3) 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。
非对称加密的缺点 / 为什么要使用对称秘钥
公钥加密计算量太大。造成CPU占用高、耗电、解密时间长的问题。
如何保证公钥不被篡改?
使用数字证书机制。将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。