域名解析原理与网络接入
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)。
它包含:
- 域名:这张证发给谁的?(
example.com) - 有效期:过期时间。
- 颁发机构 (CA):谁盖的章?(Let's Encrypt / DigiCert)
- 公钥:加密用的钥匙。
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. 本章小结
- 标配:现在没有 HTTPS 的网站就是裸奔。
- Vercel:让 HTTPS 变得像空气一样自然(无感)。
- Cron:自建服务务必检查
certbot renew的定时任务是否正常。