前言:HTTPS 的安全通信建立在 TCP 三次握手和 TLS 握手两个阶段的基础上。很多人容易混淆这两个过程,实际上它们是独立的步骤,共同保障通信的安全性和可靠性。
1.
先打个电话:TCP三次握手(确认双方能正常沟通)
场景:就像你打电话给朋友,要先确认对方能听到你说话。
第一步(你说“喂,听得到吗?”)
客户端发个消息:“我要连你了,我这边准备好了(SYN)”。
第二步(朋友说“听得到,你呢?”)
服务器回复:“收到!我这边也准备好了(SYN-ACK)”。
第三步(你说“我也听得到!”)
客户端再回:“好,那咱们开始聊天吧(ACK)”。
结果:双方确认了能互相收发消息,普通电话线接通了。
2.
再对暗号:TLS握手(确保聊天内容绝对保密)
场景:电话接通后,你怕被窃听,决定用“密语”聊天。
第一步(你说“咱们用密码聊天吧!”)
客户端告诉服务器:“我支持这些加密方式(比如AES),再给你个随机数当密码原料”。
第二步(朋友说“用AES加密!这是我的身份证”)
服务器选一个加密方式,发回自己的数字证书(相当于身份证),再加一个随机数。
第三步(你检查身份证,生成密码)
客户端检查证书是不是合法的(比如银行网站要确认是“真官网”)。生成一个临时密码,用服务器的公钥加密后发过去(只有服务器能解开)。
双方用两个随机数+临时密码,生成最终通话密码。
第四步(互相说“暗号正确!”)
双方用新密码加密一条测试消息,确认密码一致。
结果:之后的聊天内容全用这个密码加密,外人就算窃听也看不懂。
3.总结:为什么HTTPS要搞两次“握手”?
TCP三次握手:解决“能不能通信”的问题,像确认电话线有没有接通。
TLS握手:解决“通信安不安全”的问题,像给电话加了个保险箱,只有你和对方有钥匙。
关键区别:
TCP是基础通信,不加密(就像普通电话,谁都能听)。
TLS是加密层,保障隐私(像特工电话,内容必须加密)。
补充内容
https是三次还是两次握手?
答案 :HTTPS 既需要 TCP 的三次握手,也需要 TLS 的多次握手,两者缺一不可。
具体来说:
1.TCP 三次握手(必选)是基础,保证客户端和服务器能正常通信。
2.TLS 握手(必选)是加密层,次数取决于 TLS 版本(如 TLS 1.2 需多次交互,TLS 1.3 优化为 1 次)。
为什么容易混淆?
很多人误以为“HTTPS 握手”是单独的一次过程,实际上它由两部分组成:
步骤 | 作用 | 握手次数 | 是否加密 |
---|---|---|---|
TCP 三次握手 | 建立底层可靠连接 | 3 次交互(SYN → SYN-ACK → ACK) | 不加密(明文传输) |
TLS 握手 | 协商加密算法、验证身份、验证链接是否存活及证书是否吊销失效等 | TLS 1.2 需 2 次往返,TLS 1.3 需 1 次 | 加密(后续通信) |
举个实际例子:访问一个 HTTPS 网站
TCP 三次握手(先做):
你的浏览器对服务器说:“我要连你”(SYN)。
服务器回复:“好的,我准备好了”(SYN-ACK)。
你的浏览器确认:“开始吧”(ACK)。
此时双方已建立普通连接,但数据未加密。
TLS 握手(后续):
你的浏览器说:“咱们用密码聊天吧!这是我的加密能力列表”(Client Hello)。
服务器回复:“用 AES 加密!这是我的证书和随机数”(Server Hello)。
浏览器验证证书,生成临时密码加密发送,双方计算最终密钥(Key Exchange)。
最后互相确认密钥一致,开始加密通信。
关键结论
TCP 三次握手 ≠ TLS 握手:前者是通信基础,后者是安全增强。
HTTPS 总耗时 = TCP 握手时间 + TLS 握手时间。
TLS 1.3 的优势:将 TLS 握手合并为 1 次往返(减少延迟),但 TCP 三次握手依然需要。
常见误区澄清
误区:“HTTPS 是三次握手”。
正解:HTTPS 依赖 TCP 三次握手(基础) + TLS 握手(安全),总次数是两者叠加。
误区:“TLS 握手只有一次”。
正解:TLS 1.2 需多次交互,TLS 1.3 才优化为 1 次。
一句话总结
HTTPS 既要走完 TCP 三次握手“铺路”,也要完成 TLS 握手“上锁”,两者共同保障安全和可靠。
评论