自动化更新阿里云 OSS 自定义域名证书的解决方案。
本项目通过 GitHub Actions 自动申请 Let's Encrypt 证书,并将新证书自动绑定到阿里云 OSS 的自定义域名,实现证书自动续期和更新。
oss_update.py:核心脚本,负责将新证书绑定到 OSS Bucket 的自定义域名。alidns.sh:用于 certbot DNS 验证的钩子脚本。.github/workflows/alioss-update-auto.yml:GitHub Actions 工作流,自动化申请证书并更新 OSS 证书。
在 阿里云 RAM 访问控制中新建用户,并添加权限
- AliyunOSSFullAccess 管理对象存储服务(OSS)权限
- AliyunYundunCertFullAccess 管理云盾证书服务的权限
- AliyunDNSFullAccess 管理云解析(DNS)的权限
在 GitHub 仓库的 Settings > Secrets 中添加以下密钥:
ACCESS_KEY_ID:阿里云 AccessKeyIdACCESS_KEY_SECRET:阿里云 AccessKeySecretENDPOINT:OSS Endpoint,例如oss-cn-hangzhou.aliyuncs.comBUCKET_NAME:OSS Bucket 名称, 例如example-bucketDOMAIN:需要绑定证书的自定义域名(如oss.example.com)REGION:阿里云区域(如cn-hangzhou)EMAIL:用于申请证书的邮箱
每周日自动执行,也可手动触发。流程如下:
- 申请新的 Let's Encrypt 证书,证书文件保存于
/etc/letsencrypt/live/$DOMAIN/。 - 读取
fullchain.pem和privkey.pem,自动传递给oss_update.py。 oss_update.py自动将新证书绑定到 OSS Bucket 的自定义域名。
如需本地手动运行:
pip install -r requirements.txt
python oss_update.py \
--access-key-id <你的AccessKeyId> \
--access-key-secret <你的AccessKeySecret> \
--endpoint <你的Endpoint> \
--bucket-name <你的Bucket名称> \
--target-cname <你的自定义域名> \
--private-key "$(cat /etc/letsencrypt/live/<你的域名>/privkey.pem)" \
--certificate "$(cat /etc/letsencrypt/live/<你的域名>/fullchain.pem)"- 证书和私钥文件需有读取权限。
- 阿里云账号需有 OSS 管理权限。
- 建议定期检查 workflow 执行结果。
感谢 hui-shao/AliyunOSS_Cert_Update 提供的 OSS 证书上传教程。 感谢 justjavac/certbot-dns-aliyun 的证书申请教程。
MIT