HTTPS协议如何工作:从浏览器地址栏的小锁说起

你有没有注意到,打开淘宝、微信支付或者网银页面时,地址栏左边总有个小图标?点开它,会显示“连接是安全的”——这背后就是 HTTPS 在悄悄干活。

HTTP 和 HTTPS 不只是多了一个 S

HTTP 是“超文本传输协议”,负责把网页从服务器搬到你手机或电脑上。但它像寄明信片:内容不加密,邮局(也就是网络中间节点)谁都能看。而 HTTPS 的那个 S,代表 Secure(安全),它给明信片套了层密码信封,只有收件人能拆。

HTTPS 不是新协议,而是 HTTP + SSL/TLS

HTTPS 本身不是独立协议,它是 HTTP 跑在 SSL 或 TLS 加密层之上。现在主流用的是 TLS 1.2 或 1.3。简单说:HTTP 负责“传什么”,TLS 负责“怎么安全地传”。

握手过程:三步建立信任

当你输入 https://www.example.com 并按下回车,浏览器和服务器之间会快速完成一次“握手”:

第一步:打招呼,协商加密方式
浏览器告诉服务器:“我能支持 TLS 1.3、RSA、AES 等多种加密方法,你选一个。”服务器挑一个双方都支持的组合,比如 TLS 1.3 + ECDHE 密钥交换 + AES-256-GCM 加密。

第二步:验证身份,防冒充
服务器发来它的数字证书(就像网站的身份证),里面包含域名、公钥、签发机构(CA)信息。浏览器会检查:证书是不是由可信 CA(如 Let's Encrypt、DigiCert)签发?域名是否匹配?有没有过期?如果任一环节出问题,就会弹出“您的连接不是私密连接”的警告。

第三步:生成“会话密钥”,开始加密通信
浏览器用证书里的公钥加密一个随机数,发给服务器;服务器用自己的私钥解密,双方再结合各自生成的随机参数,算出同一个“会话密钥”。之后所有 HTTP 请求和响应,都用这个密钥做对称加密——快又安全。

为什么每次访问都很快?不重复握手

你可能纳闷:照这么说,每点一个链接都要握手?其实浏览器会缓存会话信息,支持“会话复用”(Session Resumption)。第二次访问同一网站时,可能跳过证书验证和密钥协商,直接用之前的会话密钥加密,耗时从几百毫秒降到几十毫秒。

一个小例子:登录时的真实变化

假设你在 HTTP 网站填用户名 alice 和密码 123456,数据裸奔在网络里,黑客用 Wireshark 抓包就能看到明文:

POST /login HTTP/1.1\r\nHost: example.com\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\nusername=alice&password=123456
换成 HTTPS 后,抓到的只是一串乱码:
\x8a\xf2\x1b\x9d...(一堆不可读字节)
因为整个 HTTP 报文(包括 URL 路径、Header、Body)都已被 TLS 层加密。

小锁图标不是万能护身符

有小锁,只说明“传输过程加密了”,不代表网站本身可信。钓鱼网站也能申请合法 HTTPS 证书(比如用免费 Let's Encrypt 给 fake-wechat-login.com 部署)。所以还得看域名对不对、网址是不是手动输的、有没有异常跳转。

HTTPS 就像快递员给你送包裹时全程锁在保险箱里,但箱子送到哪、收件人是谁,还得你自己盯紧。