一、HTTPS 基础原理与必要性

聊 HTTPS 之前,我得先说句大实话。

很多团队做全站迁移,第一反应是「不就是买个证书装上吗?」。嗯,我早期也这么想。直到有一次帮客户审计安全,发现他们虽然配了 HTTPS,但混合内容一堆,中间人照样能改页面。

所以这一章,咱们把底层的原理和必要性捋清楚。底子打不牢,后面全是坑。

HTTP 和 HTTPS 到底差在哪?

说白了,HTTP 是明文传输。你发什么,中间路由器、Wi-Fi 热点、ISP 全能看到。HTTPS 就是在 HTTP 外面套了一层 TLS(传输层安全性协议),做了三件事:加密、身份验证、完整性校验。

对比项 HTTP HTTPS
数据传输 明文,可被嗅探 加密,窃听者看到的是乱码
身份验证 无,任何人可伪装服务器 证书链,客户端可验证服务器身份
数据完整性 无,中间人可篡改 MAC 校验,篡改会被发现
默认端口 80 443

你想想看,如果银行登录页走 HTTP,密码直接在网络上裸奔。这画面,是不是不忍直视?

SSL/TLS 握手 —— 几分钟搞懂核心流程

我个人习惯把 TLS 握手拆成三个阶段来讲。记牢这三个,后面的优化和排错就清楚多了。

  1. 证书验证:客户端拿到服务器证书,检查是否由受信任的 CA 签发,域名是否匹配,是否过期或吊销。
  2. 密钥协商:双方通过非对称加密(RSA 或 ECDHE)协商出一个临时对称密钥。
  3. 对称加密通信:后续所有数据用这个对称密钥加密传输。
我的经验:我帮一家电商做过性能审计,发现他们每次页面加载要握手 3 次(页面、静态资源、API 各一次)。启用 TLS 会话复用后,首屏时间直接降了 35%。别小看这点优化。
TLS 1.3 握手核心流程 客户端 服务端 ① ClientHello(支持的加密套件) ② ServerHello + 证书 + 密钥交换参数 客户端验证证书链 ③ 客户端密钥交换 + Finished 服务端验证 + Finished ④ 对称加密通信开始

为什么必须上 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 不是锦上添花,是今天互联网的底线。理解握手原理、证书链机制、混合内容风险,你的迁移之路就成功了一半。