1.对称加密:所有客户端和服务端用同一个密钥,如果秘钥被获取,所有消息如同明文;如果单对客户端和服务端用一个密钥,服务端要维护大量的密钥,内存压力大。
2.非对称加密:服务端提供私钥和公钥的秘钥对,私钥自己保留,公钥发送给客户端;客户端就算私钥被别人偷走,也无法破译信息;但是非对称加密比较慢。
3.非对称加密和对称加密:服务度提供私钥和公钥,公钥发给客户端;客户端收到公钥后,随机生成对称加密秘钥,并发给服务端保留。
4.第三方劫持问题:服务端发给客户端的公钥被第三方劫持,第三方产生新的秘钥对,将公钥发送给客户端;客户端收到公钥后,生成对称秘钥发给服务端,被第三方劫持;第三方用私钥解密,发给服务端。这个时候第三方虽然没有服务端的私钥,但能解析出来服务端的数据,双方的通信数据都要被第三方发现。这里需要客户端知道自己通信的对象时服务端,而不是第三方,这就引出了CA机构。
5.数字证书:服务端向CA机构,提供公钥、网址、过期时间等信息,CA机构制作证书给服务端。服务端在收到客户端的请求时,携带证书一起发过去。
6.制作数字证书:先把数据hash,得到散列值;通过CA机构的私钥进行加密得到数字签名;把数据和签名一起作为数字证书。
7.验证数字证书:客户端收到服务端发来的数字证书,先用浏览器存的CA公钥解析数据,得到数据和签名;把数据hash得到散列值;把数字签名用CA公钥解密得到散列值;两者比较看看是否一致。
8.CA机构解决了两个问题,一个是通过签名保证数据没有修改。一个是数据没有掉包,证书里面有网站的信息。
9.最终的过程:
1.客户端ClientHello,选择SSL版本、加密算法、随机数A
2.服务端ServerHello,选择SSL版本、加密算法、证书、随机数B
3.客户端检查证书,使用特定的方法生成pre_master key,通过公钥加密发到服务端
4.服务端通过私钥解密拿到pre_master key,最终有三个随机数组合成最终的对称秘钥。