跳转到正文
Shane Blog
返回

HTTP 与 HTTPS 有什么区别?聊聊 TLS 握手那些事

HTTP 与 HTTPS 有什么区别?聊聊 TLS 握手那些事

浏览器地址栏那把小锁图标,大概是普通用户唯一会主动关心的”安全指标”了。它代表的就是当前连接用的是 HTTPS 而不是 HTTP。这两个协议名字只差一个字母,但背后的差距不小,这篇文章尝试把这中间的区别讲明白。

HTTP 本身是明文的

HTTP(HyperText Transfer Protocol,超文本传输协议)设计之初就没考虑加密这件事,它的任务很单纯:客户端发一个请求,服务器给一个响应,双方按照约定好的格式交换数据。问题在于,这些数据在网络上是以明文形式传输的。

这意味着,只要有人能”看到”你的流量——比如同一个公共 Wi-Fi 下的其他设备、链路上的运营商设备,理论上都能读到你和网站之间传输的完整内容,包括你输入的账号密码、浏览的具体页面。这在今天看来是不可接受的,但在 HTTP 刚被设计出来的年代,互联网还没发展到今天这种承载敏感信息的规模,安全性并不是第一优先级。

HTTPS 做的事:在 HTTP 外面套一层加密

HTTPS 并不是一个全新发明的协议,它本质上是 HTTP 跑在 TLS(Transport Layer Security,传输层安全协议)之上。可以理解成,先用 TLS 建立一条加密的安全通道,等通道建好之后,HTTP 请求和响应照旧在这条通道里传输,只是外部再也看不懂里面具体传的是什么内容了。

TLS 的前身叫 SSL(Secure Sockets Layer),现在 SSL 已经被认为不安全,全面被 TLS 取代,但很多场合出于历史习惯还是会把两者混着叫,比如”SSL 证书”其实说的是 TLS 证书。

HTTPS 加密的是”传输过程”,不是”网站内容”

一个常见的误解是,用了 HTTPS 网站内容就绝对安全。其实 HTTPS 只保证数据在传输链路上不会被窃听或篡改,网站本身有没有漏洞、服务器有没有被入侵,是完全独立的另一回事。

TLS 握手大致在做什么

建立一条 TLS 连接需要客户端和服务器先”握手”,确认加密方式并交换必要的密钥信息。以目前主流的 TLS 1.3 为例,流程比早期版本精简了不少,大致可以理解成这几步:

  1. 客户端问好(ClientHello):浏览器发起连接,告诉服务器自己支持哪些加密算法、想访问的域名(通过 SNI 字段)等信息。
  2. 服务器回应(ServerHello):服务器从客户端支持的算法里选一个双方都能接受的,同时把自己的数字证书发过去。
  3. 证书验证:浏览器检查这张证书是不是由受信任的机构签发、有没有过期、域名对不对得上。这一步通不过,就是常见的”您的连接不是私密连接”警告的由来。
  4. 密钥交换:双方通过非对称加密的方式协商出一个只有彼此知道的对称密钥,这一步用的常见算法叫 ECDHE(椭圆曲线密钥交换)。
  5. 切换到对称加密通信:密钥协商完成后,后续实际传输的数据改用对称加密算法(比如 AES),因为对称加密的计算开销远小于非对称加密,适合大量数据的持续传输。

TLS 1.3 相比 1.2 最大的改进之一,就是把原来需要两个往返(2-RTT)才能完成的握手压缩到了一个往返(1-RTT),甚至在满足条件的情况下支持 0-RTT,这直接体现在网页打开速度上。

证书为什么能建立信任

证书的作用是证明”这台服务器确实是它自称的那个域名”,防止有人伪装成目标网站进行中间人攻击。这套信任体系依赖的是一条”证书链”:

根证书(预装在操作系统 / 浏览器里)
   └── 中间证书(由根证书签发)
         └── 服务器证书(由中间证书签发,绑定具体域名)

浏览器和操作系统内置了一份受信任的根证书列表,只要一张证书能顺着链条追溯到这份列表里的某个根证书,就认为它是可信的。这也是为什么自己用工具生成的”自签名证书”会被浏览器警告——因为它没有任何一个受信任的根证书为它背书。

证书按验证强度大致分三档,从低到高:

对于个人网站或者博客,DV 证书完全够用,而且现在有免费的自动化证书服务,申请和续期都不需要人工介入。

HTTPS 是不是一定更慢

早年确实存在”HTTPS 更慢”的说法,原因是握手和加密解密都需要额外的计算和网络往返。但放到今天,这个说法基本已经过时:

所以现在几乎不存在”为了性能放弃 HTTPS”这个说法成立的场景。

小结

HTTP 负责定义”请求和响应长什么样”,TLS 负责”这条通信链路本身是不是安全的”,HTTPS 是两者的结合。理解这一层关系之后,再看到地址栏那把小锁,大概就知道它具体在替你做什么了:验证了对方身份,加密了传输内容,仅此而已——至于网站本身靠不靠谱,还是得靠别的方式判断。


分类:
标签:
分享此文章:

上一篇
自己动手搭博客:这次选型时我到底在纠结什么
下一篇
什么是 DNS?一次域名解析背后到底发生了什么