前言
如果你还在为证书更新而烦恼,不妨试试这个证书自动更新的神器,它的好处不光是自动化更新,而且,免费,安全适用于个人和企业环境。它叫certbot!
简介
Certbot 是由电子前沿基金会(EFF)开发的一款开源工具,用于自动化获取、更新和管理免费的 SSL/TLS 证书,主要配合 Let’s Encrypt 证书颁发机构(CA)使用。通过 Certbot,可以轻松为网站启用 HTTPS 加密,提升网站安全性和搜索引擎排名。
核心功能与特点
1. 自动化证书管理
- 自动完成证书申请、验证(通过 ACME 协议)、安装和续期流程。
- 支持多种 Web 服务器(如 Nginx、Apache)和操作系统(Linux、macOS)
2. 免费与安全
- 基于 Let’s Encrypt 提供的免费 SSL/TLS 证书,无需付费。
- 证书有效期为 90 天,但 Certbot 可自动续期,避免证书过期风险。
3. 简单易用
命令行工具,提供交互式配置向导,无需手动编辑复杂的配置文件。
非侵入式部署,无需停止 Web 服务即可完成证书验证和安装,对生产环境影响小。
示例命令
certbot --nginx # 自动配置 Nginx 并启用 HTTPS
certbot renew # 检查并更新即将过期的证书
工作原理
-
验证域名所有权
- Let’s Encrypt 通过 ACME 协议验证你对域名的控制权(如 HTTP-01 验证:在网站根目录放置临时文件)。
- Certbot 自动完成验证过程,无需手动干预。
-
生成证书与私钥
- 验证通过后,Certbot 生成 SSL/TLS 证书和私钥,并配置 Web 服务器使用它们。
-
自动续期
- 设置定时任务(如 Cron 作业),定期检查证书有效期(默认每 12 小时),自动续期即将过期的证书。
典型应用场景
- 网站 HTTPS 加密:为个人博客、企业官网等启用 HTTPS,保护用户数据传输。
- API 服务安全:确保 API 请求和响应在传输过程中不被窃听或篡改。
- 邮件服务器安全:为 SMTP、IMAP 等邮件服务配置 SSL/TLS,防止邮件内容泄露。
安装与使用示例
1. 安装 Certbot
Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-nginx # 安装 Certbot 和 Nginx 插件
CentOS/RHEL
yum install epel-release
yum install certbot python3-certbot-nginx
2. 获取证书(以 Nginx 为例)
certbot --nginx -d www.example.com # 为域名 www.example.com 域名申请证书
执行后,Certbot 会:
- 自动检测 Nginx 配置。
- 生成证书并配置 Nginx。
- 自动重定向 HTTP 请求到 HTTPS。
3. 手动续期证书
certbot renew --dry-run # 测试续期流程
certbot renew # 实际执行续期
执行这个命令的前提是,已经用cerbot申请了证书。
0 0 */2 * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"
工具 | 特点 | 适用场景 |
Certbot |
官方推荐,支持多种服务器,完全免费 |
个人和企业网站 |
Acme.sh |
纯 shell 脚本,轻量级,适合复杂环境 |
容器化环境或自定义服务器 |
OpenSSL |
手动生成自签名证书,需手动管理 |
测试环境或内部系统 |
Cloudflare |
集成 CDN 和 SSL 服务,适合静态网站 |
静态网站或需内容分发 |
注意事项
- 证书有效期:Let’s Encrypt 证书有效期为 90 天,需依赖 Certbot 自动续期。
- 域名所有权验证:确保服务器可通过公网访问,且 DNS 配置正确。
- 安全存储私钥:私钥文件(如
/etc/letsencrypt/live/
目录下的文件)需严格保密,避免泄露。
- 速率限制:Let’s Encrypt 对证书申请有速率限制(如每周 5 次针对同一域名),测试时建议使用 staging 环境。
如果我想只申请证书,不配置nginx,如何实现?
ertbot 支持仅生成证书而不自动配置 Web 服务器。这种方式适用于需要手动管理服务器配置,或使用其他服务(如 Cloudflare、负载均衡器)处理 HTTPS 的场景。
仅生成证书的方法1. 使用 certonly
模式
通过 certonly
命令获取证书,Certbot 会生成证书文件,但不会修改你的 Web 服务器配置。
示例命令(以 HTTP 验证为例):
certbot --nginx -d dev.example.cn # 假如我的域名是dev.example.cn
证书文件位置:生成的证书和私钥默认存放在:
/etc/letsencrypt/live/example.com/
├── cert.pem # 服务器证书
├── chain.pem # 中间证书
├── fullchain.pem # 完整证书链(cert.pem + chain.pem)
└── privkey.pem # 私钥(严格保密!)
后续操作建议手动配置 Web 服务器获取证书后,你需要手动将证书路径配置到 Nginx、Apache 或其他服务中。例如,Nginx 的 HTTPS 配置示例:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# 其他配置...
}
设置自动续期Let’s Encrypt 证书有效期为 90 天,需定期续期。添加 Cron 任务自动检查:
# 每两个月检查并续期证书
0 0 * */2 * /usr/bin/certbot renew --quiet
验证证书状态
sudo certbot certificates # 查看所有证书状态
在使用 Certbot 申请证书时,主域名(不带 www 的域名)不是必须配置的。你可以仅为 www 子域名申请证书,或根据需求选择其他子域名组合。
certbot certonly --standalone -d example.com # 证书仅适用于 example.com
,访问 www.example.com
会提示证书不匹配。
certbot certonly --standalone -d www.example.com # 证书仅适用于 www.example.com
,访问 example.com
会提示证书不匹配。
certbot certonly --standalone -d example.com -d www.example.com
证书同时适用于 example.com 和 www.example.com,覆盖两种访问方式。
取决于你的网站访问需求:
- 仅需 www 访问:配置
-d www.example.com
即可。
- 需支持裸域名(无 www):必须包含
-d example.com
。
- 不确定用户访问习惯:推荐同时配置主域名和 www 子域名。
如果只想更新某一个域名的证书,怎么办?
如果只想使用certbot renew
更新某一个域名的证书,可以使用--cert-name
参数指定证书名称3。证书名称通常与域名相同,你可以通过certbot certificates
命令查看证书的详细信息,包括证书名称3。
假设你要更新的域名证书名称为test.szsx-ebc-cms-dev.com
,则可以使用以下命令更新该域名的证书:
certbot renew --cert-name test.szsx-ebc-cms-dev.com
如果希望强制更新证书,无论证书是否临近过期,都可以加上--force-renewal
参数,命令如下:
certbot renew --cert-name test.szsx-ebc-cms-dev.com --force-renewal
可以生成通配证书吗?
Certbot 可以生成通配证书。Let's Encrypt 支持免费的通配符证书,不过申请流程和普通单域名证书有所不同,需要通过 DNS 验证方式完成域名所有权验证。具体方法如下:
1. 确保 Certbot 版本≥0.22.0(推荐使用最新版)。
2. 运行以下命令申请通配符证书(替换*.example.com
为实际域名):
certbot certonly \
--preferred-challenges=dns \
-d *.example.com -d example.com # 可选:同时包含根域名
3. Certbot 会提示添加一条 DNS TXT 记录,例如:_acme-challenge.example.com. TXT "xxxxxxx(随机字符串)"
。前往域名管理面板(如 Cloudflare、阿里云 DNS 等)添加该记录。
4. 等待 DNS 生效(通常需要几分钟,可以使用dig
命令检查)
dig -t txt _acme-challenge.example.com
5. 确认 DNS 记录生效后,按回车键继续,Certbot 会自动签发证书。证书生成后,路径通常为/etc/letsencrypt/live/example.com/
,其中包含fullchain.pem
(证书链)和privkey.pem
(私钥)等文件。
6. 如果没有本地没有相关域名的nginx的配置,就单纯的想生成证书,域名是myoss.szshinfra.cn,使用如下命令:
certbot certonly --manual --preferred-challenges dns -d myoss.szshinfra.cn
注意:在创建证书时需要添加txt类型的解析。