侧边栏壁纸
博主头像
starstao 博主等级

行动起来,活在当下

  • 累计撰写 20 篇文章
  • 累计创建 32 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

使用Let‘s Encrypt获取免费SSL证书以及在腾讯云下使用脚本自动续期

上载星海
2025-05-17 / 0 评论 / 0 点赞 / 15 阅读 / 1345 字

背景

域名代理商:腾讯云
服务器:ubuntu22

前置条件

安装docker
sudo apt install docker-compose-v2
安装certbot
sudo snap install --classic certbot

获取SSL证书

生成泛域名证书,以example为例
certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com
Certbot 会要求你在 DNS 中创建一个特定的 TXT 记录 记录以验证域名的所有权
image
大概等几十秒钟,确保 DNS 记录在全网传播开来,Certbot 可以查询到。
Certbot 在执行验证时会发起 DNS 查询,如果能找到所需的 TXT 记录并验证其值,认证就会成功,然后就会颁发证书。证书颁发后,这条 TXT 记录 就可以删除了。

自动续期

仅支持使用腾讯云的DNS实现自动续期,如果要支持其他厂商的DNS,请修改dnspod.sh脚本以适配
只有当前在机器上申请了证书才能在当前机器执行续期操作

前置条件

拉取腾讯云 CLI 工具docker镜像,我们使用docker镜像中的命令开箱即用避免复杂的安装流程
docker pull tencentcom/tencentcloud-cli
tccli安装和使用参考
https://cloud.tencent.com/product/cli

使用方法

  1. git clone https://github.com/starstao/certbot-auto-renew 或者进入此链接下载并解压
  2. cd certbot-auto-renew
  3. 编辑dnspod.env文件,填写腾讯云的API鉴权密钥,申请地址:https://console.cloud.tencent.com/cam/capi
    点击新建密钥后,会出现如下提示
   为降低密钥泄漏的风险,自2023年11月30日起,新建的密钥只在创建时提供SecretKey,后续不可再进行查询,请保存好SecretKey。
   SecretId xxxxxxxxxxx
   SecretKey xxxxxxxxxx

dnspod.env中的secretId填写提示的SecretId
SecretKey填写SecretKey
例如

   secretId=xxxxxxxxxxx
   secretKey=xxxxxxxxxxx
  1. 编辑replace_certs_and_reload_service.sh脚本
    rsync -avPL /etc/letsencrypt/live/ /opt/ssl/certs/
    中的改为/opt/ssl/certs/
    你想要存放证书的地址,自动续期完成后,将证书拷贝到/opt/ssl/certs/目录
    cd /opt/nginx/ && docker compose stop && docker compose start
    命令替换为你想要重启的服务的命令,我这里是用的nginx,目录在/opt/nginx/,切换过去执行了docker compose stop && docker compose start命令去重启它
  2. chmod +x *.sh, ./force_renew.sh example.com是强制续期命令, ./renew.sh 是自动续期命令,快到期一个月前自动续期否则不会续期
  3. 设置定时任务
    apt install cron安装crontab
    systemctl status cron查看服务是否在运行
    crontab -e编辑crontab添加如下命令
# 五个星号分别代表分钟、小时、日、月、周
0 21 * * 5 /opt/ssl/script/renew.sh

每周五晚上九点定时执行

0

评论区