TLS双向认证

区分单向认证和双向认证

区分是否为单向认证关键在于客户端发送client hello后,server hello之后有没有Certificate Reauest

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202312091437154.png

如果不为双向认证,那么可能只有Server Hello,也可能Server Key Exchange后面不存在Certificate Reauest,或者以上信息都没有

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202312091439034.png

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202312091440331.png

双向认证过程

完整的双向认证如下,Client Hello开始,Encrypted Handshake Message下的ACK返回包结束

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202312091454166.png

第一步,客户端发送自己支持的加密套,和随机数给服务端,即Client Hello,服务端收到Client Hello回复一个Ack

第二步,服务端发送自己的随机数以及选择一个加密套以及服务端证书给客户端,即Server Hello,客户端收到Server Hello回复一个ACK

第三步,客户端发送自己的证书Certificat,握手类型为Client Key Exchange,服务端收到后回复一个Ack

第四步,客户端发送Certificate Verify,服务端收到后回复一个Ack

第五步,客户端发送Change Cipher Spec,服务端收到后回复一个Ack

第六步,客户端发送Encrypted Handshake Message,这个包的目的就是告诉对端自己再整个握手过程中收到了什么数据,发送了什么数据,来保证中间没人篡改报文,服务端收到后回复一个Ack

第七步,服务端发送Change Cipher Spec,客户端收到回复一个ACK

第八步,服务端发送Encrypted Handshake Message,客户端收到回复一个ACK,认证结束

下边的Application Data就是传输的字节数据。

可以看到,前两步为客户端、服务端互相发送回复,中间四步为客户端发送证书及算法数据,后两步为服务端发送算法数据。客户端和服务端都发送了一次Change Cipher Spec和Encrypted Handshake Message。

参考文章

https|ssl笔记-ssl双向认证成功握手过程