CentOS系统-Linux上使用 Certbot工具申请和续签Let's Encrypt证书
一、安装Certbot
1. 在Linux系统上安装Certbot
sudo yum install certbot
二、申请Let’s Encrypt证书
1. 使用Web服务器插件申请证书
Certbot提供了多种插件,用于与不同的Web服务器集成。以下是一些常见的Web服务器插件:
sudo certbot --nginx certonly
运行命令后,Certbot会自动检测你的Nginx配置文件,并提示你选择要保护的域名。完成域名验证后,Certbot会自动更新Nginx配置文件,添加SSL证书和相关配置。
2. 手动申请证书
如果你不想使用插件,也可以手动申请证书:
sudo certbot certonly
运行命令后,Certbot会提示你输入一系列信息,包括域名、邮箱等。完成输入后,Certbot会通过ACME协议与Let’s Encrypt服务器通信,完成域名验证。
域名验证方式:
HTTP验证:Certbot会在你的Web服务器上创建一个临时文件,Let’s Encrypt服务器会访问该文件以验证域名所有权。
DNS验证:你可以在DNS记录中添加特定的TXT记录,Let’s Encrypt服务器会检查该记录以验证域名所有权。
三、配置自动续签
Let’s Encrypt证书的有效期为90天,因此需要配置自动续签功能,以确保证书始终有效。
1. 测试自动续签
在配置自动续签之前,可以先手动测试续签功能:
sudo certbot renew --dry-run
如果测试成功,表示你的系统已经具备自动续签的能力。
2. 设置定时任务
为了实现自动续签,需要在系统中设置定时任务(Cron Job)。
在CentOS系统上设置Cron Job:
# 打开Cron配置文件:
sudo crontab -e
# 添加以下内容:
0 2 * * * /usr/bin/certbot renew --quiet
# 这表示每天凌晨2点运行certbot renew --quiet命令
Cron Job的语法格式为:
* * * * * command_to_be_executed
- - - - -
| | | | |
| | | | +----- 星期几 (0 - 7) (星期天为0或7)
| | | +------- 月份 (1 - 12)
| | +--------- 日期 (1 - 31)
| +----------- 小时 (0 - 23)
+------------- 分钟 (0 - 59)
要将 certbot 的自动续签任务从每天运行一次修改为每90天运行一次,可以通过以下方法实现。由于 cron 本身不支持直接设置“每90天”这样的周期,我们需要借助一些额外的逻辑来实现。
以下是实现每90天运行一次 certbot renew 的方法:
1. 创建一个脚本
创建一个脚本文件,例如 certbot_renew.sh,并写入以下内容:
#!/bin/bash
# 设置任务的最后运行时间文件
LAST_RUN_FILE="/var/log/certbot_last_run.txt"
# 获取当前日期
CURRENT_DATE=$(date +%s)
# 如果文件不存在,初始化为当前日期
if [ ! -f "$LAST_RUN_FILE" ]; then
echo "$CURRENT_DATE" > "$LAST_RUN_FILE"
fi
# 获取上次运行的日期(以秒为单位)
LAST_RUN_DATE=$(cat "$LAST_RUN_FILE")
# 计算两个日期之间的天数差(单位:秒)
DATE_DIFF=$((CURRENT_DATE - LAST_RUN_DATE))
# 如果天数差大于或等于90天,则执行任务并更新日期
if [ "$DATE_DIFF" -ge $((90 * 86400)) ]; then
# 执行 Certbot 续签任务
/usr/bin/certbot renew --quiet
# 更新最后运行日期
echo "$CURRENT_DATE" > "$LAST_RUN_FILE"
fi
2. 设置脚本的可执行权限
chmod +x certbot_renew.sh
3. 添加到 cron
将该脚本添加到 cron 中,使其每天运行一次。编辑 cron 任务:
crontab -e
添加以下内容:
0 2 * * * /path/to/certbot_renew.sh
- 这表示每天凌晨2点运行该脚本。
- 脚本会检查上次运行的时间,如果距离上次运行时间超过90天,则执行 certbot renew 命令并更新时间。
四、验证证书状态
1. 检查证书状态
你可以使用以下命令检查证书的状态:
sudo certbot certificates
该命令会列出所有已安装的证书及其状态,包括有效期、是否已自动续签等信息。
2. 检查Web服务器配置
在证书更新后,确保Web服务器正确加载了新的证书。可以通过访问你的网站并查看浏览器的安全提示来验证证书是否有效。
五、注意事项
域名验证:在申请证书时,确保你的域名已经正确解析到你的服务器。如果域名解析有问题,Let’s Encrypt无法完成验证。
防火墙设置:确保你的服务器防火墙允许Let’s Encrypt服务器访问你的域名用于验证(通常是80端口或443端口)。
备份配置文件:在操作过程中,建议备份你的Web服务器配置文件,以便在出现问题时可以快速恢复。