第1章:HTTPS基础概念——HTTP vs HTTPS,加密与证书
咱们开门见山。你写了个接口,用HTTP调得好好的,一上生产就被安全团队打回。为什么?因为HTTP是明文,数据在网络上裸奔。你想想看,用户密码、支付信息、业务关键数据,全都像明信片一样,谁都能偷瞄一眼。
我刚开始接触这行时也觉得HTTPS麻烦,不就是多套个S吗?直到有一次,我在内网调试一个支付回调,用HTTP抓包看到了完整的信用卡号。嗯,从那以后我再也不敢轻视这件事了。
HTTP vs HTTPS——区别在哪?
说白了,HTTPS = HTTP + SSL/TLS。这个SSL/TLS协议给HTTP套了一层加密外壳。数据在发送前加密,接收后解密。中间人就算截获了数据包,看到的也是一堆乱码。
为了让你一眼看明白,我整理了个表格:
| 特性 | HTTP | HTTPS |
|---|---|---|
| 数据加密 | 不加密(明文) | 加密(混合加密) |
| 默认端口 | 80 | 443 |
| 身份验证 | 无 | 证书验证 |
| 数据完整性 | 不保证 | 完整性校验 |
| 性能开销 | 低 | 略高(握手阶段) |
注意一下,性能开销只在握手阶段明显。一旦建立了加密通道,后续通信效率几乎一样。我在项目中做过压测,纯HTTP和HTTPS在长连接下的吞吐量差距不到5%。所以别再说HTTPS慢了。
加密原理——混合加密到底怎么工作的?
你可能会问:为什么不用一种加密方式搞定?我来讲讲。
- 对称加密:加解密用同一个密钥。速度快,但密钥怎么安全地传给对方?你发密钥时万一被截获,加密就废了。
- 非对称加密:有一对密钥,公钥加密、私钥解密。私钥自己藏好,公钥随便发。但非对称加密慢得要命,不适合加密大量数据。
- 混合加密:握手阶段用非对称加密传输一个临时对称密钥,后面通信用这个对称密钥加密。既安全又高效。
我在早期写一个小程序时,曾天真地只用对称加密,写死在代码里。结果源码泄露后,整个通信被破解。嗯,吃一堑长一智。从此我明白了为什么HTTPS要用混合加密。
数字证书——你是谁?我怎么相信你?
光有加密还不够。我要确保跟我通信的真的是你的服务器,而不是某个假冒站点。这就是数字证书的活。
证书由CA(证书颁发机构)签发。CA会验证你的域名所有权和组织信息,然后给你绑上公钥,用自己的根证书签名。客户端拿到证书后,检查签名链,验证公钥确实属于这个域名。
- 自签名证书:自己生成的证书,没有CA背书。测试用OK,生产环境不行。
- CA签发证书:收费或免费(Let's Encrypt)。浏览器内置了CA的根证书,所以自动信任。
- 证书链:根CA -> 中间CA -> 你的服务器证书。客户端逐级验证直到受信任的根。
一张图看懂HTTPS加密体系
下面是我画的一张结构图,把刚才讲的这些关系串起来。你可以看到客户端、服务端、CA之间的交互,以及加密方式的角色。
小结——这一课你该带走什么?
- HTTP与HTTPS最大的区别就是那层加密和身份验证。
- 混合加密是最合理的折中方案:非对称加密传递临时密钥,对称加密传输数据。
- 数字证书由CA背书,用来验证服务端身份。
- 自签名证书用于开发,生产环境必须用CA签发的证书。
我个人认为,理解这些基础概念比配置工具更重要。因为只有知道为什么这么做,遇到问题时你才能自己诊断。下一课我们会实际动手,搭建一个最简的HTTPS服务。但今天,先消化这些吧。