设为首页收藏本站

ZMX - IT技术交流论坛 - 无限Perfect,追求梦想 - itzmx.com

 找回密码
 注册论坛

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

用百度帐号登录

只需两步,快速登录

搜索
查看: 102|回复: 0

cloudflare cf cdn的证书到期不自动续签https每次都要去邮件里面批准签发的解决办法,增加acme记录值 api立即自动化验证

[复制链接]
 成长值: 687

签到天数: 4854 天

[LV.Master]伴坛终老

发表于 2025/4/15 21:25 | 显示全部楼层 |阅读模式 |Google Chrome 135.0.0.0|Windows 10
天涯海角搜一下: 百度 谷歌 360 搜狗 有道 雅虎 必应 即刻
cloudflare cf cdn的证书到期不自动续签https每次都要去邮件里面批准签发的解决办法,增加acme记录值 api立即自动化验证

现在是剩下31天到期就触发自动续期,但是需要去邮件中批准签发,感觉CDN像是烂了一样
1.jpg

2.jpg

3.jpg

查了下,说设置个DCV委派就好了,就不用手动批准证书了
4.jpg

这个功能好像没有效果,等明天在看看
cf的帮助文档里面写了每4小时检测一次证书签发请求

帖子补充
原来要收费,怪不得不起效果,需要激活ACM(Advanced Certificate Manager)后,才能支持acme功能
https://developers.cloudflare.com/ssl/edge-certificates/changing-dcv-method/methods/delegated-dcv/

有个api强制改成http验证不知道有没有效果,用http验证颁发续签证书,而不是发电子邮件要求批准
https://developers.cloudflare.com/api/resources/ssl/subresources/verification/methods/edit/

查了下邮箱里的批准颁发邮件,在帮助文档里面没有找到相关的api立即验证,抓包下好像没法通过key调用,所以还是用文档里的吧
https://certvalidate.cloudflare.com/validations/txt/acme?domain=itzmx.com&token=xxxxx&certificate_pack_id=xxxxx


获取地址:https://dash.cloudflare.com/profile
点击Global API Key(X-Auth-Key)
然后发起
查看ssl证书包,右下角有个API区域 ID,下面的地址自己换一下,看到你自己的地址,邮箱换成你的cf登陆邮箱
但是发现这里获取uuid比较麻烦,在result字段里面的那个id才是对的,certificates字段里面的两个id不知道做什么,至少没法用来完成后续步骤
  1. curl -X GET "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/ssl/certificate_packs" \
  2.      -H "X-Auth-Email: user@gmail.com" \
  3.      -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41"
复制代码


所以这里推荐采用这个来获取cert_pack_uuid字段,直接干净清爽多了,方便下方后续调用
  1. curl -X GET "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/ssl/verification" \
  2.     -H "X-Auth-Email: user@gmail.com" \
  3.     -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41"
复制代码


编辑为http验证颁发续签证书
  1. curl -X PATCH "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/ssl/verification/$CERTIFICATE_PACK_ID" \
  2.     -H "X-Auth-Email: user@gmail.com" \
  3.     -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
  4.     -H "Content-Type: application/json" \
  5.     -d '{
  6.       "validation_method": "http"
  7.     }'
复制代码


怎么批量编辑?保存成 cert_pack_uuid.sh,需要安装jq来解析json,cf服务器限制每分钟最多更新4个,所以sh脚本里面加了限速代码,并且引用了数组来实现循环更新
  1. yum -y install jq
复制代码
  1. #!/bin/bash
  2. #https://bbs.itzmx.com/thread-112420-1-1.html
  3. #下面的地址自己换一下
  4. ZONE_ID="023e105f4ecef8ad9ca31a8372d0c353"
  5. AUTH_EMAIL="user@gmail.com"
  6. AUTH_KEY="c2547eb745079dac9320b638f5e225cf483cc5cfdda41"

  7. while true; do
  8.     RESPONSE=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/ssl/verification" \
  9.         -H "X-Auth-Email: $AUTH_EMAIL" \
  10.         -H "X-Auth-Key: $AUTH_KEY")

  11.     CERT_PACK_UUIDS=($(echo "$RESPONSE" | jq -r '.result[].cert_pack_uuid'))

  12.     if [ -z "${CERT_PACK_UUIDS[*]}" ]; then
  13.         echo "没有找到符合条件的证书包,结束操作。"
  14.         break
  15.     fi

  16.     START_INDEX=0

  17.     while [ $START_INDEX -lt ${#CERT_PACK_UUIDS[@]} ]; do
  18.         cert_pack_uuid=${CERT_PACK_UUIDS[$START_INDEX]}
  19.         
  20.         UPDATE_RESPONSE=$(curl -s -X PATCH "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/ssl/verification/$cert_pack_uuid" \
  21.             -H "X-Auth-Email: $AUTH_EMAIL" \
  22.             -H "X-Auth-Key: $AUTH_KEY" \
  23.             -H "Content-Type: application/json" \
  24.             -d '{
  25.                 "validation_method": "http"
  26.             }')

  27.         if echo "$UPDATE_RESPONSE" | jq -e '.success' > /dev/null; then
  28.             echo "成功更新证书包 UUID: $cert_pack_uuid"
  29.             START_INDEX=$((START_INDEX + 1))
  30.         else
  31.             error_message=$(echo "$UPDATE_RESPONSE" | jq -r '.errors[] | .message')
  32.             echo "更新证书包 UUID: $cert_pack_uuid 失败: $error_message"

  33.             if [[ "$error_message" == *"Rate limit reached"* ]]; then
  34.                 echo "请求速率限制已达到,等待 60 秒..."
  35.                 sleep 60
  36.                 continue
  37.             fi
  38.         fi
  39.     done
  40. done
复制代码


完美了,写好自动化更新cf的https证书脚本了
1.jpg

还有个超便捷的方法就是点击禁用ssl通道,刷新页面看到证书都删除了后,过10秒钟在启用,也可以重新签发证书无需手动批准,但是会导致网站中断访问10分钟左右

欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册论坛 新浪微博账号登陆用百度帐号登录

本版积分规则

手机版|Archiver|Mail me|网站地图|IT技术交流论坛 ( 闽ICP备13013206号-7 )

GMT+8, 2025/4/19 18:50 , Processed in 0.113932 second(s), 21 queries , MemCache On.

Powered by itzmx! X3.4

© 2011- sakura

快速回复 返回顶部 返回列表