网站没 HTTPS?浏览器直接标"不安全",SEO 排名受影响,用户信任度归零。但证书种类多到眼花缭乱——Let's Encrypt 三个月一换太麻烦?ZeroSSL 真的免费?Google 新出的免费证书靠不靠谱?今天把 2026 年主流的免费 SSL 证书方案拉出来对比,附上完整的自动续期配置,一次设置三年无忧。
一、三大免费证书方案对比
方案一:Let's Encrypt
- 价格:完全免费
- 有效期:90 天
- 通配符:支持(需 DNS 验证)
- 多域名:支持 SAN
- 验证方式:HTTP-01、DNS-01
- 续期:全自动
- 兼容性:99.9% 设备信任
- 限制:每周 50 张证书申请限额(个人够用)
方案二:ZeroSSL
- 价格:免费版 3 张证书,付费版 10/月无限
- 有效期:90 天
- 通配符:支持
- 多域名:支持
- 验证方式:HTTP-01、DNS-01、Email
- 续期:支持 ACME 自动续期
- 兼容性:99% 设备信任
- 优势:有 Web 管理界面,不用命令行也能申请
方案三:Google Trust Services(GTS)
- 价格:完全免费
- 有效期:90 天
- 通配符:支持
- 多域名:支持
- 验证方式:HTTP-01、DNS-01
- 续期:全自动
- 兼容性:较新,部分老设备可能不信任
- 优势:Google 背书,与 GCP 生态集成好
选型建议
- 个人博客/小站:Let's Encrypt,生态最成熟,文档最多
- 不想敲命令行:ZeroSSL,网页点几下就搞定
- 已用 Google Cloud:GTS,集成度最高
- 企业正式业务:考虑付费证书(DigiCert、Sectigo),有效期一年,支持 OV/EV 验证
二、Certbot 安装与配置(Let's Encrypt)
- 安装 Certbot
# Ubuntu/Debian
apt-get update
apt-get install certbot python3-certbot-nginx
# CentOS
yum install certbot python3-certbot-nginx
- Nginx 站点配置(申请证书前)
确保域名已解析到服务器,Nginx 配置如下:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$server_name$request_uri;
}
}
- 申请证书
# 单域名
certbot --nginx -d yourdomain.com
# 多域名
certbot --nginx -d yourdomain.com -d www.yourdomain.com
# 通配符(需 DNS 验证,配合插件)
certbot certonly --manual --preferred-challenges dns -d *.yourdomain.com
- 自动续期测试
# 测试续期(不真正执行)
certbot renew --dry-run
# 查看续期定时任务
systemctl list-timers | grep certbot
Certbot 会自动创建 systemd timer,每天检查两次是否需要续期。
三、acme.sh 方案(更轻量,支持多厂商)
acme.sh 是纯 Shell 实现的 ACME 客户端,比 Certbot 更轻量,支持 Let's Encrypt、ZeroSSL、Google Trust Services 等多家 CA。
- 安装 acme.sh
curl https://get.acme.sh | sh
source ~/.bashrc
- 申请 Let's Encrypt 证书
# 注册默认 CA 为 Let's Encrypt
acme.sh --set-default-ca --server letsencrypt
# 申请证书(HTTP 验证)
acme.sh --issue -d yourdomain.com -d www.yourdomain.com --nginx
# 申请通配符(DNS 验证,以 Cloudflare 为例)
export CF_Key="your-cloudflare-api-key"
export CF_Email="your-email@example.com"
acme.sh --issue -d yourdomain.com -d *.yourdomain.com --dns dns_cf
- 安装证书到 Nginx
acme.sh --install-cert -d yourdomain.com \
--key-file /etc/nginx/ssl/yourdomain.com.key \
--fullchain-file /etc/nginx/ssl/yourdomain.com.crt \
--reloadcmd "systemctl reload nginx"
- 切换到 ZeroSSL
# 注册 ZeroSSL 账号(需邮箱)
acme.sh --register-account -m your-email@example.com --server zerossl
# 后续申请自动走 ZeroSSL
acme.sh --issue -d yourdomain.com --nginx --server zerossl
- 切换到 Google Trust Services
acme.sh --set-default-ca --server google
acme.sh --issue -d yourdomain.com --nginx
四、Nginx HTTPS 最佳配置
申请到证书后,Nginx 配置参考:
server {
listen 443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
# 证书路径
ssl_certificate /etc/nginx/ssl/yourdomain.com.crt;
ssl_certificate_key /etc/nginx/ssl/yourdomain.com.key;
# SSL 协议与加密套件
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# 会话缓存
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/yourdomain.com.crt;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# 安全头
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
root /var/www/html;
index index.html index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
}
五、HTTP 强制跳转 HTTPS
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
# Certbot 验证路径
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
# 其他全部跳转 HTTPS
location / {
return 301 https://$server_name$request_uri;
}
}
六、证书监控与告警
证书过期是网站事故的高频原因,建议设置监控:
- 命令行检查证书有效期
echo | openssl s_client -servername yourdomain.com -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -dates
- 简单监控脚本
/opt/ssl-check.sh:
#!/bin/bash
DOMAIN="yourdomain.com"
DAYS_THRESHOLD=7
EXPIRE_DATE=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
EXPIRE_TIMESTAMP=$(date -d "$EXPIRE_DATE" +%s)
NOW_TIMESTAMP=$(date +%s)
DAYS_LEFT=$(( (EXPIRE_TIMESTAMP - NOW_TIMESTAMP) / 86400 ))
if [ $DAYS_LEFT -lt $DAYS_THRESHOLD ]; then
echo "警告: $DOMAIN 证书将在 $DAYS_LEFT 天后过期!" | mail -s "SSL证书过期提醒" admin@yourdomain.com
fi
加入 crontab 每天检查:
0 9 * * * /opt/ssl-check.sh
七、常见问题排查
问题一:证书申请失败,提示验证超时
- 检查域名 DNS 是否解析到正确 IP
- 检查防火墙是否放行 80 端口
- 检查 Nginx 配置中
.well-known路径是否正确
问题二:浏览器提示证书不受信任
- 检查证书链是否完整(是否包含中间证书)
- 检查系统时间是否正确
- 老设备可能不支持 Let's Encrypt 的 ISRG Root X1,需配置兼容链
问题三:续期失败,提示 rate limit
Let's Encrypt 限制:
- 每周每域名最多 50 张证书
- 每周每账户最多 300 次新订单
等待一周或换用其他 CA(ZeroSSL/GTS)。
问题四:通配符证书续期需要手动 DNS 验证
解决方案:使用 DNS API 自动验证(Cloudflare、阿里云、腾讯云都支持),配置好后完全自动化。
八、付费证书什么时候需要
场景 免费证书 付费证书
个人博客 完全够用 没必要
电商网站 够用 建议 OV,显示企业名称
金融/银行 不够用 必须 EV,地址栏显示绿色
老旧设备用户多 可能不兼容 兼容性好
有效期要求一年+ 90天需续期 1-2年,省事
九、2026 年新趋势
- 证书有效期缩短:行业趋势向 90 天甚至 47 天推进,自动化续期成为刚需
- 后量子加密:Google 和 Cloudflare 已开始测试抗量子计算的加密算法
- 自动化程度提升:各大 CA 都在优化 ACME 协议,减少人工干预
总结
SSL 证书不再是技术门槛,而是网站标配。2026 年 Let's Encrypt 依然是免费首选,acme.sh 让多 CA 切换变得简单,配合自动续期和过期监控,完全可以做到" set and forget"。建议今天就把网站的证书检查一遍,确保自动续期正常工作,避免半夜被用户投诉"网站打不开"。
