本帖最后由 葛一鸣 于 2021-4-30 10:56 编辑
安全入门之wireshark抓包之HTTPS
HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密、对称加密以及HASH算法。
三次握手和四次挥手略过。
第一步 Client Hello
先看一下抓出来包的内容,我们直接看到SSL层。
随机数:这个是用来生成最后加密密钥的影响因子之一,包含两部分:时间戳(4-Bytes)和随机数(28-Bytes)
session-id:用来表明一次会话,第一次建立没有。如果以前建立过,可以直接带过去。后面的扩展内容会详细讲到。
加密算法套装列表:客户端支持的加密-签名算法的列表,让服务器去选择。
扩展字段:比如密码交换算法的参数、请求主机的名字等等
这里要注意一个随机数,很重要,记为Random1。
第二步 Server Hello
据客户端支持的SSL/TLS协议版本,和自己的比较确定使用的SSL/TLS协议版本确定加密套件、压缩算法,产生了一个随机数Random2。
注意,至此客户端和服务端都拥有了两个随机数(Random1+ Random2),这两个随机数会在后续生成对称秘钥时用到。
第三步 Server => Client
这次传输包含三部分内容
Certificate 这里主要就是把证书发送给Client。图中可以看到我的证书和证书发放机构。客户端拿到证书后就可以进行验证,同时获取到公钥,用于后面Random3的加密。
Server Key Exchange这个消息是用来发送密钥交换算法相关参数和数据的。这里要提前提一下,就是根据密钥交换算法的不同,传递的参数也是不同的。
常用的密钥交换算法:RSA、DH(Diffie-Hellman)、ECDH(EllipticcurveDiffie–Hellman)。
Server Hello Done 这个就是Server来表示自己说完了。类似电影里别人拿对讲机说完话最后会有一个“完毕!”。
第四步 Client => Server
这次传输也包含三部分内容,也是做了一个优化
Encrypted Handshake Message
这里客户端会再生成一个随机数Random3。然后使用服务端传来的公钥进行加密得到密文PreMaster Key。服务端收到这个值后,使用私钥进行解密,得到Random3。这样客户端和服务端就都拥有了Random1、Random2和Random3。这样两边的秘钥就协商好了。后面数据传输就可以用协商好的秘钥进行加密和解密。
Change Cipher Spec 编码改变通知。这一步是客户端通知服务端后面再发送的消息都会使用前面协商出来的秘钥加密了,是一条事件消息。
Encrypted Handshake Message 这一步对应的是Client Finish 消息,客户端将前面的握手消息生成摘要再用协商好的秘钥加密,这是客户端发出的第一条加密消息。服务端接收后会用秘钥解密,能解出来说明前面协商出来的秘钥是一致的。
第五步 Server => Client
Change Cipher Spec 编码改变通知。这一步是服务端通知客户端后面再发送的消息都会使用加密,也是一条事件消息。
Encrypted Handshake Message 这一步对应的是Server Finish 消息,服务端也会将握手过程的消息生成摘要再用秘钥加密,这是服务端发出的第一条加密消息。客户端接收后会用秘钥解密,能解出来说明协商的秘钥是一致的。
到这里双方SSL/TLS握手完成。
第六步 Client => Server
数据开始正常传输。
|