C
Cloubay
ClouBay 笔记
资产托管2026-05-1010 分钟阅读

SSL 证书 2026 完整指南 · Let's Encrypt / 商用证书 / 配置 / 续期

90% 团队 Let's Encrypt 免费版就够了。这篇拆解什么时候该买商用证书 / 怎么配置 SSL Labs A+ / 续期失败怎么救 / 通配符证书坑。

l
lunarhash
ClouBay 创始人 · 全栈工程师

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 --quiet

SSL 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 4096
ssl_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 天三道提醒,异常立刻应急。

/custody
资产托管
域名 / SSL / 服务器 一站盯 · ¥480 / 月起

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 个月。慎用。

和这篇文章相关的服务
关于作者
l
lunarhash
ClouBay 创始人 · 全栈工程师

ClouBay 创始人。10 年全栈工程师 + 出海运营,带过 50+ 家中小企业从国内业务跑到 Stripe / Paddle 收款上线。最近痴迷于把无聊的合规、续费、对账自动化掉,这样客户能少接 6 家供应商的电话。

讨论
评论会在我们审核后显示,通常 24h 内。

把这件事交给 ClouBay

你不用自己跑一遍。30 分钟咨询免费,我们帮你算账 + 给方案。

免费咨询