一、HTTPS 基础原理与必要性
聊 HTTPS 之前,我得先说句大实话。
很多团队做全站迁移,第一反应是「不就是买个证书装上吗?」。嗯,我早期也这么想。直到有一次帮客户审计安全,发现他们虽然配了 HTTPS,但混合内容一堆,中间人照样能改页面。
所以这一章,咱们把底层的原理和必要性捋清楚。底子打不牢,后面全是坑。
HTTP 和 HTTPS 到底差在哪?
说白了,HTTP 是明文传输。你发什么,中间路由器、Wi-Fi 热点、ISP 全能看到。HTTPS 就是在 HTTP 外面套了一层 TLS(传输层安全性协议),做了三件事:加密、身份验证、完整性校验。
| 对比项 | HTTP | HTTPS |
|---|---|---|
| 数据传输 | 明文,可被嗅探 | 加密,窃听者看到的是乱码 |
| 身份验证 | 无,任何人可伪装服务器 | 证书链,客户端可验证服务器身份 |
| 数据完整性 | 无,中间人可篡改 | MAC 校验,篡改会被发现 |
| 默认端口 | 80 | 443 |
你想想看,如果银行登录页走 HTTP,密码直接在网络上裸奔。这画面,是不是不忍直视?
SSL/TLS 握手 —— 几分钟搞懂核心流程
我个人习惯把 TLS 握手拆成三个阶段来讲。记牢这三个,后面的优化和排错就清楚多了。
- 证书验证:客户端拿到服务器证书,检查是否由受信任的 CA 签发,域名是否匹配,是否过期或吊销。
- 密钥协商:双方通过非对称加密(RSA 或 ECDHE)协商出一个临时对称密钥。
- 对称加密通信:后续所有数据用这个对称密钥加密传输。
我的经验:我帮一家电商做过性能审计,发现他们每次页面加载要握手 3 次(页面、静态资源、API 各一次)。启用 TLS 会话复用后,首屏时间直接降了 35%。别小看这点优化。
为什么必须上 HTTPS?三个字:不安全
我见过不少技术负责人觉得「又不是金融网站,没必要 HTTPS」。这话搁五年前还能说说,现在真不行了。
- 数据机密性:你网站的用户注册、登录、评论,任何内容都可能被中间人抓取。我曾经在咖啡店用 Wireshark 抓过公网 HTTP 流量,几分钟就拿到了一个论坛的用户名密码。
- 数据完整性:中间人不仅能看,还能改。运营商植入广告、JS 劫持挖矿,这些事不是新闻。
- 身份验证:没有 HTTPS,DNS 劫持后用户看到的是伪造网站。你辛辛苦苦做的品牌,被人一个钓鱼页面就毁了。
- 搜索引擎和浏览器惩罚:Chrome 直接标记 HTTP 页面为「不安全」。百度、谷歌对 HTTPS 站点有排名加权。SEO 团队找到我抱怨排名掉的时候,我第一件事就是让他们迁移 HTTPS。
注意:我踩过最深的一个坑是忽略混合内容。HTTPS 页面里引了 HTTP 的图片或 JS,浏览器会直接阻止或报警。迁移时一定把所有资源统一到 HTTPS,否则证书白配。
迁移前的几个关键认知
在做全站 HTTPS 迁移之前,有些概念你得先心里有数。我列个清单,方便你排查。
| 知识点 | 说明 |
|---|---|
| 证书类型 | DV(域名验证)、OV(组织验证)、EV(扩展验证)。内网用自签名,对外必须用受信任 CA。 |
| 证书链完整性 | 服务器证书 + 中间 CA + 根证书,缺一不可。我之前遇到过一次只配了叶子证书,移动端全部报错。 |
| HSTS(严格传输安全) | 强制浏览器只走 HTTPS,避免首次访问降级攻击。但配置前必须确保全站 HTTPS 已稳定,否则自己把自己锁死。 |
| OCSP 装订 | 减少浏览器手动查询证书吊销列表的开销。推荐开启,能提升首屏速度。 |
我见过最典型的「以为配好却没用」的场景
有一次我帮朋友排查,他的网站明明配了证书,但用户还是总用 HTTP 访问。一查,全站写死了 http:// 的链接,包括 config 里的 CDN 资源地址。嗯,这就很尴尬。
所以我的习惯是:
- 在 Nginx 或负载均衡层做 301 跳转,把所有 HTTP 流量转到 HTTPS。
- 全站代码里搜
http://,全部替换成相对协议//或直接写https://。 - 用
Content-Security-Policy: upgrade-insecure-requests兜底,让浏览器自动升级资源请求。
一句话总结本章
HTTPS 不是锦上添花,是今天互联网的底线。理解握手原理、证书链机制、混合内容风险,你的迁移之路就成功了一半。