以访问www.sina.com.cn为例,抓包解析TLS1.2到底是如何通信的;

wireshark抓包内容及简单说明:

10	0.042384	192.168.10.97	101.71.100.123	TLSv1.2	264	Client Hello
12	0.059895	101.71.100.123	192.168.10.97	TLSv1.2	1506	Server Hello
16	0.060412	101.71.100.123	192.168.10.97	TLSv1.2	1386	Certificate, Server Key Exchange, Server Hello Done
18	0.063282	192.168.10.97	101.71.100.123	TLSv1.2	180	Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
19	0.073250	101.71.100.123	192.168.10.97	TLSv1.2	312	New Session Ticket, Change Cipher Spec, Encrypted Handshake Message
20	0.073250	101.71.100.123	192.168.10.97	TLSv1.2	123	Application Data

image.png

  • Client Hello:客户端向服务端打招呼;携带各种信息供服务端选择;

  • Server Hello:服务端回应客户客户端的招呼信息;结合客户端、服务端的信息,选择合适的加密套件;

  • Certificate:服务端向客户端发送自己的数字证书(此证书包含服务端的公钥),以实现客户端验证身份;

  • Server Key Exchange:服务端向客户端发送基于选择的加密套件生成的公钥(此公钥是经过私钥签名认证的);

  • Server Hello Done:服务端向客户端表示响应结束;

  • Client Key Exchange:客户端向服务端发送经过公钥加密的Pre-Master;

  • Change Cipher Spec:告知服务端/客户端,以后的通信都是加密的;

  • Encrypted Handshake Message:基于协商生成的密钥,加密握手信息让服务端/客户端进行认证;双方认证无误开始通信;

  • New Session Ticket:是优先SSL连接的一种方法,此种不做特别说明

身份验证过程:

  • 权威ca会用自己的私钥加密服务器的公钥;

  • 当客户端访问服务器的时候,服务端会向客户端发送自己的证书,由内置在浏览器的ca公钥进行解密,得到服务端的公钥;

  • 由此验证公钥,私钥,从而达到验证身份的目的;

数字证书作用参考:https://www.cnblogs.com/yaowen/p/8509573.html

客户端Client Hello阶段:

作用:客户端向服务端发送建立连接请求;

此时,客户端会携带支持的版本号、支持的加密套件、客户端随机数(用于协商对称加密的密钥)、支持的HTTP协议

image.png

服务端Server Hello阶段:

作用:根据客户端所携带的内容,确定建立连接版本、加密套件,生成服务端随机数(用于协商对称加密的密钥)

如下图,可以看到确定的加密套件是:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

image.png

服务端Certificate, Server Key Exchange, Server Hello Done阶段:

Certificate:向客户端发送由权威ca签发的证书,以验证身份;

    image.png

Server Key Exchange:基于Server Hello阶段选择的ECDHE交换密钥算法,发送它生成的椭圆曲线的公钥(经过签名的)

    image.png

Server Hello Done:服务端结束打招呼阶段

协商对称加密密钥的过程说明:

  • ECDHE算法会根据客户端的随机数、服务端的随机数、Pre-Master(也是一个随机数)生成对称加密的密钥;

  • Pre-Master(此随机数非常重要)由ECDHE根据Client Random、Server Random生成;

  • 到此,客户端/服务端都知道了客户端的随机数、服务端的随机数、Pre-Master;

  • 由此客户端/服务端生成的对称加密密钥是一致的,但还是会发送一条由此密钥加密的消息让对方进行验证;

客户端Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message阶段:

Client Key Exchange:基于协商选择的ECDHE交换密钥算法,发送它生成的椭圆曲线的公钥;

    image.png

Change Cipher Spec:变更密码规范协议,它非常简单,就是一条通知消息,告知对方以后的通信都是加密的;

Enctypted Handshare Message:生成对称加密密钥之后,发送一条加密的数据,让服务端解密验证;

服务端New Session Ticket, Change Cipher Spec, Encrypted Handshake Message阶段:

New Session Ticket:TLS建立连接的优化方法,此处不说;

Change Cipher Spec:告诉客户端以后的通信是加密的;

Enctypted Handshare Message:发送一条经过密钥加密的数据,让客户端验证;验证通过则开始进行加密通信;

Applicatiion Data:表示客户端/服务端已经开始基于TLS进行通信了;