免费SSL证书全攻略:从申请到自动续期的零成本HTTPS方案
HTTPS已经成为网站的标配,没有SSL证书的网站在浏览器地址栏会显示"不安全",搜索引擎还会降低排名。很多人以为SSL证书很贵,实际上自从Let's Encrypt推出免费证书后,HTTPS完全可以是零成本的。
1. Let's Encrypt:免费SSL的王者
Let's Encrypt由Mozilla、Cisco、EFF等组织联合发起,提供完全免费的DV(域名验证)SSL证书。每次申请有效期90天,支持自动续期。
安装certbot(官方客户端):
# Debian/Ubuntu
apt install certbot python3-certbot-nginx
# 一键获取并配置Nginx
certbot --nginx -d yourdomain.com -d www.yourdomain.comcertbot会自动修改Nginx配置,添加SSL证书路径并启用HTTPS。如果你想手动配置:
# 仅获取证书,不修改配置
certbot certonly --webroot -w /var/www/html -d yourdomain.com证书保存在/etc/letsencrypt/live/yourdomain.com/下,包含fullchain.pem和privkey.pem。
2. 自动续期——别让证书过期
Let's Encrypt证书只有90天有效期,必须自动续期。certbot安装时会自动添加systemd定时器:
# 检查定时器状态
systemctl status certbot.timer
# 手动测试续期
certbot renew --dry-run也可以在crontab中添加:
0 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"续期成功后自动重载Nginx使新证书生效。
3. Cloudflare方式——全托管的SSL
如果你使用Cloudflare做DNS和CDN,SSL管理可以完全交给它们。Cloudflare提供灵活的SSL模式:
Flexible(不推荐):浏览器到Cloudflare加密,Cloudflare到源站不加密。适合无法部署证书的古老服务器。
Full:浏览器到Cloudflare加密,Cloudflare到源站也加密。源站可以用自签名证书。
Full(Strict)(推荐):两端都加密,且源站证书必须是有效的CA签发证书。最安全。
配置步骤:在Cloudflare的SSL/TLS页面选择Full(Strict)模式,然后在源站用certbot获取Let's Encrypt证书(15年Origin CA证书也可以免费生成)。
4. DNS验证——无服务器也能申请证书
有时你还没有Web服务器,或者服务器在内网无法被外部访问,这时可以用DNS验证。
certbot certonly --manual --preferred-challenges dns -d yourdomain.comcertbot会给你一个TXT记录值,你需要手动添加到DNS解析中。验证通过后获取证书。
对于使用Cloudflare DNS的用户,可以用certbot-dns-cloudflare插件实现全自动:
apt install python3-certbot-dns-cloudflare
certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/cf.ini -d yourdomain.com5. 通配符证书——一证覆盖所有子域名
Let's Encrypt也支持通配符证书,但必须通过DNS验证:
certbot certonly --manual --preferred-challenges dns -d '*.yourdomain.com' -d yourdomain.com通配符证书覆盖所有二级子域名(blog.yourdomain.com、api.yourdomain.com等),但不能覆盖更深的子域名(a.b.yourdomain.com需要单独的证书)。
6. 常见问题
OCSP Stapling:开启后Nginx在TLS握手时直接附上证书有效性证明,减少客户端查询OCSP服务器的延迟。
HSTS头:add_header Strict-Transport-Security "max-age=63072000" 告诉浏览器在接下来两年内只能通过HTTPS访问,防范降级攻击。
证书监控:用uptimerobot或自建脚本监控证书到期时间,在续期失败时能及时发现。echo | openssl s_client -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -dates 查看证书有效期。