考虑到使用方便,把证书加密后 发送到公开仓库。部署的时候,只需要定时从公开仓库wget下来即可使用。
后续会考虑自动推送到cdn,因为cdn那边是生产环境,暂时还是不用免费证书。
#
github自动申请 域名证书,加密推送到公开库以及自动部署等
#
自动申请
#
准备
1、两个github仓库 1个私有库 存放 自动脚本,另外一个公开仓库存放加密的证书压缩包 公开就好,可以开pages 或者套cdn 默认分支为main
2、申请域名证书的域名dns服务器的api,我这里都是用dnspods为例
3、一对ssh公私钥。公钥匙要配置到 公开仓库 的Deploy keys,私玥部署到 私有库的Secret
4、一个16位以上足够复杂的密码(zip包可以穷举,所以务必要高强度的密码)
5、少许linux基础知识
#
配置加密信息
#
配置公私玥
公开库的在仓库的 Settings 中Deploy keys添加 填写 ssh公钥,勾选上 Allow write access 名字随意
私钥部署到私有库的Secret 名称为 MYGITHUBKEY
#
dns api
在仓库的 Settings 中添加 Secret,创建 DNSAPI 填写上文获取的 API KEY 格式如下,具体格式 查看 acme.sh 的文档
1
2
3
4
| export DP_Id="214234234"
export DP_Key="XXXXXXXXXX"
export CF_Token="XXXXXXXXXXXXXX"
export CF_Account_ID="XXXXXXXXXXXX"
|
#
压缩包密码
再创建一个 ZIPPASSWORD 输入压缩包解压密码,一定必须要超级高强度的密码。比如 16位以上 包含数字字母特殊符号汉字
#
配置github actions
在私有仓库中创建 .github/workflows/AutoACME.yml
配置文件,参考复制粘贴如下.
cron 是 UTC时间 每月26日下午17点7分 自动执行
完整内容参考 :https://github.com/joyanhui/file.leiyanhui.com/blob/main/github-actions/%E8%87%AA%E5%8A%A8%E7%94%B3%E8%AF%B7%E8%AF%81%E4%B9%A6%E5%B9%B6%E6%8E%A8%E9%80%81%E5%88%B0%E5%85%AC%E5%BC%80%E4%BB%93%E5%BA%93.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
| name: Auto ACME
on:
workflow_dispatch:
schedule:
- cron: "7 17 20 * *"
watch:
types: [started]
env:
ACME: /home/runner/.acme.sh/acme.sh
PUBHUB: /你的用户名/仓库地址
DNSAPI: ${{ secrets.DNSAPI }}
ZIPPASSWORD: ${{ secrets.ZIPPASSWORD }}
MYGITHUBKEY: ${{ secrets.MYGITHUBKEY }}
EMAIL: 你的邮箱地址@qq.com
TZ: Asia/Shanghai
jobs:
build:
runs-on: ubuntu-latest
if: github.event.repository.owner.id == github.event.sender.id
steps:
- name: Checkout
uses: actions/checkout@v2
with:
ref: main
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: 安装和初始化acme.sh
run: |
curl https://get.acme.sh | sh
echo "$DNSAPI" >> /home/runner/.acme.sh/account.conf
$ACME --register-account -m $EMAIL
- name: 开始获取证书
run: |
mkdir -p ./ssl
#如果要处理多个域名,复制后面三行即可 默认使用zerossl的证书 其他参数参考acme.sh文档
mydomian=你的域名.com
$ACME --issue --dns dns_dp -d ${mydomian} -d *.${mydomian}
$ACME --installcert -d ${mydomian} --key-file ./ssl/${mydomian}.key --fullchain-file ./ssl/${mydomian}.cer
- name: 带密码打包证书
run: |
zip -r acme.zip /home/runner/.acme.sh -P $ZIPPASSWORD
zip -r ssl.zip ssl -P $ZIPPASSWORD
- name: 提交加密后的证书到公开库
run: |
mkdir -p ~/.ssh/
echo "$MYGITHUBKEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
rm -rf .git* && rm -rf README.md
echo "处理公开库的readme文件"
wget https://raw.githubusercontent.com/$PUBHUB/main/README.md
echo -e "\n证书最后更新: $(date '+%Y-%m-%d %H:%M:%S')">>README.md
git init
git config --global user.name "githubactions bot"
git config --global user.email "$ACME"
git add ./ssl.zip ./README.md ./acme.zip
git commit -m "证书自动更新 on $(date '+%Y-%m-%d %H:%M:%S')"
git remote add origin git@github.com:$PUBHUB.git
git remote -v
git push origin master:main -f -q
|
客户端使用 wget 后 7z -P 密码 ,然后 nginx -s reload即可
自动更新 参考 :https://dev.leiyanhui.com/web/auto-updatessl-form-github
自动部署到国内cdn 后续处理