这篇文章相当于是梳理下我自己的思路,主要内容来源于微信号小林coding的图解网络,非常推荐大家去看
这个协议的主要目的是保证http的安全性,SSL/TLS协议可以认作是安全协议/传输协议,具体流程如下
简要版:
1 客户端向服务端索要数字证书,从证书里取出公钥
2 用公钥进行两边的协商加密,生成会话密钥
3 用会话密钥开始加密通信
具体版:
第一步,客户端希望进行安全通信,于是向服务端发送加密通信请求:
1 客户端支持的TLS版本
2 客户端产生的第一个随机数,用于生产会话密钥
3 客户端支持的密码套件列表
第二步,服务端接收到请求,发送回应
1 确认是不是支持客户端的TLS版本,不支持就关掉加密通信,不需要继续聊下去了
2 服务端产生的第二个随机数,用于生产会话密钥
3 从客户端的密码套件列表中选一个用于后续的加密
4 服务器的数字证书
第三步,客户端收到回应,也发送回应
1 校验数字证书,从中取出服务器公钥
2 生产第三个随机数,并且用公钥加密发送给服务端
3 用第三个随机数和前两个随机数加上密码套件进行加密生产会话密钥
4 加密算法开始通知的发送 表明后续开始加密通信了
5 客户端握手结束 同时把上面做的请求与回应做个摘要 发送给服务端检验
第四步,服务端收到回应,发送最后一次回应
1 接受被公钥加密的第三个随机数 用私钥解密 并且加上密码套件进行加密生产会话密钥
2 加密算法开始通知的发送 表明后续开始加密通信了
3 服务端握手结束 同时把上面做的请求与回应做个摘要 发送给客户端检验
值得一提的是数字证书这块:
数字证书是由第三方机构CA(数字证书认证机构),服务器将自己的公钥在CA注册,CA会用自己的私钥给公钥进行数字签名并且颁发数字证书。
而客户端拿到数字证书之后,使用事先置入在浏览器or操作系统的CA的公钥来确认数字证书的真实性并且取出公钥,用于对第三个随机数加密