SSL 证书 2026 完整指南 · Let's Encrypt / 商用证书 / 配置 / 续期
90% 团队 Let's Encrypt 免费版就够了。这篇拆解什么时候该买商用证书 / 怎么配置 SSL Labs A+ / 续期失败怎么救 / 通配符证书坑。
TL;DR:Let's Encrypt 90 天自动续期免费版,够 90% 团队用。 真正值得买商用证书的只有三种场景:① 需要 EV 证书显示公司名 ② 通配符要走非 ACME 路径 ③ 严合规要求(医疗/金融)。这篇按真实使用场景拆给你听。
90% 团队不需要付费 SSL
10 年前 SSL 证书 $50-$500/年很正常。2016 年 Let's Encrypt 改变了游戏规则。今天免费 SSL 已经是行业默认,付费证书的边际价值非常窄。
实际数据:我们 200+ 客户中:
- 174 个用 Let's Encrypt(87%)
- 18 个用 Cloudflare Universal SSL(免费)(9%)
- 8 个买商用证书(4%,主要 EV 或合规要求)
Let's Encrypt 怎么用 · 3 种部署路径
1. Cloudflare 代理(最省事)
如果你的域名 NS 在 Cloudflare,SSL 完全自动化:
- 切到 Full (Strict) 模式
- Cloudflare 自动给你和访客之间的 SSL(EDGE 证书)
- 你的源服务器再装一个 LE 证书(用 Cloudflare ↔ Origin)
完事。每 90 天自动续,0 配置。
2. Caddy(零配置自动 SSL)
Caddy webserver 内置 LE 集成,Caddyfile 一行:
yourdomain.com {
reverse_proxy localhost:3000
}Caddy 自动:
- 申请 SSL
- 续期 60 天前自动尝试
- 失败重试 3 次
- HSTS / OCSP Stapling / HTTP/2 默认开
新项目用 Caddy 替代 Nginx,SSL 这件事就完全不用想了。
3. Nginx + Certbot(传统方案)
经典组合,但要自己配续期 cron:
# 安装
apt install certbot python3-certbot-nginx
# 申请证书 + 自动改 Nginx 配
certbot --nginx -d yourdomain.com -d www.yourdomain.com
# 续期(默认每天一次,实际只在 < 30 天剩余时续)
crontab -e
# 加这一行:
0 3 * * * /usr/bin/certbot renew --quietSSL Labs A+ 配置(从 B+ 提到 A+)
SSL Labs(https://ssllabs.com/ssltest/)是行业标准评分。默认 LE + 默认 Nginx = 通常 B+。要拿 A+ 需要:
1. HSTS
强制 HTTPS,告诉浏览器以后所有连接默认 HTTPS:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;max-age=63072000 = 2 年,preload 让浏览器内置(Chromium / Firefox 等)。
2. OCSP Stapling
减少 SSL 握手时间(浏览器不用单独查证书状态):
ssl_stapling on;
ssl_stapling_verify on;
resolver 1.1.1.1 8.8.8.8 valid=300s;3. 现代 TLS 版本 + cipher
禁用 TLS 1.0 / 1.1(老协议有漏洞):
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;4. DH 参数
# 生成 4096 位 DH 参数(只跑一次,5-15 分钟)
openssl dhparam -out /etc/nginx/dhparam.pem 4096ssl_dhparam /etc/nginx/dhparam.pem;完整 Nginx config 模板:
server {
listen 443 ssl http2;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
# Modern TLS
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512';
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
# OCSP
ssl_stapling on;
ssl_stapling_verify on;
resolver 1.1.1.1 8.8.8.8 valid=300s;
# HSTS
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
# 你的应用
location / {
proxy_pass http://localhost:3000;
}
}
# 80 → 443 重定向
server {
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}跑 https://ssllabs.com/ssltest/analyze.html?d=yourdomain.com,5 分钟出 A+ 评分。
通配符证书 (*.yourdomain.com)
LE 通配符证书需要 DNS-01 验证(普通的 HTTP-01 不支持通配符)。配置方式因 DNS 提供商而异:
Cloudflare DNS
# 装 cloudflare 插件
apt install python3-certbot-dns-cloudflare
# 配置 API token
# /etc/letsencrypt/cf.ini
echo "dns_cloudflare_api_token = YOUR_CF_API_TOKEN" > /etc/letsencrypt/cf.ini
chmod 600 /etc/letsencrypt/cf.ini
# 申请通配符
certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /etc/letsencrypt/cf.ini \
-d yourdomain.com -d '*.yourdomain.com'阿里云 DNS
用 acme.sh 替代 certbot,支持阿里云 DNS API:
curl https://get.acme.sh | sh
export Ali_Key="your-api-key"
export Ali_Secret="your-api-secret"
acme.sh --issue --dns dns_ali -d yourdomain.com -d '*.yourdomain.com'什么时候买商用证书
只有 3 个真实场景:
1. EV 证书(Extended Validation)
显示公司名在浏览器地址栏(2019 年后大多数浏览器已经不显示绿色公司名,但有些金融 / 医疗合规要求仍需)。
价格:$200-$1000/年(DigiCert / Sectigo) 适合:银行 / 医疗 / 政府客户
2. 通配符 + 多域名 + 严合规
LE 通配符免费,但:
- 不支持「多顶级域名」一证(例
*.com.cn+*.com一张证) - 不支持 IP 地址 SAN
- 90 天续期不接受合规审计要求长有效期
商用证书可以一年到期,审计时省事。
3. 你的 stack 不支持 ACME
Apache / Tomcat / IIS 老版本对 ACME 集成不好,certbot 跑起来很麻烦。这种情况下,买一张 1 年商用证 vs 升级 stack 怎么算都更便宜。
不要买商用证书的理由:
- 「商用更安全」—— 加密强度完全一样(都是 RSA-2048 / ECC)
- 「商用支持更好」—— LE 社区比大部分商家客服反应快
- 「商用浏览器更信任」—— LE 已经被所有主流浏览器信任
续期失败的应急 SOP
证书 30 天内到期但续期一直失败,按这个顺序:
监控 SSL 到期 · 3 种方法
不要靠人记。
1. 自建 cron(简单)
#!/bin/bash
# /usr/local/bin/ssl-expiry-check.sh
DOMAIN=$1
DAYS_LEFT=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:443 2>/dev/null \
| openssl x509 -noout -enddate \
| sed 's/notAfter=//' \
| xargs -I {} date -d "{}" +%s \
| awk -v now=$(date +%s) '{print int(($1 - now) / 86400)}')
if [ $DAYS_LEFT -lt 30 ]; then
echo "ALERT: $DOMAIN expires in $DAYS_LEFT days" | mail -s "SSL alert" [email protected]
fi加到 crontab 每天跑。
2. 第三方监控(Uptime Robot / SSL Labs)
免费版都支持 SSL 到期监控。设 30 天提醒。
3. ClouBay 资产托管
我们的客户面板自动跟踪所有域名 SSL,30/14/3 天三道提醒,异常立刻应急。
FAQ
Q:多个子域名要不要单证还是通配符? A:看你子域名增长速度。< 5 个子域名固定:每个独立证(LE 多 domain 证书),好理解。> 5 个或动态生成:通配符,一张证省事。
Q:子域名 cert 和主域名怎么共存?
A:LE 单张证可以同时含主域名 + 子域名 + 通配符。certbot certonly -d yourdomain.com -d www.yourdomain.com -d '*.yourdomain.com'。
Q:Cloudflare Origin Certificate 是什么? A:Cloudflare 给你源服务器用的「内部」证书,有效期 15 年,只对 Cloudflare 信任(其他人看到「不受信任」)。只在 Cloudflare 在前的架构下用,源服务器装这个,边缘 ↔ 源加密 + 续期成本 0。
Q:LE 速率限制是什么?会不会被 ban? A:LE 限速:每 7 天每域名最多 50 张证书。正常使用绝对不会触发(你一年也就续 4-5 次)。除非脚本写错跑死循环了。
Q:HSTS preload 怎么撤?
A:hstspreload.org 提交「removal request」,移除后等浏览器更新(Chrome 一年 4 次大版本,Firefox 类似)。全部用户彻底清掉 6-18 个月。慎用。
ClouBay 创始人。10 年全栈工程师 + 出海运营,带过 50+ 家中小企业从国内业务跑到 Stripe / Paddle 收款上线。最近痴迷于把无聊的合规、续费、对账自动化掉,这样客户能少接 6 家供应商的电话。