HTTPS 入门:它到底解决了什么问题?
HTTPS 不是锦上添花,而是底线。
我记得 2015 年带过一个电商项目,上线第一天就被安全团队叫停——所有登录密码明文传输。那时候还没有 HTTPS 强制要求,但用户敏感信息直接暴露在网络里,跟裸奔没区别。从那天起,我再也没做过不加密的线上系统。
HTTPS 全称 HTTP over SSL/TLS,简单说就是在 HTTP 外面套了一层加密隧道。它解决的核心问题有三个:窃听(中间人能看到内容)、篡改(数据在传输中被改掉)、冒充(你访问的服务器不是你以为的那个)。
一、HTTP 的三大“裸奔”问题
咱们先看 HTTP 是怎么“裸”的。HTTP 协议本身不加密,所有请求和响应都以明文在网络中传输。你想想看,Wi-Fi 蹭网、运营商缓存、甚至同一个交换机下的恶意软件,都能轻松抓包。
- 窃听(Eavesdropping):任何中间节点都能读你的数据包。密码、支付卡号、聊天记录一览无余。
- 篡改(Tampering):攻击者可以在路由节点上修改数据,比如插入广告、替换下载文件、甚至植入木马。
- 冒充(Impersonation):DNS 劫持或 ARP 欺骗,让你连到假的服务器,交出敏感信息。
实际案例:运营商劫持 HTTP 页面注入广告,十几年前非常普遍。我现在做项目,只要涉及用户登录或支付,一律上 HTTPS,连静态资源都不放过。
二、SSL/TLS 发展史:从实验室到标配
说白了,SSL/TLS 就是给 HTTP 穿上的防弹衣。我从 1.0 到 1.3 简单梳理一下,重点看咱们现在该用什么。
| 协议版本 | 发布年份 | 关键特点 | 当前状态 |
|---|---|---|---|
| SSL 1.0 | 未公开 | 网景内部版本,有严重安全漏洞,从未公开发布 | 废弃 |
| SSL 2.0 | 1995 | 第一个公开版本,但存在弱点(如MD5 MAC、弱密钥) | 废弃(RFC 6176) |
| SSL 3.0 | 1996 | 广泛使用,但2014年POODLE攻击后被认为不安全 | 废弃(RFC 7568) |
| TLS 1.0 | 1999 | 实际上是SSL 3.0的升级,改名以淡化网景商标 | 建议禁用(已过时) |
| TLS 1.1 | 2006 | 增加了CBC保护、IV显式传递等改进 | 建议禁用 |
| TLS 1.2 | 2008 | 当前主流标准,支持AEAD、GCM、ECDHE等强密码套件 | 推荐使用 |
| TLS 1.3 | 2018 | 握手更快(1-RTT)、移除不安全算法(RC4、3DES等)、前向安全默认 | 强烈推荐 |
我曾经在维护一个老系统时,发现服务器只支持 SSL 3.0,而用户都用 Chrome 70+ 了。浏览器直接拒绝连接——全线瘫痪。最后强制升级到 TLS 1.2 才解决。所以别贪图兼容性保留旧版本,早升级早省心。
为什么 TLS 1.3 现在最香?握手从 2-RTT 降到了 1-RTT(甚至 0-RTT 恢复),而且强制前向安全。你想想看,即使私钥泄露了,之前的会话也无法被解密。我个人习惯,新项目一律只开 TLS 1.2 + 1.3,关掉所有老旧协议。
三、HTTPS 与 HTTP 对比:一张表看懂差异
| 对比维度 | HTTP | HTTPS |
|---|---|---|
| 默认端口 | 80 | 443 |
| 加密方式 | 明文 | SSL/TLS 加密 (对称 + 非对称混合加密) |
| 身份验证 | 无(任何人都可以冒充服务器) | 通过 CA 签发的数字证书验证服务器身份 |
| 数据完整性 | 无保护(可被篡改) | 消息认证码(MAC)保证数据未被篡改 |
| 性能开销 | 低(无加密握手) | 略有增加(TLS 握手 + 加密运算),但可通过会话复用、OCSP Stapling 优化 |
| SEO 影响 | 搜索引擎降低权重(Google 已明确 HTTPS 为排名信号) | 提升搜索排名,浏览器地址栏显示小锁(安全标识) |
| 浏览器标记 | 地址栏显示“不安全”(Chrome 56+ 开始标记) | 显示绿色锁图标(EV 证书显示公司名) |
避坑:很多人以为 HTTPS 会带来巨大的性能损耗,其实 TLS 1.3 握手仅需一次往返,加密运算在硬件加速下可以做到亚毫秒级。我在公司内部压测过,纯静态资源切换 HTTPS 后 QPS 下降不到 5%,完全可以接受。
四、HTTPS 到底做了什么?
看完对比图,你应该有了直观印象。HTTPS 的核心动作其实就三件事:握手协商密钥、证书验证、加密传输。
- 客户端发起 ClientHello:告诉服务器支持的 TLS 版本、密码套件列表、随机数等。
- 服务器回复 ServerHello:选定密码套件和协议版本,并发送自己的数字证书(包含公钥)。
- 客户端验证证书:检查证书是否由受信任的 CA 签发、域名是否匹配、是否在有效期内、是否被吊销。
- 密钥交换:使用非对称加密(如 ECDHE)协商出对称密钥,后续通信全部用对称加密。
- 加密传输:应用数据分段、加MAC、加密、发送;接收端解密、验证、重组。
我记得刚开始调试 HTTPS 时,遇到一个奇怪问题:服务端证书明明没到期,但客户端就是报“证书已吊销”。查了半天发现 OCSP 响应超时导致浏览器认为验证失败。后来我们启用了 OCSP Stapling,让服务器自己缓存并推送吊销状态,问题才解决。所以小细节能坑死人。
说实话,HTTPS 不是银弹。它只保护传输中的安全,不防御服务器被入侵、数据库泄漏、CSRF 攻击等。但如果你连传输都不保护,其他安全措施都是空中楼阁。
我建议所有团队在 2025 年之后的项目中,直接默认全站 HTTPS,并且只使用 TLS 1.2 及以上版本。既是对用户负责,也是降低自己的维护成本。