Vibe Tutorial
域名解析原理与网络接入

12.8 SSL证书配置实战

Tip

买了域名,配了 DNS,现在你的网站可以访问了,但浏览器地址栏显示“不安全”。你需要配置SSL 证书,把 http:// 变成 https://


1. 为什么要学这个?

你配置了 Nginx,监听 80 端口。 访问 http://example.com 正常。 访问 https://example.com 报错 Connection Refused

因为 HTTPS 是一套完全不同的系统,它需要监听 443 端口,并且需要公钥私钥才能工作。没有它,你的网站在现代浏览器里就是个“二等公民”。


2. 核心概念:Certificate (证书)

证书是一个文件 (.pem.crt)。 它包含:

  1. 域名:这张证发给谁的?(example.com)
  2. 有效期:过期时间。
  3. 颁发机构 (CA):谁盖的章?(Let's Encrypt / DigiCert)
  4. 公钥:加密用的钥匙。

3. 解决方案 (HOW)

3.1 场景 A:使用 Vercel (最推荐)

什么都不用做。 只要你在 Vercel 后台绑定了域名,它会自动为你申请并部署 Let's Encrypt 证书。 全自动,免费,自动续期。

3.2 场景 B:使用 Nginx (VPS 自建)

如果你买了一台阿里云 ECS,需要手动配。我们使用 Certbot 自动化工具。

# 1. 安装 Certbot
sudo apt install certbot python3-certbot-nginx

# 2. 申请证书 (自动修改 nginx 配置)
sudo certbot --nginx -d example.com -d www.example.com

3.3 证书验证流程图

graph TD
    User["用户访问"] -->|"Step 1: HTTP (80)"| Nginx["Nginx 服务器"]
    
    Nginx -->|"Step 2: 301 重定向"| HTTPS["HTTPS (443)"]
    
    HTTPS -->|"Step 3: 读取证书"| Cert["/etc/letsencrypt/live/..."]
    
    Cert -->|"Step 4: 握手成功"| User
    
    style HTTPS fill:#c8e6c9,stroke:#2e7d32
    style Cert fill:#fff9c4,stroke:#fbc02d

4. 避坑指南

❌ 不要这样做 ✅ 应该这样做 为什么
HTTP/HTTPS 共存 强制 HTTPS 应该配置 Nginx 把所有 80 端口的流量 301 重定向到 443。允许 HTTP 访问会给用户留下不安全的后门。
一个个申请 通配符证书 如果你有 a.example.com, b.example.com 等几十个子域名,申请一个 *.example.com 通配符证书会方便很多。
不监控 UptimeRobot 监控 虽然 Certbot 会自动续期,但万一 Cron 任务挂了呢?设置一个外部监控,在证书过期前 7 天给你发邮件。

5. 真实案例

Story

2014年,中间人攻击 (MITM)

某黑客在机场搭建了一个免费 WiFi。A 用户连接后访问了公司内网(HTTP)。 黑客拦截了请求,中间转发,轻松拿到了 A 用户的账号密码。 如果是 HTTPS,浏览器会校验服务器发来的证书。黑客没有公司内网的私钥,无法伪造合法的证书。浏览器会弹出巨大的红屏警告,阻止 A 用户继续访问。

Vibe 心法:证书是网站的“身份证”。手动操作是引起故障的高温区。不要手动上传证书,使用 ACME 协议全自动申请与续期。将重复的维护任务交给机器,是保证网站 7x24 小时“小锁头”长绿的唯一方案。


6. 本章小结

  1. 标配:现在没有 HTTPS 的网站就是裸奔。
  2. Vercel:让 HTTPS 变得像空气一样自然(无感)。
  3. Cron:自建服务务必检查 certbot renew 的定时任务是否正常。