网站启用https需要配置证书,let's encrypt
提供免费https证书,不过需要90天重新更新一次证书,如果每次都采用手工上传证书会非常麻烦,也有可能忘记上传证书导致https访问异常。
为解决这个问题acme.sh提供了一键脚本,90天到期后自动续签证书。但是因为我们的站点使用hugo快速建站并托管在腾讯云cos,并没有服务器可以部署该脚本,所以最好能生成https证书后上传到cdn。
zfb132开源了qcloud-ssl-cdn刚好能满足这个需求,其基本原理是通过github action来实现证书的更新,调用腾讯云CDN的API接口将证书上传到CDN中。fork仓库,配置对应的参数即可实现更新证书功能。
1. qcloud-ssl-cdn配置
fork仓库,添加Github Action Secrets:
ACME_DNS_TYPE
: Acme 的 dns 类型,配置环境变量密钥,腾讯云的类型为dns_dp
ACME_DOMAIN
: 顶级域名,例如:laomeinote.com,自动申请证书 laomeinote.com/*.laomeinote.comSECRETID
: 腾讯云 Secret IdSECRETKEY
: 腾讯云 Secret KeyCDN_DOMAIN
: 在腾讯云上配置的CDN 域名,多个域名用逗号分隔,如laomeinote.com
,www.laomeinote.com
,注意不是通配符*.laomeinote.com
DP_Id
: DNSPod IDDP_Key
: DNSPod Key
另需要注意:
- 因为
acme.sh
使用申请证书使用的非RSA算法而是ecc算法,所以证书与密钥文件路径为<domainname>_ecc
, 故需要修改qcloud-ssl-cdn/docker/update.sh
中的CER_FILE
与KEY_FILE
定义:
|
|
更新后的完整代码可详见qcloud-ssl-cdn/docker/update.sh.
CDN_DOMAIN
必须为腾讯云上已配置的cdn域名,否则API会报错。
2. github action配置
Let’s encrypt证书是90天过期一次,acme.sh也是90天刷新一次,为了避免当天失效当天刷新的情况,可以提前几天刷新证书。更新github action配置即可。
qcloud-ssl-cdn/.github.workflows/update-cert.yml
|
|
这里有两个动作会触发github action动作上传证书到cdn,一个是main分支有更新的时候,一种是85天定时触发。正常触发后可在腾讯云cdn上看到证书记录。
全文完。