Let's Encrypt免费SSL证书申请与自动续期教程:手把手教你申请免费SSL证书并配置自动续期,告别证书过期烦恼。本文为tutorial类教程,发布于2026-03-27,已有7次阅读。由ONE社区整理发布,所有教程内容免费开放。
Let's Encrypt免费SSL证书申请与自动续期教程
HTTPS是现代网站的标配,SSL证书则是实现HTTPS的核心。Let's Encrypt提供完全免费的SSL证书,配合自动化工具可以实现证书的自动申请和续期,彻底告别SSL证书过期的烦恼。
Let's Encrypt简介
什么是Let's Encrypt
Let's Encrypt是由互联网安全研究组(ISRG)运营的免费、自动化、开放的证书颁发机构(CA)。它的使命是让整个互联网都能用上HTTPS加密,因此提供完全免费的DV(Domain Validation)SSL证书。证书有效期90天,但可以通过自动化工具实现无限续期。
证书类型说明
Let's Encrypt提供的是DV证书,验证域名所有权即可签发。虽然不像OV/EV证书那样验证组织身份,但对于绝大多数网站来说DV证书已经足够——它提供与付费证书完全相同的加密强度。Let's Encrypt的证书受到所有主流浏览器和操作系统的信任。
使用Certbot申请证书
安装Certbot
Certbot是Let's Encrypt官方推荐的证书管理工具。Ubuntu/Debian安装:apt install certbot python3-certbot-nginx。CentOS安装:yum install certbot python3-certbot-nginx。如果使用Apache,将nginx替换为apache即可。
Nginx自动配置模式
最简单的方式是让Certbot自动配置Nginx:certbot --nginx -d example.com -d www.example.com。Certbot会自动验证域名所有权、申请证书、修改Nginx配置添加SSL相关参数、并设置HTTP到HTTPS的自动跳转。整个过程通常只需几十秒。
手动模式(仅获取证书)
如果不想让Certbot修改Web服务器配置,使用certonly模式:certbot certonly --webroot -w /var/www/html -d example.com。这种方式只获取证书文件,不修改任何配置,适合需要自定义Nginx SSL配置的场景。
DNS验证模式
对于无法通过HTTP验证的场景(如内网服务器、CDN后端),可以使用DNS验证:certbot certonly --manual --preferred-challenges dns -d example.com。Certbot会要求你添加一条TXT DNS记录来证明域名所有权。这种方式还支持申请通配符证书:-d *.example.com。
证书文件说明
申请成功后,证书文件存放在/etc/letsencrypt/live/域名/目录下。关键文件包括:fullchain.pem(完整证书链,Nginx的ssl_certificate配置项使用这个)、privkey.pem(私钥文件,Nginx的ssl_certificate_key配置项使用这个)、chain.pem(中间证书)和cert.pem(域名证书)。
Nginx SSL配置优化
基础SSL配置
在Nginx server块中配置SSL:指定监听443端口、设置ssl_certificate和ssl_certificate_key路径、启用ssl_protocols限定TLSv1.2和TLSv1.3、配置ssl_ciphers使用安全的加密套件、开启ssl_prefer_server_ciphers优先使用服务器端的加密偏好。
安全加固
添加HSTS头(Strict-Transport-Security)告诉浏览器始终使用HTTPS。启用OCSP Stapling加速证书验证。配置ssl_session_cache和ssl_session_timeout优化SSL握手性能。使用ssl_dhparam生成更强的DH参数。
HTTP自动跳转
添加一个监听80端口的server块,使用return 301 https://$host$request_uri将所有HTTP请求重定向到HTTPS。确保这条规则覆盖所有域名和路径。
自动续期配置
Certbot自动续期
Certbot安装后会自动创建cron任务或systemd timer进行证书续期检查。可以通过certbot renew --dry-run测试续期流程是否正常。默认情况下,Certbot在证书到期前30天自动尝试续期。
续期后自动重载Nginx
证书续期后需要重载Nginx才能使新证书生效。在Certbot的续期配置中添加部署钩子:在/etc/letsencrypt/renewal/域名.conf中添加renew_hook = systemctl reload nginx。或者使用命令行参数:certbot renew --deploy-hook "systemctl reload nginx"。
监控证书状态
虽然自动续期很可靠,但建议设置监控作为保障。使用certbot certificates命令查看所有证书的到期时间。可以编写脚本检查证书剩余有效期,不足15天时发送告警通知。也可以使用在线SSL监控服务(如UptimeRobot、SSL Labs)定期检测。
常见问题排查
验证失败(Challenge failed)通常是因为Nginx配置的root路径不正确或80端口被防火墙拦截。确保.well-known/acme-challenge/路径可以从外网访问。DNS验证失败检查TXT记录是否正确添加且已生效(等待DNS传播)。证书续期失败检查Certbot日志/var/log/letsencrypt/letsencrypt.log排查原因。
多域名与通配符证书
一个证书可以包含多个域名,使用-d参数添加即可。通配符证书(.example.com)只能通过DNS验证方式申请,且只匹配一级子域名。如果同时需要主域名和通配符,需要:certbot certonly --manual --preferred-challenges dns -d example.com -d .example.com。
总结
Let's Encrypt让SSL证书从付费商品变成了免费基础设施。通过Certbot的自动化能力,证书的申请和续期几乎不需要人工干预。建议所有网站都启用HTTPS,不仅是安全需要,也是搜索引擎排名的加分项。配置完成后定期检查自动续期是否正常工作即可。