使用 Certbot 自动免费续期阿里云 SSL 证书 时间: 2025-02-22 14:30 分类: 猿码 热度: 1°C 评论 我之前写过一篇自动续期SSL证书的文章,也挺简单的,有兴趣的可以移步《[轻松搞定SSL证书自动续签,解决免费证书每3个月失效问题](https://blog.gaomeluo.com/archives/xuqianssl/ "轻松搞定SSL证书自动续签,解决免费证书每3个月失效问题")》和《[推荐一个免费15年的SSL证书【附教程】](https://blog.gaomeluo.com/archives/15sslzhengshu/ "推荐一个免费15年的SSL证书【附教程】")》 ##前提条件 确保满足以下条件: - 你已经有一个域名,并且域名解析托管在阿里云。 - 服务器上已经安装了 Certbot。 - 你已经配置了 alidns 脚本,用于自动添加和清理 DNS 记录。 ##环境 - 系统: centos7 - 服务器: 阿里云服务器 - 域名: 阿里云购买的域名 - python - nginx提供反向代理 ####阿里云服务器:[传送门](https://iil.ink/yunxiaozhan "传送门") ##步骤 1:安装 Certbot 如果你的服务器上还没有安装 Certbot,可以通过以下命令安装: sudo yum update sudo yum install certbot ##步骤 2:获取阿里云参数 ###2.1 创建RAM账号,并赋权 RAM是主账号的一个子用户, 可以按需给给该子用户最小的权限, 以保护主账号的安全 ###2.1.1创建RAM账户 RAM访问控制(https://ram.console.aliyun.com/users/create) 身份管理 -> 用户 -> 创建用户  ###2.1.2 获取 AccessKey ID 和 AccessKey Secret 注意: 创建后获取到 AccessKey ID 和 AccessKey Secret 后应立即保存, 页面关闭后就看不到了  ###2.1.3 添加需要的权限: AliyunDNSFullAccess  ###2.2 获取地域Id ####2.2.1 先看服务器所属的地域: 云服务器管理控制台(https://ecs.console.aliyun.com/home#/)  ####2.2.2 [获取地域Id](https://help.aliyun.com/zh/ecs/regions-and-zones?source=5176.29345612&userCode=ffsbbyn0 "获取地域Id") 再次注意, 一定要保留好 AccessKey ID,AccessKey Secret,地域Id ##步骤 3. 安装 certbot-dns-aliyun ###3.1 安装 aliyun cli 工具 wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz tar xzvf aliyun-cli-linux-latest-amd64.tgz mv aliyun /usr/local/bin ###3.2 配置凭证 号处填上上面获取到的 AccessKey ID,AccessKey Secret, 地域Id(region) aliyun configure set --profile AkProfile --mode AK --access-key-id **** --access-key-secret **** --region **** 激活刚配置的凭证 aliyun ecs DescribeInstances --profile AkProfile 凭证保留位置: ~/.aliyun/ ###3.3 安装 certbot-dns-aliyun 插件 wget https://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh sudo mv alidns.sh /usr/local/bin sudo chmod +x /usr/local/bin/alidns.sh sudo ln -s /usr/local/bin/alidns.sh /usr/local/bin/alidns ##步骤 4:申请证书 使用 Certbot 申请证书时,我们需要指定 DNS 挑战,并调用 alidns 脚本自动添加 DNS 记录。以下是申请证书的命令: certbot certonly -d www.example.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run 参数说明 - -d example.com:指定域名(可以指定多个域名)。 - manual:手动模式。 - preferred-challenges dns:使用 DNS 挑战。 - manual-auth-hook “alidns”:在 DNS 挑战时调用 alidns 脚本。 - manual-cleanup-hook “alidns clean”:在 DNS 挑战完成后调用 alidns clean 脚本。 - —dry-run:模拟续期过程,不会实际续期证书。正式申请时去掉—dry-run参数: ##步骤 5:设置自动续期 Certbot 默认会在证书到期前 30 天内自动续期。我们可以通过设置 cron 任务来实现自动化续期。 ###1. 编辑 crontab 运行以下命令编辑 crontab: crontab -e ###2. 添加续期任务 在 crontab 中添加以下内容(每天凌晨 2:00 执行续期任务): 0 2 * * * /usr/bin/certbot renew --quiet --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --deploy-hook "systemctl restart nginx" >> /var/log/certbot-renew.log 2>&1 参数说明 - 0 2 *:每天凌晨 2:00 执行任务。 - —quiet:静默模式,减少日志输出。 - —preferred-challenges dns:指定使用 DNS 挑战。 - —manual-auth-hook “alidns”:在 DNS 挑战时调用 alidns 脚本。 - —manual-cleanup-hook “alidns clean”:在 DNS 挑战完成后调用 alidns clean 脚本。 - —deploy-hook “systemctl restart nginx”:在证书成功续期后重启 Nginx。 - /var/log/certbot-renew.log 2>&1:将日志输出到 /var/log/certbot-renew.log。 ##步骤 6:验证续期 ###1. 手动测试续期 运行以下命令测试续期流程: certbot renew --dry-run --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" 如果测试成功,说明配置正确。 ###2. 检查证书状态 运行以下命令查看证书的到期时间: certbot certificates ##步骤 7:常见问题排查 ###1. 没有日志输出 如果 /var/log/certbot-renew.log 没有日志输出,可能是以下原因: 权限问题:确保日志文件可写: sudo touch /var/log/certbot-renew.log sudo chmod 644 /var/log/certbot-renew.log cron 任务未执行:检查 cron 日志: grep CRON /var/log/syslog ###2. 证书未到期 如果证书未到期,Certbot 会跳过续期。可以通过以下命令强制续期: certbot renew --force-renewal --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" ##总结 通过 Certbot 和阿里云 DNS 的集成,我们可以轻松实现 SSL 证书的自动续期。只需设置一次 cron 任务,Certbot 就会在证书到期前自动续期,并调用 alidns 脚本处理 DNS 挑战。 标签: 服务器 ssl证书
评论已关闭