TLS握手协议介绍
这篇博客写得特别好,我在此基础上针对自己的情况写下这篇。
TLS握手过程
Wireshark抓取内容
00 TCP的三次握手
本人关于TCP的文章,TLS是一种安全协议,建立在TCP协议之上,服务于应用层。
01 Client Hello (客户端–>服务端)
在TLS握手过程中,客户端向服务器发出 “Client Hello” 消息,以启动握手过程并提供有关其支持的加密算法和其他参数的信息。
02 Server Hello (服务端->客户端)
在TLS握手过程中,服务器接收到客户端的 “Client Hello” 消息后,会向客户端发送 “Server Hello” 消息,其中包含有关服务器支持的加密算法和其他参数的信息,以及服务器的证书。
Certificate 证书
服务端向客户端发送证书清单。
Server Hello Done
“Server Hello Done” 是TLS握手过程中的一部分,表示服务器已经发送了 “Server Hello” 消息,并完成了握手过程的一部分。这个消息通知客户端,服务器已经完成了握手,可以继续下一步操作,如客户端验证服务器的证书、生成密钥、发送密钥等。
03 ClientKeyExchange (客户端–>服务端)
当密码套件中包含 RSA 时, 会随ClientKeyExchange消息一起发送经过加密的预备主密码。
ChangeCipherSpec
实际上,ChangeCipherSpec消息并不是握手协议的消息,而是密码规格变更协议的消息 。
在ChangeCipherSpec消息之前,客户端和服务器之间已经交换了所有关于密码套件的信息,因此在收到这一消息时,客户端和服务器会同时切换密码 。
在这一消息之后, TLS 记录协议就开始使用双方协商决定的密码通信方式了 。
Encrypted Handshake Message
The TLS handshake is concluded with the two parties sending a hash of the complete handshake exchange, in order to ensure that a middleman did not try to conduct a downgrade attack.
04 New Session Ticket(服务端–>客户端)
服务器发送了一个新的会话票据(Session Ticket),用于启动新的会话或恢复之前的会话。
ChangeCipherSpec
这次轮到服务端发送 ChangeCipherSpec 消息了。
服务端:“好,现在我要切换密码了 。
Encrypted Handshake Message
介绍同03
05 到此,握手结束,之后可以传送加密消息流(客户端<–>服务器)
在此之后,客户端和服务器会使用应用数据协议和TLS记录协议进行密码通信 。
这里的Hypertext Transfer Protocol即HTTP,是一种用于传输超文本的应用层协议。
HTTPS通过在HTTP和TCP之间添加SSL/TLS协议层来加密通信内容,提供了更高的安全性,防止数据在传输过程中被窃取或篡改。
HTTPS默认端口为443(就是TLS的默认端口)。
完整代码
本人实现TCP及TLS的完整代码,以供参考
拓展(UDP)
参考:Wireshark抓取网卡协议分析(TCP,UDP,ARP,DNS,DHCP,HTTP超详细版本)
本人在上个月实现了设备搜索和固件升级的功能,其中涉及到UDP协议,UDP是User Datagram Protocol用户数据报协议的简称。
目标IP地址为239.0.0.1,这个IP地址是一个组播地址,用于多播通信。
UDP协议特点
-
UDP是一种无连接协议,无连接也就代表着传输不可靠
-
不需要建立连接,一台服务器可以向多个客户机传输相同的消息
-
UDP信息包的标题很短,只有8个字节的大小,相比于TCP的20字节信息包,额外开销非常的小
-
吞吐量不受拥塞控制算法的调节,只受软件生成数据速率、传输宽带、源端和目标端主机性能的限制
-
UDP使用尽最大努力交付
-
UDP是面向报文的