小程序要 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 时:
- 确认商家支持 80 端口映射(部分商家封 80/443,购前必问)
- 或用 DNS 验证(不依赖 80 端口,只要有 DNS API)——NAT 型首选 DNS 验证
- 确认 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 -dates2. 外部监控: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 验证证书刚好对症。
延伸阅读
- Homepage 个人仪表盘:把散落各处的服务收进一个首页
- 数据备份体系完全手册:从随手拷到 3-2-1,让数据永远丢不了
- 压测与容量规划:上线前就知道你的服务器能扛多少人
- AdGuard Home 内网 DNS:全家去广告、防劫持、内网解析一站解决
- Hugo 静态博客搭建:秒开的博客,部署只要一个目录
- 安全应急响应完全手册:服务器被入侵后,按这个流程走
- 游戏服运营完全手册:从开服到停服,把一台服务器运营成百年老店
- Loki 日志体系搭建:轻量级日志聚合,Grafana 里查遍所有服务器

[...]}证书自动续期见SSL 证书完全指南,反代细节见Nginx 反向代理实战。暴露面考量:仪表盘会暴露你有哪些服务(信息搜集价值),建议:只在内网/WireGuard 内网用(组网方案)或对外时加 Basic Auth,别裸奔Docker socket 只读挂载已经是权限最小化——绝不给读写权限,那等于把宿主机交出去(Docker 逃逸风险,见Docker 安全加固)六、和其他工具的分工仪表盘生态里各[...]
2026-10-19 回复
[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-19 回复