ddns域名(dynv6)配置自动续签ssl证书(更新8.18)

📅 2026/8/19 17:11:21
ddns域名(dynv6)配置自动续签ssl证书(更新8.18)
一、背景物理机服务器具备ipv6网卡ubuntu22.04操作系统dynv6配置的ddns域名在nginx应用的ssl证书思路使用certbot创建证书在dynv6添加txt记录certbotcrontab自动续签证书最后reload nginx二、安装依赖apt update apt install certbot apt install python3-pip pip3 install certbot-dns-tencentcloud三、创建证书并配置1.生成证书certbot certonly --manual \ --preferred-challenges dns \ -d example.dns.navy \ --manual-public-ip-logging-ok \ --register-unsafely-without-email注意收集它的txt name和value2.进入dyndns 的records添加一个txt类型3. 填入1.收集到的name和value注这里不用填域名本身比如你的name是_ace-cha.example.dns.navy而你的域名是example.dns.navy那这里你只需填_ace-cha4. 等待1-5分钟回到服务器终端敲下回车successfully表示成功记录Certificate和Key配置到nginx并reload验证是否生效。四、 配置脚本1. 获取zone_idcurl -H Authorization: Bearer 你的TOKEN \ -H Accept: application/json \ https://dynv6.com/api/v2/zones注token在dnv6平台上获取2.配置更新证书脚本#!/usr/bin/env bash # 遇到错误直接终止脚本 set -euo pipefail # 配置区必填 TOKEN你的TOKEN ZONE_ID你的ZONE_ID DOMAIN你的域名 # $0 是指当前脚本readlink -f $0当前脚本的绝对路径 SCRIPT_PATH$(readlink -f $0) # LOG_FILE/你的日志路径/update_crt.log # 函数定义 # 日志记录函数 log() { local log_msg$1 echo $(date %Y-%m-%d %H:%M:%S) - $log_msg | tee -a $LOG_FILE } reload_nginx(){ # 证书更新完成后重载 Nginx log 证书更新完成正在重载 Nginx... if /你的nginx路径/nginx -s reload; then log Nginx已成功重载 else log Nginx重载失败请检查配置 fi log 所有操作执行完毕。 log } # ---------- Hook模式被 Certbot 调用以添加 DNS TXT ---------- if [[ -n ${CERTBOT_VALIDATION:-} ]]; then log Hook触发开始向 dynv6 添加 TXT 记录... # 直接 POST 创建新记录不检查是否存在不修改旧记录 curl -s -X POST https://dynv6.com/api/v2/zones/${ZONE_ID}/records \ -H Authorization: Bearer ${TOKEN} \ -H Content-Type: application/json \ -d {\type\:\TXT\,\name\:\_acme-challenge\,\data\:\${CERTBOT_VALIDATION}\,\ttl\:60} \ /dev/null log Hook触发TXT记录已提交等待DNS传播... sleep 20 # 关键等待确保 Lets Encrypt 能扫到 # 防止死循环 exit 0 fi # ---------- 主模式直接执行脚本非 Hook 模式 ---------- log log 开始强制更新 SSL 证书... # 使用 --force-renewal 强制更新无视证书有效期 # --manual-auth-hook$SCRIPT_PATH再执行一次当前脚本并自动将txt值赋值CERTBOT_VALIDATION certbot certonly \ --manual \ --preferred-challengesdns \ --manual-auth-hook$SCRIPT_PATH \ --manual-public-ip-logging-ok \ --force-renewal \ -d ${DOMAIN} \ reload_nginx3.脚本赋权chmod x 你的脚本绝对路径五、配置自动续期crontab -e 0 1 1 * * nohup bash 你的脚本绝对路径 注crontab不方便配置90天执行所以配置每个月1号1点更新证书。