Certbot是一个免费、开源的软件工具,用于自动从证书品牌商(比如Let‘s Encrypt以及Certum等)获取和更新 TLS/SSL 证书,并将这些证书部署到您的web服务器上。本文将详解Certbot的核心原理、配置,并通过Ubuntu/CentOS系统和Nginx/Apache服务器为大家演示安装Certbot和使用Certbot获取并安装证书。
一、Certbot介绍
Certbot的核心就是ACME协议的客户端实现,所有的自动化功能都是建立在与 证书品牌商(一个 ACME 服务端)的通信之上的。ACME的全称是 Automated Certificate Management Environment(自动证书管理环境)。它是一个开放的协议标准,定义了一个客户端(如 Certbot)和一个证书颁发机构(CA,如 Let’s Encrypt)之间如何自动地进行域名验证、证书申请、续期和吊销。
ACME 协议的核心价值就是自动化,它消除了传统手动申请、验证和安装 SSL 证书的繁琐过程。运行 certbot 命令时在背后与 Let’s Encrypt 的 ACME 服务器进行了一系列交互,主要步骤如下:
1、发起订单
Certbot 向证书商的ACME 服务器申请为一个或多个域名(例如 example.com 和 www.example.com)签发证书。
2、完成验证
ACME服务器会返回一个或多个“验证”任务,要求Certbot证明您确实控制着这些域名。Certbot 支持多种ACME 验证类型,最常用的是:
3、HTTP验证
ACME服务器要求 Certbot 在您网站的根目录下放置一个特定的文件,然后服务器会尝试通过 HTTP 访问这个文件。如果能访问到正确的内容,就证明您控制了该域名。
- –webroot 模式就是利用这种方式,它不需要停止 Web 服务器;
- –standalone 模式也是这种方式,但它会临时启动一个独立的 web 服务器(监听 80 端口)来完成验证。
4、DNS验证
ACME 服务器要求 Certbot 在您域名的 DNS 解析记录中添加一个特定的 TXT 记录。这是通配符证书(*.example.com)申请的唯一方式,也适用于无法开放 80/443 端口的服务器。
5、获取证书
在 Certbot 成功完成验证后,它会通知 ACME 服务器。服务器验证通过后,就会签发 SSL 证书,Certbot 随后下载并保存到本地(通常是 /etc/letsencrypt/live/your_domain/ 目录)。
6、配置 Web 服务器
根据您使用的参数(如 –nginx 或 –apache),Certbot 会自动修改服务器配置以使用新证书;如果使用 certonly 模式,则您需要手动配置。
7、自动续期
ACME 协议的 renew 命令让 Certbot 可以定期检查本地已安装的证书,并在证书即将过期(默认是到期前 30 天内)时,自动重复上述的“验证-获取-安装”流程,实现无缝续期。这正是 sudo certbot renew –quiet 命令在 Cron 任务中做的事情。
可以将Certbot和ACME的关系理解为:
- ACME 是“语言”和“规则”:它定义了客户端和服务器之间如何沟通来完成证书的自动化管理;
- Let’s Encrypt 是说这种“语言”的“服务商”:它提供了遵循 ACME 协议的公共服务;
- Certbot 是说这种“语言”的“客户端”:它是一个具体实现了 ACME 协议的工具,让我们能够方便地与 Let’s Encrypt 这样的服务商进行交互。因此,Certbot 的成功运行完全依赖于其对 ACME 协议的实现。没有 ACME,就没有 Certbot 的自动化。
二、Certbot部署教程
第一部分:安装 Certbot
方法一:使用系统包管理器(推荐,最简单)
Ubuntu / Debian:
sudo apt update
sudo apt install certbot python3-certbot-nginx # 如果使用 Nginx
# 或者
sudo apt install certbot python3-certbot-apache # 如果使用 Apache
CentOS / RHEL / Fedora:
# CentOS 7/RHEL 7
sudo yum install epel-release
# 或者 CentOS 8/RHEL 8 及以上
sudo dnf install epel-release
然后安装 Certbot:
# 如果使用 Nginx
sudo yum install certbot python2-certbot-nginx # CentOS 7
sudo dnf install certbot python3-certbot-nginx # CentOS 8+
# 如果使用 Apache
sudo yum install certbot python2-certbot-apache # CentOS 7
sudo dnf install certbot python3-certbot-apache # CentOS 8+
第二部分:使用Certbot获取并安装证书
方法 A:自动配置(推荐给新手,最省心)
此方法允许 Certbot 自动修改您的 Nginx/Apache 配置文件,启用 HTTPS 重定向。
Nginx:
sudo certbot –nginx
Apache:
sudo certbot –apache
通过以上Certbot命令可以实现 :
1、列出所有找到的虚拟主机(域名),让你选择为哪个域名申请证书。
2、自动完成域名验证。
3、下载证书并修改你的 Nginx 配置,将 HTTP 重定向到 HTTPS。
方法 B:手动配置(更灵活,适合有经验的用户)
此方法只获取证书,不修改您的 Web 服务器配置。需要手动配置服务器以使用证书。
获取证书(以 –webroot 模式为例):
这种方式不需要停止您的 Web 服务器。
sudo certbot certonly –webroot -w /var/www/html -d example.com -d www.example.com
- certonly: 表示只获取证书,不安装;
- –webroot: 使用 webroot 插件;
- -w /var/www/html: 您的网站根目录。Certbot 会在此目录下创建 .well-known/acme-challenge/ 文件夹用于验证。请确保此路径正确;
- -d example.com -d www.example.com: 您要为其申请证书的域名,可以申请多个;
手动配置Web服务器:获取证书后(成功后会显示证书路径,通常是 /etc/letsencrypt/live/your_domain/),您需要修改服务器配置。
Nginx配置示例:在您的 Nginx 站点配置文件中(如 /etc/nginx/sites-available/your_site)添加 SSL 相关配置:
nginx
server {
listen 443 ssl;
server_name example.com www.example.com;ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;# … 其他配置 …}
# 强制重定向 HTTP 到 HTTPSserver {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;}
修改后,检查配置并重新加载 Nginx:
bash
sudo nginx -tsudo systemctl reload nginx
Apache 配置示例:
启用 SSL 模块和您的站点 SSL 虚拟主机:
bash
sudo a2enmod sslsudo a2ensite your-ssl-site-config # 启用SSL站点配置
然后在您的 Apache 虚拟主机配置中指定证书路径。
第三部分:设置自动续期
Let‘s Encrypt 证书有效期为 90 天,但续期非常简单。Certbot 可以自动完成。
测试续期命令是否正常工作:
bash
sudo certbot renew –dry-run
这个命令会模拟续期过程,检查一切是否正常,而不会真的续期。
设置定时任务(Cron Job):
大多数系统在安装 Certbot 时已经自动添加了一个定时任务。您可以通过以下命令检查:
bash
sudo systemctl list-timers# 或者查看 Cronsudo crontab -l
如果没有,可以手动添加。每天运行两次续期检查是推荐的做法:
bash
# 打开 root 用户的 crontabsudo crontab -e# 添加以下行0 12 * * * /usr/bin/certbot renew –quiet
- 0 12 * * *: 表示每天中午 12 点运行;
- renew: 只会检查快过期的证书并进行续期;
- –quiet: 静默模式,只有出错时才输出信息。
部署 Certbot 的流程可以简化为:
安装:
sudo apt install certbot python3-certbot-nginx
- 获取并自动配置证书: sudo certbot –nginx
- 测试自动续期: sudo certbot renew –dry-run
完成以上步骤,您的网站就已经成功实现了HTTPS自动化部署。
下面我们以Ubuntu系统nginx网站服务器环境,从Let‘s Encrypt申请免费证书为例,实践Certbot 的安装部署以后,通过命令实现Let‘s Encrypt免费90天证书申请安装:
#sudo certbot certonly –webroot -w /www/wwwroot/catmonkey.ichuanghui.cn -d catmonkey.ichuanghui.cn
sudo certbot certonly –webroot -w /www/wwwroot/catmonkey.ichuanghui.cn -d catmonkey.ichuanghui. cn
证书成功申请并保存到本地,接下来调用即可,我们之前安装了宝塔面板,那么会发现证书已经自动填充,我们只需要启动即可:
浏览器访问:
那么通过实践,我们已经体验了完整的自动申请部署过程。不过也可以发现,这种模式面向的是满足服务器Shell完全管理权限条件并且具备一定技术能力的操作对象。如果这些条件不具备,还是需要联系证书服务商远程协助处理。
-
广告合作
-
QQ群号:4114653






