873 words
4 minutes
Certbot 是什么

什么是 Certbot#

Certbot 是一个由 Electronic Frontier Foundation (EFF) 开发的开源命令行工具,用于自动获取和续期 Let’s Encrypt 提供的免费 SSL/TLS 证书。它是目前最流行的 ACME(Automatic Certificate Management Environment)客户端,几乎成为 VPS 上配置 HTTPS 的事实标准。

核心功能#

功能说明
获取证书自动完成 ACME 协议验证,从 Let’s Encrypt 申请免费证书
续期证书自动检测即将过期的证书并续期(Let’s Encrypt 证书有效期 90 天)
配置 Web 服务器自动修改 Nginx/Apache 配置以启用 HTTPS

常用命令#

Terminal window
# 为 Nginx 获取并配置证书(最常用)
certbot --nginx -d example.com -d www.example.com
# 为 Apache 获取并配置证书
certbot --apache -d example.com
# 仅获取证书(不修改 Web 服务器配置)
certbot certonly --webroot -w /var/www/html -d example.com
# 手动验证(适合无法自动验证的场景,如非 HTTP 挑战)
certbot certonly --manual -d example.com
# 续期所有已安装的证书
certbot renew
# 查看当前所有已安装的证书信息
certbot certificates

验证方式#

Certbot 需要向 Let’s Encrypt 证明你拥有该域名,支持以下几种验证方式:

Webroot#

在网站根目录放置验证文件,Let’s Encrypt 通过 HTTP 访问该文件来完成验证。这是最常用的方式,不需要停止 Web 服务器。

Standalone#

Certbot 自己启动一个临时 HTTP 服务器(默认监听 80 端口)来完成验证。适合没有运行中的 Web 服务器的场景,但需要确保 80 端口未被占用。

Nginx / Apache#

利用现有 Web 服务器进行验证。Certbot 会临时修改 Nginx/Apache 配置来响应验证请求,验证完成后恢复原配置。

DNS#

通过添加 DNS TXT 记录来验证域名所有权。这是唯一支持申请通配符证书*.example.com)的方式,但要求 DNS 提供商支持 API 自动添加记录,或手动添加后等待生效。

典型工作流(配合 Nginx)#

以下是在一台裸机 VPS 上从零开始配置 HTTPS 的完整流程:

Terminal window
# 1. 安装 certbot 及 nginx 插件
sudo apt install certbot python3-certbot-nginx
# 2. 确保 Nginx 已配置好 server_name
# 例如 server_name api.example.com; 在 80 端口监听
# 3. 一键获取证书并自动配置 Nginx HTTPS
sudo certbot --nginx -d api.example.com
# 4. 验证证书安装成功
curl -I https://api.example.com

安装完成后,Certbot 会自动配置 systemd 定时器来定期续期:

Terminal window
# 查看续期定时器状态(安装时自动创建)
systemctl status certbot.timer
# 手动触发一次续期(测试用)
sudo certbot renew --dry-run

实际场景:什么时候不需要 Certbot#

Certbot 解决的是”裸机 VPS + 自有域名”场景下的 HTTPS 问题。但在现代架构中,TLS 终止往往不在应用服务器上,而是在前置的反向代理或 CDN 层。以下场景不需要 Certbot:

架构TLS 由谁管理为什么不需要 Certbot
Cloudflare Tunnelcloudflared 进程自动管理cloudflared 启动后自动向 Cloudflare 边缘请求证书,不经过 ACME 协议
Cloudflare 代理模式Cloudflare Universal SSLCloudflare 自动为代理域名签发并管理证书
云厂商负载均衡云厂商证书服务阿里云/阿里云 SLB/CDN 自带证书托管,无需本地管理
Kubernetes Ingresscert-manager集群内部使用 cert-manager(也是 ACME 客户端,但不是 Certbot)

关键判断依据:如果对外暴露的 HTTPS 端口不是直接连到你的服务器,而是在某一层被终止了,那你的服务器上就不需要 Certbot。

Certbot 是什么
https://sgjki547.top/posts/certbot/
Author
SGJki
Published at
2026-07-01
License
CC BY-NC-SA 4.0