SSL 证书是什么:2026 年免费方案 + 验证命令

2026 年免费 SSL 是默认。用这些 Caddyfile / Nginx / curl 命令验证证书、设自动续签、不再被注册商套路。

SSL 证书以前是真要花钱——一年 50-200 美元买 https:// 的特权。2026 年在独立开发者场景下基本是套路。Let’s Encrypt 和 Cloudflare 免费发证书,浏览器同等信任。下面给出心智模型、验证命令和自托管配置。

问题背景

SSL(技术上是 TLS)证书是一份加密文件,证明你正连的域名就是证书签发对应的域名。浏览器信任由 Certificate Authority(CA)签发的证书。Let’s Encrypt 是免费、自动化、浏览器信任的 CA。多数现代 host 自动从它那签证书。

判断标准

  • 站点 https:// 加锁——已经有 SSL 了。
  • 注册商邮件说「限时 SSL 优惠」——销售话术,不是必须。
  • host dashboard 显示「certificate active」或「SSL provisioned」——完事。
  • 浏览器报「不安全」——多半是配置问题,不是缺付费证书。
  • openssl s_client -connect yourdomain.com:443 返回有效证书链。

快速结论

独立开发者不要买 SSL。用 host(Vercel / Firebase / Netlify / Cloudflare Pages、非托管站用 Cloudflare)的免费证书。只有企业级 EV(扩展验证)需求才考虑付费——独立站几乎用不上。

开始前准备

  • 域名 DNS 已指向 host。
  • host 的 “Add domain” 流程已完成。
  • 装好 curlopenssl 做验证。

实操步骤

  1. 多数 host 自动签发。 Vercel、Netlify、Firebase、Cloudflare Pages、Render、Fly——加域名后等 “SSL provisioned”(DNS 正确后通常 < 1 小时)。

  2. curl 验证:

curl -vI https://yourdomain.com 2>&1 | grep -E 'subject:|issuer:|HTTP|Verify return code'
# subject: CN=yourdomain.com
# issuer: C=US, O=Let's Encrypt, CN=R3
# HTTP/2 200
# Verify return code: 0 (ok)
  1. openssl 看证书细节:
echo | openssl s_client -showcerts -servername yourdomain.com -connect yourdomain.com:443 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates
# subject= /CN=yourdomain.com
# issuer= /C=US/O=Let's Encrypt/CN=R3
# notBefore=May  1 00:00:00 2026 GMT
# notAfter=Jul 30 00:00:00 2026 GMT       ← Let's Encrypt 90 天
  1. VPS 自托管——用 Caddy(零配置 Let’s Encrypt):
# /etc/caddy/Caddyfile
yourdomain.com {
    root * /var/www/yoursite
    file_server
    encode gzip
}

www.yourdomain.com {
    redir https://yourdomain.com{uri} permanent
}

sudo systemctl reload caddy,Caddy 永久自动续签。

  1. 自托管用 Nginx + Certbot:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
# 按提示同意条款,自动改 Nginx 配置 + 自动续签
sudo systemctl list-timers | grep certbot
# certbot.timer ... (每天两次自动续签)

不实际续签验证逻辑可走通:

sudo certbot renew --dry-run
  1. Cloudflare 前置——SSL 模式选 “Full (strict)”。 Dashboard → SSL/TLS → “Full (strict)“。这要求源站有有效证书(Let’s Encrypt 或自签)。“Flexible” 是 Cloudflare 到源站走 HTTP,不安全。

  2. HTTP 强制跳转 HTTPS: 多数 host 自动。自托管时 Caddy 自带;Nginx:

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://$host$request_uri;
}
  1. 设过期监控。 cron 每周 ping 一次:
# scripts/cert-expiry-check.sh
DAYS=$(echo | openssl s_client -servername "$DOMAIN" -connect "$DOMAIN:443" 2>/dev/null \
  | openssl x509 -noout -enddate | sed 's/notAfter=//' \
  | xargs -I{} date -d "{}" +%s)
NOW=$(date +%s)
REMAINING=$(( (DAYS - NOW) / 86400 ))
[ "$REMAINING" -lt 14 ] && echo "WARN: $DOMAIN 证书 $REMAINING 天后过期"

执行检查清单

  • curl -vI 返回的证书 CN 正确。
  • openssl x509 -noout -dates 显示未来过期。
  • certbot renew --dry-run 或平台文档确认自动续签生效。
  • Cloudflare(如用)SSL 模式 “Full (strict)”。
  • HTTP 自动 301 到 HTTPS。

上线后验证

容易踩的坑

  • 给注册商付 50 美元一年让他们装 SSL——纯利润。
  • 给独立博客买 EV(扩展验证)证书——浏览器早就不为 EV 显示特殊 UI,对终端用户和 DV 没差。
  • 关掉 Let’s Encrypt 自动续签然后忘了,90 天后访客撞证书报错。
  • Cloudflare 用「Flexible」SSL——Cloudflare 到源站走 HTTP,不安全还破坏某些流程。永远「Full (strict)」。
  • 不控制续签时在代码 / header 里 pin 特定证书——自动续签会断,用户投诉了你才发现。

FAQ

  • 免费证书和付费一样安全吗?: 一样。算法相同、根 CA 相同、所有主流浏览器同等信任。
  • Let’s Encrypt 证书多久续一次?: 90 天。自动化做的——你不应该需要操心。
  • SSL 和 TLS 有啥区别?: TLS 是现代协议名,SSL 是早期名仍口语化在用。今天说「SSL 证书」意思就是 TLS 证书。
  • 需要通配证书吗?: 一个证书覆盖多个子域名才需要。Let’s Encrypt 通过 DNS challenge 提供通配证书。多数 host 替你搞定。
  • HSTS preload 是什么?: .dev.app 已 preload,浏览器拒绝 HTTP。其它 TLD 可加 Strict-Transport-Security 响应头主动加入。

相关阅读

标签: #独立开发 #域名 #SSL #入门