Http -- 握手连接
1,TLS协议
TLS由几个不同职责的模块组成,常用有记录协议、警报协议、握手协议、变更密码规范协议等。
记录协议(Record Protocol)规定了TLS收发数据的基本单位:记录(record)。像TCP的segment,其他子协议需通过记录协议发出。但多个记录数据可以在一个TCP包里一次性发出,且不需要像TCP那样返回ACK。
警报协议(Alert Protocol)向对方发出警报信息,像是HTTP协议里的状态码。如protocol_version表示不支持旧版本,bad_certificate表示证书有问题,收到警报后可以选继续,也可终止。
握手协议(Handshake Protocol)TLS里最复杂的子协议,浏览器和服务器在握手过程中协商TLS版本号、随机数、密码套件等信息,然后交换证书和密钥参数,最终双方协商得到会话密钥,用于后续的混合加密系统。
变更密码规范协议(Change Cipher Spec Protocol)是一个“通知”,告诉对方,后续的数据都将使用加密保护。之前,数据都是明文的。
2,TLS版本1.2
2.1 TLS握手过程
下图简要描述TLS的握手过程,每一个“框”都是一个记录,多个记录组合成一个TCP包发送。最多经过两次消息往返(4个消息)就可完成握手,然后就可以在安全的通信环境里发送HTTP报文,实现HTTPS协议
2.2 ECDHE握手过程
ECDHE实现密钥交换,不是RSA,所以会在服务器端发出“Server Key Exchange”消息。
客户端可以不用等到服务器发回“Finished”确认握手完毕,立即就发出,HTTP报文,省去了一个消息往返的时间浪费。
称为抢跑(TLS False Start),和“TCP Fast Open”有点像,都不等连接完全建立就提