← blog DevOps & 云原生 · 2026-07-01

Certbot 是什么

Certbot 核心功能、常用命令、验证方式详解,以及什么时候你其实不需要 Certbot。

3 min read

什么是 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

常用命令

# 为 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 的完整流程:

# 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 定时器来定期续期:

# 查看续期定时器状态(安装时自动创建)
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。

Sources

No external sources for this entry.

Related