HTTPS 和 TLS 加密:小锁图标到底保护了什么

通俗讲解 HTTPS 和 TLS 加密的原理:握手过程、证书的作用、加密能挡住谁、挡不住什么,以及使用网络服务和代理时,哪些信息可能被中间环节看到。

作者:最后更新:阅读约 3 分钟

直接答案HTTPS 是加了 TLS 加密的 HTTP。浏览器和网站之间先通过「TLS 握手」验证网站身份、商量出只有双方知道的密钥,之后传输的网页内容、密码、表单都是加密的。网络中间的环节能看到你在连接哪个网站,但看不到具体内容。

打开网页时,地址栏左边的小锁表示这个网站用了 HTTPS。它到底保护了什么、挡得住谁、挡不住什么,很多人并不清楚。

HTTP 和 HTTPS 的区别

  • HTTP:浏览器和网站之间传输网页的协议,内容是明文的,路过的任何一个环节都能看到、甚至篡改。
  • HTTPS:在 HTTP 外面加了一层 TLS 加密,内容在传输过程中被加密,只有你的浏览器和网站能解开。

现在主流网站基本都已经是 HTTPS,浏览器也会对 HTTP 网站标注「不安全」。

TLS 握手:先认人,再定暗号

建立 HTTPS 连接时,浏览器和网站会先进行一次 TLS 握手,主要做两件事:

  1. 验证网站身份:网站出示自己的证书,证书由受信任的机构签发,写明了这个证书属于哪个域名。浏览器检查证书是否有效、是否和你访问的域名一致。
  2. 协商密钥:双方用密码学方法商量出一个只有彼此知道的临时密钥,之后的数据都用它加密。即使有人全程监听,也算不出这个密钥。

握手完成后,正式传输网页内容。TLS 1.3 让握手更快,通常只需要一次往返。

证书的作用:防止「冒充」

如果没有证书,攻击者可以假装成网站,在中间把你的数据截下来(中间人攻击)。证书就是网站的「身份证」:

  • 由受信任的证书机构签发,浏览器内置了这些机构的名单;
  • 写明了证书对应的域名和有效期;
  • 伪造证书会被浏览器识别,并弹出「连接不安全」的警告。

所以看到证书警告时,不要随便点「继续访问」,尤其是要输入密码的网站。

加密能挡住什么

HTTPS 能防止网络中间的环节(公共 Wi-Fi、运营商、路过的服务器):

  • 看到你浏览的具体页面内容;
  • 看到你输入的密码、聊天内容、表单数据;
  • 篡改网页内容,比如插入广告或恶意代码。

加密挡不住什么

HTTPS 并不是隐身术,下面这些信息中间环节仍然可能看到:

信息 能否被看到 原因
你在连接哪个 IP 能 数据包必须写明目的地才能送达
你访问的是哪个网站(域名) 通常能 握手时的 SNI 字段和 DNS 查询通常是明文的
访问时间、数据量大小 能 加密不隐藏流量的多少和时间
具体页面、输入的内容 不能 已经被 TLS 加密

其中「域名」这一项,正在被新的技术(如加密 DNS、ECH)逐步保护起来。DNS 查询为什么会泄露你访问的网站,见 IP 地址、域名和 DNS。

和代理有什么关系

使用代理时,你的数据会先发给代理服务器,再由它转发给网站。如果你访问的是 HTTPS 网站:

  • 代理服务器能看到你连接了哪个网站、什么时间、传了多少数据;
  • 但看不到页面内容和你输入的密码,因为它们在你的浏览器和网站之间是端到端加密的。

这也是为什么「重要账号开启两步验证、只在 HTTPS 网站输入密码」是很实用的安全习惯。代理的完整工作过程,见 代理是怎么工作的。

总结

  • HTTPS = HTTP + TLS 加密,小锁表示连接加密、证书与域名匹配。
  • TLS 握手负责验证身份和协商密钥,证书防止冒充。
  • 加密保护内容,但不隐藏你连接了哪里、什么时候、传了多少。
  • 有小锁不等于网站可信,钓鱼网站也能有证书,要核对域名。

常见问题

SSL 和 TLS 是一回事吗?

TLS 是 SSL 的继任者。SSL 早已淘汰,现在用的都是 TLS(主流是 TLS 1.2 和 TLS 1.3),但很多人习惯上仍把证书叫作「SSL 证书」。

有小锁就说明网站安全可信吗?

不一定。小锁只说明连接是加密的、证书和域名对得上,不代表网站本身可信。钓鱼网站也可以申请证书,要仔细核对域名。

证书错误、提示连接不安全是怎么回事?

常见原因是设备时间不准、证书过期,或者连接被中间设备干扰。先检查系统时间;如果是陌生网站报证书错误,不要继续输入密码。