网络基础--HTTPS中的SSL/TLS协议

3,411 阅读3分钟

HTTPS其实就是在HTTP的基础上加入了SSL/TLS协议,从它的名字上也看的出来,所以理解了SSL/TLS,也就理解了HTTPS的核心

SSL/TLS协议

SSL/TLS(Secure Socket Layer,安全套接字层)位于应用层和TCP/IP层之间,SSL是最开始的名称,后来一个组织收购了该协议

SSL/TLS是一套复杂的保证通信安全的协议。用Http协议通信的双方只修要建立TCP链接后就可以直接通信,而应用了SSL/TLS协议的通信双方还需要先建立SSL链接,再进行通信,如下所示

TCL链接-->SSL链接-->通信

SSL/TLS的大致工作流程是这样的:

客户端向服务端索要公钥并验证 双方协商生成回话秘钥(session Id) 通过会话密钥进行通信

其中前2个步骤称为握手阶段(handsshake),是整个https通信过程中用到非对称加密的阶段,后续的通信都是用会话密钥进行对称加密来完成的。

因为非对称加密使用了复杂的数学原理,如果每次通信都用非对称加密来加密通信内容的话,会严重影响网络通信的性能。并且SSL有一套复杂的设计来保证生成的会话密钥只有建立了SSL链接的通信双方才知道,所以后续通信用会话密钥进行对称加密通信其实也是安全的

握手阶段(handsshake)的详细过程

握手阶段一共有4次通信,且都是明文的

1.客户端向服务器发起加密通信的请求,这次请求称为ClientHello,发送的内容包括

一个随机数x,用来后续生产会话密钥 客户端支持的加密算法 客户端支持的SSL协议版本 支持的压缩方式

2.服务端收到请求后,响应客户端请求,这次请求称为ServerHello,返回如下数据

确认支持的SSL协议版本 确认加密算法 服务端公钥,为了数据安全,会放到证书中 一个随机数y,用来后续生产会话密钥

3.客户端收到服务器响应后,首先验证证书的有效性(即是否认证机构颁发,是否在有效期内),验证通过后,会从证书中取出公钥,并向服务端发送如下数据

一个随机数Z,用来后续生产会话密钥,注意这个随机数会用公钥加密 一个通知,告诉服务端,后续通信都用商定的加密方式和会话密钥进行 一个通知,告诉服务端,客户端握手结束

这个过程完成后,客户端就拥有了三个随机数,然后就用这三个数配合非对称加密算法生成一个 会话密钥

4.服务端收到最后一个随机数后,用私钥解密后就拥有了跟客户端一样的三个随机数,然后生成跟客户端相同的会话密钥,并做最后的回应

一个通知,告诉客户端,后续通信都用商定的加密方式和会话密钥进行 一个通知,告诉客户端,服务端端握手结束

上述4次通信完成后,客户端和服务端各自拥有了一个相同的会话密钥,且不再需要传输告知对象,所以后续的通信就可以用这个会话密钥进行对称加密来进行了。

我画了一张图,可以加深理解