刚才用图和文字描述讲解了SSL协议的交互过程HTTPS协议--通过SSL协议实现安全保障的过程和原理。
用Wireshark抓包进行详细的讲解。抓的是某机构腾讯课堂的首页。
(因为网页有变动,所以实际抓包抓到的内容与图片不符。但是图片中抓到的包是正确的,讲解的技术也是正确的。)
选择一个TLS的请求,右键--追踪流--TLS。
一、就能看到完整的SSL交互的过程:
上面是TCP三次握手,三次握手之后就进入SSL握手的过程。
二、SSL握手过程
1.第一个SSL握手是客户端向服务器发起的Client Hello消息。
点开这个请求看下内容:
可以看到第四层是TCP协议,源端口是随机的端口,目的端口是443。
SSL协议默认是基于TCP的443端口。HTTP默认是TCP的80端口。所以HTTPS默认是TCP的443端口。
TLS协议在四层之上。TLS协议里面是这样的类型:是一个握手协议,并且是个Client Hello。
支持TLS1.0,TLS1.2。
TLS是SSL协议的一个版本。 SSL协议版本:SSLv3,TLS1.0,TLS1.2
客户端把自己所支持的TLS版本都列在了Client Hello里面。就跟我们的加密套件是一样的。
这个是当前客户端所支持的所有的加密套件
以上就是Client Hello里面所包括的一些重要的消息。
2.Sever开始回复客户端Server Hello了。点开这个请求可以看到:
客户端支持TLS1.0和TLS1.2,服务器从中选了一个共同都支持的版本:TLS1.2。
这是个Server Hello的握手类型。
选一个共同都支持的加密套件:
服务器从客户端发的消息里面,选了版本选了套件。都在Server Hello里面都告诉了客户端。
3.Server Hello之后,服务器发了一个证书。
点开可以看到:
在这个里面主要看的是证书。服务器可能有很多个证书。它会把这些证书都加上都发给客户端。
4.客户端拿到证书去做验证。验证完毕后生成一个本地的随机密码,并且把密码发给服务器。
告诉服务器,我后面的报文开始加密了。点开请求可以看到:
里面可以看到:加密报文类型,会加密密钥。
这个是为了保证数据完整性的一个信息:
从抓包内容来看,客户端发完之后,这个过程完成了。(抓包工具将交互的过程简化了,都放一起了。如果看分开的具体过程就是上篇文章图片画的过程。)
三、握手结束,后面就开始发送HTTP数据包了。
可以看到这个HTTP数据包是加过密的:
http-over-tls意思是:是在tls基础上发的一个HTTP交互报文,是加密的。