永久网站域名注册,拖拽建站平台,东莞网站建设服务商,山楼小院在哪家网站做宣传文章目录 WireShark抓包TLS握手过程Client HelloServer HelloEncryped Extenstions, Certificate, Certificate VerifyChange Ciper Spec, FinshedTLS 1.2和TLS 1.3的区别能不能在进一步#xff1f; 解密WireShark中抓到的TLS包参考资料 上一篇文章已经在本地使用了生成自签名… 文章目录 WireShark抓包TLS握手过程Client HelloServer HelloEncryped Extenstions, Certificate, Certificate VerifyChange Ciper Spec, FinshedTLS 1.2和TLS 1.3的区别能不能在进一步 解密WireShark中抓到的TLS包参考资料 上一篇文章已经在本地使用了生成自签名证书并使浏览器认为该证书是合法的并且可以看到有了HTTPS通过WireShark抓出来的包看不到请求内容和响应内容了。 看了网上很多分析HTTPS握手的文章每次看过之后总是过段时间就忘记了所以自己决定动手抓下包看下整个过程
WireShark抓包
和上一篇文章一样本地启动WireShark和示例程序通过curl访问接口
curl -v -X POST -k https://localhost:8443/validation/valid/inline/post请求收到响应之后停止WireShark抓包并过滤TLS请求
tls and tcp.port eq 8443 and tls.handshakeTLS握手过程
根据SSL网站的文章-TLS握手概览和一些其他文章我发现我抓出的包里看到的步骤和网上大多数说的步骤存在差别。
后来发现原来现在的主浏览器都已经支持TLS 1.3了TLS 1.3比TLS 1.2要简洁一点其实从上面截图也可以看得出来协议那里写的TLS 1.3
Client Hello Server Hello 可以看到这里是TLS 1.3, 而网上大部分文章的TLS握手过程是TLS 1.2
Encryped Extenstions, Certificate, Certificate Verify 可以看到这里下发的证书内容是我们上一篇文章自己生成的证书内容以及subjectAltName也是我们上一篇文章设置的。
Change Ciper Spec, Finshed 对于上述过程标红的地方建议搭配RFC8446也就是TLS 1.3协议一起看比较好懂我就不再逐一解释。官方文档的解释更简洁易懂。
TLS 1.2和TLS 1.3的区别
具体还是看RFC8446的Major Differences from TLS 1.2一节
主要是
删除了大部分加密组件现在加密组件很少了不使用RSA而是使用椭圆曲线并省去了密钥协商的过程话说椭圆曲线的原理我也没怎么看懂不过可以参考这位博主的文章 我觉得他解释的很好
可以阅读cloudflare的文章-TLS在握手期间发生了什么和Medium上的这篇文章这两篇文章里面都详细讲了TLS 1.2和TLS 1.3握手的过程
能不能在进一步
我原本想着能不能让浏览器支持的TLS版本降成1.2这样就可以看到TLS 1.2的过程了但是我在网上找了一圈没有找到有效答案。在Chrome浏览器
chrome://flags设置中也没找到能把TLS 1.3降为TLS 1.2的选项遂作罢。
解密WireShark中抓到的TLS包
有了HTTPS之后再去WireShark里抓包已经看不到明文了那怎么解密呢?
按照WireShark官方Wiki有关TLS一节文档配置即可
设置环境变量SSLKEYLOGFILEexport SSLKEYLOGFILE$HOME/keylogfile.txt关闭浏览器在Shell中启动浏览器open /Applications/Google\ Chrome.app在WireShark Preferences - Protocols - TLS 中配置SSLKEYLOGFILE文件 请求接口发现这次可以能够解密TLS的数据包了
下一篇将介绍在Java里建立HTTPS连接以及本地调试程序忽略HTTPS验证
参考资料
Linux公社-SSL/TLS原理详解