以访问www.sina.com.cn为例,抓包解析TLS1.2究竟是如何通讯的;html
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
Client Hello:客户端向服务端打招呼;携带各类信息供服务端选择;
浏览器
Server Hello:服务端回应客户客户端的招呼信息;结合客户端、服务端的信息,选择合适的加密套件;bash
Certificate:服务端向客户端发送本身的数字证书(此证书包含服务端的公钥),以实现客户端验证身份;服务器
Server Key Exchange:服务端向客户端发送基于选择的加密套件生成的公钥(此公钥是通过私钥签名认证的);dom
Server Hello Done:服务端向客户端表示响应结束;ide
Client Key Exchange:客户端向服务端发送通过公钥加密的Pre-Master;优化
Change Cipher Spec:告知服务端/客户端,之后的通讯都是加密的;加密
Encrypted Handshake Message:基于协商生成的密钥,加密握手信息让服务端/客户端进行认证;双方认证无误开始通讯;spa
New Session Ticket:是优先SSL链接的一种方法,此种不作特别说明
身份验证过程:
权威ca会用本身的私钥加密服务器的公钥;
当客户端访问服务器的时候,服务端会向客户端发送本身的证书,由内置在浏览器的ca公钥进行解密,获得服务端的公钥;
由此验证公钥,私钥,从而达到验证身份的目的;
数字证书做用参考:https://www.cnblogs.com/yaowen/p/8509573.html
客户端Client Hello阶段:
做用:客户端向服务端发送创建链接请求;
此时,客户端会携带支持的版本号、支持的加密套件、客户端随机数(用于协商对称加密的密钥)、支持的HTTP协议
服务端Server Hello阶段:
做用:根据客户端所携带的内容,肯定创建链接版本、加密套件,生成服务端随机数(用于协商对称加密的密钥)
以下图,能够看到肯定的加密套件是:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
服务端Certificate, Server Key Exchange, Server Hello Done阶段:
Certificate:向客户端发送由权威ca签发的证书,以验证身份;
Server Key Exchange:基于Server Hello阶段选择的ECDHE交换密钥算法,发送它生成的椭圆曲线的公钥(通过签名的)
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交换密钥算法,发送它生成的椭圆曲线的公钥;
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进行通讯了;