解决 Let‘s Encrypt 证书自动续订问题:CentOS 环境下配置 certbot 定时任务

背景介绍

最近,我发现我的网站 lishaowu.com 出现了“连接不安全”的警告,检查后发现 Let's Encrypt 证书已于 2025年3月18日过期。手动运行 sudo certbot renew 可以成功续订证书,但显然没有自动续订机制,导致证书过期后需要手动干预。作为一个运行在 CentOS 服务器上的网站(使用 Nginx 作为 Web 服务器),我决定配置 certbot 的自动续订功能,确保证书在到期前 30 天自动更新,避免类似问题再次发生。

在这篇博客中,我将分享如何在 CentOS 环境下通过 systemd 定时器配置 certbot 自动续订的完整流程,包括遇到的问题和解决方法。


问题描述

我的服务器上已经安装了 certbot(版本 1.11.0),并通过 certbot 生成了 Let's Encrypt 证书,用于 lishaowu.com 和 www.lishaowu.com。然而,证书过期后,网站显示“连接不安全”,需要手动运行以下命令续订:

sudo certbot renew

续订成功后,我检查了自动续订的配置,发现没有任何定时任务:

  • sudo crontab -l 输出 no crontab for root,说明没有通过 cron 配置自动续订。
  • sudo systemctl list-timers 只显示了 systemd-tmpfiles-clean.timer,没有 certbot.timer,说明也没有通过 systemd 定时器配置自动续订。

显然,缺少自动续订机制是导致证书过期的主要原因。我决定通过 systemd 定时器配置自动续订,因为 systemd 是现代 Linux 系统中更推荐的方式。


解决流程

以下是配置 certbot 自动续订的完整步骤,主要包括创建 certbot.service 和 certbot.timer 文件,启用定时器,并测试续订功能。

步骤 1:创建 certbot.service 文件

certbot.service 文件定义了一个 systemd 服务单元,用于运行 certbot renew 命令。

  1. 创建文件: 使用 cat 和 tee 命令创建文件,避免使用 vi 时可能遇到的按键问题(我在阿里云 Workbench 终端中操作 vi 时遇到过按键无反应的情况):

    cat << 'EOF' | sudo tee /usr/lib/systemd/system/certbot.service
    [Unit]
    Description=Certbot
    Documentation=file:///usr/share/doc/python-certbot-doc/html/index.html
    Documentation=https://certbot.eff.org/docs
    After=network-online.target
    
    [Service]
    Type=oneshot
    ExecStart=/usr/bin/certbot -q renew
    PrivateTmp=true
    EOF

  2. 验证文件: 检查文件内容是否正确:

    cat /usr/lib/systemd/system/certbot.service

    预期输出:

步骤 2:创建 certbot.timer 文件

certbot.timer 文件定义了一个 systemd 定时器单元,用于定期触发 certbot.service。

  1. 创建文件: 同样使用 cat 和 tee 创建文件:

    cat << 'EOF' | sudo tee /usr/lib/systemd/system/certbot.timer
    [Unit]
    Description=Run certbot twice daily
    
    [Timer]
    OnCalendar=*-*-* 00,12:00:00
    RandomizedDelaySec=12h
    Persistent=true
    
    [Install]
    WantedBy=timers.target
    EOF
  2. 验证文件: 检查文件内容:

    cat /usr/lib/systemd/system/certbot.timer

    预期输出:

步骤 3:启用和启动定时器

  1. 重新加载 systemd 配置: 确保 systemd 识别新创建的文件:

    sudo systemctl daemon-reload
  2. 启用定时器: 使定时器在系统启动时自动激活:

    sudo systemctl daemon-reload
  3. 启动定时器: 立即启动定时器:

    sudo systemctl start certbot.timer
  4. 验证定时器: 检查定时器是否正常运行:

    sudo systemctl list-timers

    预期输出(示例):

    检查定时器状态:

    sudo systemctl status certbot.timer

    预期输出(示例):

步骤 4:测试自动续订

运行模拟续订,确认续订功能是否正常:

sudo certbot renew --dry-run

预期输出(示例):

模拟续订成功,说明续订配置正常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李少武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值