19 10 月 2026
小程序要 HTTPS、PWA 要 HTTPS、搜索引擎排名也要 HTTPS——2026 年没有理由再跑明文 HTTP。Let's Encrypt 让证书完全免费,acme.sh 让续期完全自动。这篇把证书选型、申请、部署、监控一次讲透。基础部署见HTTPS 强制跳转与安全响应头。

一、证书类型:三分钟选对

按验证强度

类型验证内容价格适合
DV(域名验证)只证明你控制域名免费(Let's Encrypt)个人、博客、内部系统
OV(组织验证)验证企业信息几百/年企业官网
EV(扩展验证)最严格,地址栏显示公司名上千/年金融、电商

结论:99% 的场景 DV 证书就够——加密强度上三种完全一样,区别只在"身份展示"。

按覆盖范围

类型保护场景
单域名blog.com一个站一张
通配符*.blog.com 所有子域名多子域名站点,一张搞定
多域名(SAN)几个指定域名相关小站群

通配符需要 DNS 验证(第二节),一次配好,以后加子域名不用再申请。

二、Let's Encrypt + acme.sh:免费且自动

Let's Encrypt 的证书 90 天有效期——短有效期是设计使然(鼓励自动化),别慌,续期全自动。工具选 acme.sh(纯 Shell、无依赖、支持几十家 DNS API):

# 安装
curl https://get.acme.sh | sh
source ~/.bashrc

方式 1:HTTP 验证(有公网 Web 服务的单域名)

# 域名已在 Nginx 跑着,直接用 --nginx 模式(自动改配置、自动 reload)
acme.sh --issue -d blog.yourdomain.com --nginx

# 证书生成在 ~/.acme.sh/blog.yourdomain.com_ecc/ 下
# 部署到 Nginx 用的目录
acme.sh --install-cert -d blog.yourdomain.com \
  --key-file       /etc/nginx/ssl/blog.yourdomain.com.key \
  --fullchain-file /etc/nginx/ssl/blog.yourdomain.com.pem \
  --reloadcmd     "systemctl reload nginx"

--install-cert 会把证书拷到固定路径,且续期后自动重载 Nginx——配一次,永久无忧。

方式 2:DNS 验证(通配符/无 Web 服务)

用 DNS API 自动添加 TXT 记录完成验证。以阿里云 DNS 为例:

export Ali_Key="你的AccessKeyId"
export Ali_Secret="你的AccessKeySecret"

# 通配符证书,一次申请所有子域名通用
acme.sh --issue --dns dns_ali -d yourdomain.com -d "*.yourdomain.com"

acme.sh --install-cert -d yourdomain.com \
  --key-file       /etc/nginx/ssl/yourdomain.com.key \
  --fullchain-file /etc/nginx/ssl/yourdomain.com.pem \
  --reloadcmd     "systemctl reload nginx"

其他 DNS 商(DNSPod/Cloudflare/华为云)把 dns_ali 换成对应参数即可,acme.sh 文档有完整列表。DNS API 密钥用子账号 + 最小权限,别用主账号 AK——泄露了等于域名控制权泄露。

NAT 型服务器的特别说明

HTTP 验证需要 80 端口可访问。NAT 型没有独立 IP 时:

  1. 确认商家支持 80 端口映射(部分商家封 80/443,购前必问)
  2. 或用 DNS 验证(不依赖 80 端口,只要有 DNS API)——NAT 型首选 DNS 验证
  3. 确认 443 映射用于对外服务

购前问清楚端口映射政策,是 NAT 型跑 Web 服务的前提,见NAT 端口映射完全指南和小程序服务器选购。

三、Nginx 配置:证书用起来

server {
    listen 443 ssl;
    server_name blog.yourdomain.com;

    # 证书(fullchain 含中间证书,顺序别反)
    ssl_certificate     /etc/nginx/ssl/blog.yourdomain.com.pem;
    ssl_certificate_key /etc/nginx/ssl/blog.yourdomain.com.key;

    # 现代 TLS 配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;

    # HSTS:告诉浏览器以后只走 HTTPS(慎用,见下)
    add_header Strict-Transport-Security "max-age=31536000" always;

    location / {
        try_files $uri $uri/ =404;
    }
}

# HTTP 全量跳 HTTPS
server {
    listen 80;
    server_name blog.yourdomain.com;
    return 301 https://$host$request_uri;
}

配置细节见Nginx 安装与配置,安全响应头全家桶见HTTPS 强制跳转与安全响应头。

HSTS 警告:max-age=31536000 一旦生效,浏览器会强制 HTTPS 一年——期间你没法回退 HTTP。确定永久上 HTTPS 再加,测试期先别开。

四、常见坑:证书链、混合内容、过期

1. 证书链不完整

症状:电脑浏览器正常,部分手机/老客户端报"不受信任"。原因:只装了叶子证书,缺中间证书。用 --fullchain-file(pem)而不是 --cert-file(crt),一条命令解决。

2. 混合内容(Mixed Content)

HTTPS 页面里引了 HTTP 资源(图片、JS),浏览器地址栏锁变灰/报警。修法:全站资源改 HTTPS 或协议相对路径。静态站批量替换:

grep -rl "http://" public/ | xargs sed -i 's|http://yourdomain|https://yourdomain|g'

3. 续期"忘了"

acme.sh 自动续期,但三种情况会翻车:

  • cron 挂了(有人清理 crontab 时误删)
  • DNS API 密钥过期/轮换(DNS 验证的证书)
  • 域名 DNS 改了(HTTP 验证的指向变了)

所以:证书监控是必须的,见下节。

4. 多服务器同步

证书在服务器 A 上,LB 后面还有 B——续期后只更新了 A。用 acme.sh 的 --reloadcmd 同步分发,或集中到 LB 统一终止 SSL。

五、证书监控:过期事故的都是没监控的

证书过期 = 全站 HTTPS 崩溃 + 浏览器大红页,是完全可预防的事故。三层监控:

1. 本地检查(cron 每日):

# 检查 14 天内过期的证书并告警
0 9 * * * acme.sh --list 2>/dev/null | head -20 | mail -s "证书状态" admin@yourdomain.com

或用 openssl 直接查远程证书:

echo | openssl s_client -servername blog.yourdomain.com -connect blog.yourdomain.com:443 2>/dev/null | openssl x509 -noout -dates

2. 外部监控:Uptime Kuma 加一个"证书过期"监控项(支持监控证书剩余天数),提前 30 天告警

3. 日历提醒:土办法但可靠——在手机日历设"每 60 天检查证书",双通道兜底

监控告警体系见Prometheus 监控入门。

六、内网/自签名证书

纯内网服务(管理面板、内部 API)不想上公网 CA 的折中:

# 生成自签名(10 年)
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
  -keyout internal.key -out internal.pem \
  -subj "/CN=internal.local" \
  -addext "subjectAltName=DNS:internal.local,DNS:*.internal.local"

客户端(浏览器/手机)需要手动信任根证书(导入并勾选"始终信任")。适合设备可控的内网,公网服务别用——用户不可能为你的自签名证书点"继续"。


结语

HTTPS 的三句话:Let's Encrypt 让证书免费、acme.sh 让续期自动、证书监控让过期事故归零。DV 证书 + 通配符 + DNS API 验证 + 自动续期,是个人和小团队的标准答案——半小时配好,从此忘记证书的存在。

需要跑 HTTPS 服务的服务器,可以看看财富云计算:NAT 型云服务器支持 443 映射(购前确认)、SSD 系统盘,价格比独立 IP 机型省一半以上——网站、小程序后端、API 服务这类要 HTTPS 的场景,NAT 型配 DNS 验证证书刚好对症。

延伸阅读
  1. Homepage 个人仪表盘:把散落各处的服务收进一个首页
  2. 数据备份体系完全手册:从随手拷到 3-2-1,让数据永远丢不了
  3. 压测与容量规划:上线前就知道你的服务器能扛多少人
  4. AdGuard Home 内网 DNS:全家去广告、防劫持、内网解析一站解决
  5. Hugo 静态博客搭建:秒开的博客,部署只要一个目录
  6. 安全应急响应完全手册:服务器被入侵后,按这个流程走
  7. 游戏服运营完全手册:从开服到停服,把一台服务器运营成百年老店
  8. Loki 日志体系搭建:轻量级日志聚合,Grafana 里查遍所有服务器
更多阅读
  1. 上一篇:数据备份体系完全手册:从随手拷到 3-2-1,让数据永远丢不了
  2. 下一篇:Homepage 个人仪表盘:把散落各处的服务收进一个首页
发表评论 2