Certbot 通过 Apache 插件自动完成 Let's Encrypt 证书申请与续签:先验证域名控制权(HTTP-01 挑战需 80 端口开放且直达 Apache),再更新证书并重载 Apache 配置;需确保 Apache 运行、DNS 解析正确、防火墙放行 80 端口,并使用 --apache 插件配置虚拟主机与 SSL 参数。

Apache 服务器使用 Certbot 自动续签 Let's Encrypt 证书,核心在于让 Certbot 能够验证域名控制权(通过 HTTP-01 或 TLS-ALPN-01 挑战),并在验证成功后自动更新证书文件,再通知 Apache 重载配置。关键不是“Apache 利用 Certbot”,而是 Certbot 配合 Apache 完成验证与部署。
确保 Apache 已正确配置并监听 80 端口
Let's Encrypt 的 HTTP-01 验证要求目标域名能通过 HTTP(端口 80)访问,且能响应特定的 `.well-known/acme-challenge/` 路径请求。Certbot 默认使用 `--apache` 插件时会自动配置临时虚拟主机,但前提是:
- Apache 正在运行,且 80 端口未被其他服务占用
- 域名 DNS 已解析到该服务器 IP
- 防火墙(如 ufw、firewalld)放行 80 端口
- 若使用反向代理或 CDN(如 Cloudflare),需临时关闭代理,确保验证请求直达 Apache
使用 --apache 插件完成初始申请与自动续期配置
推荐首次就用 Certbot 的 Apache 插件,它会自动修改虚拟主机配置、启用 SSL 模块、写入证书路径,并配置好续期钩子:
- 安装 Certbot 及 Apache 插件:
sudo apt install certbot python3-certbot-apache(Ubuntu/Debian) - 申请证书:
sudo certbot --apache -d example.com -d www.example.com - 执行后 Certbot 会自动:
- 暂停 Apache 服务(短暂)
- 添加临时 `
` 处理验证请求 - 生成密钥、CSR,调用 Let's Encrypt API 完成验证
- 写入证书到
/etc/letsencrypt/live/example.com/ - 修改原有 `
`,填入 SSLCertificateFile和SSLCertificateKeyFile - 启用
ssl和headers模块(如未启用)
验证续期机制是否就绪
Certbot 安装后默认配置了系统级定时任务(systemd timer 或 cron),用于每周两次检查续期。手动测试续期流程更可靠:
立即学习“Java免费学习笔记(深入)”;
- 模拟续期(不真正更新,只测试流程):
sudo certbot renew --dry-run - 若成功,说明验证路径可达、权限正常、证书未过期
- 若失败,常见原因:
- Apache 未运行或 80 端口被占
- 虚拟主机中缺少
ServerName或ServerAlias匹配申请的域名 -
/var/lib/letsencrypt/或/etc/letsencrypt/权限异常(应为 root:root,600/755) - 证书已过期超过 30 天,无法自动续期,需重新申请
续期后确保 Apache 加载新证书
Certbot 在续期成功后默认会执行 systemctl reload apache2(或 apachectl graceful),但需确认:
- 检查 Certbot 续期日志:
sudo journalctl -u certbot.timer或/var/log/letsencrypt/ - 确认 Apache 配置中证书路径指向的是
live/目录下的符号链接(而非具体版本路径),例如:SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pemSSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem - 可手动触发一次真实续期测试(非 dry-run):
sudo certbot renew --force-renewal,然后访问https://example.com查看证书有效期是否更新









