申请域名SSL证书并自动推送至阿里云 CDN

news/2024/11/20 21:28:05/

        

        近期国外SSL证书厂商调整了免费证书的续签规则,一年期的证书全部取消,现在只能申请90天有效期的免费证书。普通web站点可以通过宝塔面板或部署acme.sh等证书自动管理工具来实现自动化申请和部署,但是阿里云之类的CDN服务就只能通过手动或OpenAPI接口来实现证书更新。如果管理的SSL证书比较多,一是容易遗漏,另外纯靠手动更新,这个工作量就很可怕了。

找了一圈资料,这篇文章比较有参考价值:    这篇文章比较有参考价值:申请通配符域名证书并自动推送至阿里云 CDN功能和特性 能够申请域名通配符证书 每两个月自动 renew 证书 自动将证书推送到阿里云 CDN 准备 Linux 服务器(参考系统:Ubuntu 20.04) 在阿里云托管的域名icon-default.png?t=N7T8https://www.wqy.ac.cn/p/2311-acme-aliyuncdn/

        但是其中 UpdateSSLCert.sh 脚本跑不通(证书申请成功之后无法推送至CDN,提示UploadUserCertificate方法没有权限), 不知是不是阿里云又调整了规则。   

        仔细查看了下阿里云的OpenAPI文档,发现CDN证书更新只需要调用SetCdnDomainSSLCertificate 这个接口方法就可以,参考上述文章的脚本,直接使用阿里云CLI命令行工具做了下简化:

服务器先按照官方说明安装CLI命令行工具,安装指南_阿里云CLI(CLI)-阿里云帮助中心

#!/usr/bin/env bash# 使用的 OpenAPI
# CAS: https://help.aliyun.com/document_detail/126507.html
# CDN:https://help.aliyun.com/document_detail/106661.html# 可配合 acme.sh 使用的 renewHook 脚本:自动将新证书上传至阿里云并更新对应 CDN 域名,然后删除对应域名的旧证书。
# 每次 API 执行都会检测是否失败,如果失败,会中断脚本执行并返回自定义错误代码。# RIBO: 修改为自己的 AccessKey
AliAccessKeyId="<AliAccessKeyId>"
AliAccessKeySecret="<AliAccessKeySecret>"# shellcheck source=AliyunOpenApiSDK.sh
# RIBO: 这里需要修改 aliyun-openapi-bash-sdk 的路径
#source /root/aliyun-openapi-bash-sdk/AliyunOpenApiSDK.sh# acme.sh 执行 renewHook 时导出的环境变量列表
ACME_ENV_LIST=("CERT_KEY_PATH""CERT_FULLCHAIN_PATH""Le_Domain"
)
# 检查环境变量是否存在
for value in "${ACME_ENV_LIST[@]}" ; do[[ -v "$value" ]] || exit 1
done
unset value
# 获取证书自定义函数
get_cert() {# 使用 sed 删除掉证书文件的空行sed -e "/^$/d" "$CERT_FULLCHAIN_PATH"
}
# 获取密钥自定义函数
get_key() {cat "$CERT_KEY_PATH"
}# shellcheck disable=SC2154
DOMAIN=$Le_Domain
# 证书名称 (替换域名的 . 为 _,以符合阿里云证书名称规范)
CERT_NAME="${DOMAIN//./_}-$(date +%s)"
# 需要更新证书的 CDN 域名列表
# RIBO: 修改这里的 CDN 域名列表
DOMAIN_LIST=("example.com""www.example.com"
)# 设置 CDN 域名列表使用新的证书
for _domain in "${DOMAIN_LIST[@]}"; doaliyun cdn SetCdnDomainSSLCertificate --DomainName "$_domain" --SSLPub="$(get_cert)" --SSLPri="$(get_key)"  --CertType upload --SSLProtocol on || exit 103
done
unset _domain

RAM 用户授权也只需两项

  • AliyunDNSFullAccess 管理云解析(DNS)的权限
  • AliyunCDNFullAccess 管理CDN的权限

实测跑通,目前发现的唯一问题就是随着时间推移,证书管理服务里的列表估计会越来越大,需要定期手动清理掉过期的证书。


http://www.ppmy.cn/news/1295414.html

相关文章

Unity SVN更新提交小工具

Unity SVN更新提交小工具 前言使用说明必要前提源码参数说明 感谢 前言 Unity开发时每次都要到文件夹中操作SVN&#xff0c;做了一个小工具能够在Editor中直接操作。 使用说明 必要前提 前提是要安装好SVN&#xff0c;在文件夹右键能够看到安装的SVN 源码 using System…

Windows:笔记本电脑设置休眠教程

前言 不知道大家在使用【Windows】笔记本有没有这个习惯&#xff0c;我会把他的电池选项的【休眠】设置进行打开。因为作为我们开发人员电脑一般是一周关一次机&#xff0c;有时候一个月关一次机。这时候【休眠】功能就给我们提供了一个好处&#xff0c;我们选择了【休眠】后电…

在IDEA中使用git分支进行开发然后合并到Master分支,2022.1.x版本

在实际开发过程中&#xff0c;为了避免因为在开发中出现的问题以及方便发布版本&#xff0c;如果是多版本发布的情况相下&#xff0c;我们通常需要采用分支进行开发&#xff0c;这个时候&#xff0c;我们就需要了解git分支的相关知识点了&#xff0c;本篇博客也是博主在实际公司…

支Vue3的WebSocket插件并支持断线重连

当你在Vue 3中需要使用WebSocket并支持断线重连时&#xff0c;你可以创建一个自定义的WebSocket插件。下面是一个示例代码&#xff0c;演示了如何创建一个Vue 3的WebSocket插件&#xff0c;其中包含了断线重连的功能&#xff1a; // websocketPlugin.js export default {insta…

HTTP打怪升级之路

新手村 上个世纪80年代末&#xff0c;有一天&#xff0c;Tim Berners-Lee正在工作&#xff0c;他需要与另一台计算机上的同事共享一个文件。他尝试使用电子邮件&#xff0c;但发现电子邮件不能发送二进制文件。Tim Berners-Lee意识到&#xff0c;他需要一种新的协议来共享二进制…

K210基础实验系列

CanMV K210 开发板: CanMV K210 是由 01Studio 设计研发&#xff0c;基于嘉楠科技边缘计算芯片 K210 &#xff08; RSIC V 架构&#xff0c; 64 位双核&#xff09;方案的一款开发板&#xff0c;采用硬件一体化设计&#xff08; K210 核心板、 摄像头、 LCD 集成在一个…

Vue(三):Vue 生命周期与工程化开发

2023 的最后一篇博客&#xff0c;祝大家元旦快乐&#xff0c;新的一年一起共勉&#xff01; 06. Vue 生命周期 6.1 基本介绍 生命周期就是一个 Vue 示例从 创建 到 销毁 的整个过程&#xff0c;创建、挂载、更新、销毁 有一些请求是必须在某个阶段完成之后或者某个阶段之前执行…

计算机组成原理(万字爆肝整理)

第一章 计算机系统概述 “较简单&#xff0c;不做过多赘述&#xff0c;后面会详细学到” 第一节 计算机系统层次结构 1.计算机系统的基本组成&#xff1a;硬件软件 2.计算机硬件的基本组成&#xff1a;运算器存储器控制器输入设备输出设备 3.系统软件和应用软件 系统软件…