免费SSL证书全攻略:从申请到自动续期的零成本HTTPS方案

免费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.com

certbot会自动修改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.com

certbot会给你一个TXT记录值,你需要手动添加到DNS解析中。验证通过后获取证书。

对于使用Cloudflare DNS的用户,可以用certbot-dns-cloudflare插件实现全自动:

apt install python3-certbot-dns-cloudflare
certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/cf.ini -d yourdomain.com

5. 通配符证书——一证覆盖所有子域名

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 查看证书有效期。

Last modification:July 12th, 2026 at 03:59 pm

Leave a Comment