Post Hook
使用场景1 : ha2
假设我有一个程序是ha2,当Certbot自动更新完证书之后:
- 需要将新证书复制到
etc/ha2目录下 - 在复制证书之前停止ha2,复制完证书之后,重启ha2,实现重新载入新的证书
- 可以根据自己的实际需求,修改
fullchain.pem和privkey.pem证书权限.
脚本示例1:
#!/bin/bash
DOMAIN="www.test.net"
SRC="/etc/letsencrypt/live/$DOMAIN"
DST="/etc/ha2"
#停止ha2
systemctl stop ha2-server.service
# 拷贝证书到 ha2 专用路径
cp "$SRC/fullchain.pem" "$DST/fullchain.pem"
cp "$SRC/privkey.pem" "$DST/privkey.pem"
# 设置安全权限
chown ha2:ha2 "$DST/fullchain.pem" "$DST/privkey.pem"
chmod 0644 "$DST/fullchain.pem"
chmod 0640 "$DST/privkey.pem"
#重启ha2
systemctl restart ha2-server.service修改脚本
- 将
www.test.net修改成你真实需要的域名 - 将
/etc/ha2改成你需要证书存放的目录 - 将命令
grep ha2 /etc/passwd中ha2修改你你实际的应用名称,并在终端中输入,并查看输出结果,例如:
root@test:~# grep ha2 /etc/passwd
ha2:x:999:996::/var/lib/ha2:/bin/sh提示:
从上面输出我们已经得知,ha2的用户名是ha2,因此根据你自己的实际需求修改chown ha2:ha2 "$DST/fullchain.pem" "$DST/privkey.pem中的ha2:ha2
提示:
chown ha2:ha2 "$DST/fullchain.pem" "$DST/privkey.pem中
第一个ha2是用户名,可以使用命令getent passwd ha2验证用户是否存在
第二个ha2是用户组,可以使用命令id ha2验证ha2用户所属的gid的name,例如:
root@test:/# id ha2
uid=999(ha2) gid=996(ha2) groups=996(ha2)因此应该填写gid=996(ha2)()中的 ha2
最后根据你的实际需求修改#停止ha2和#重启ha2下的内容,来让程序重新载入新的证书
最后创建脚本
vi /etc/letsencrypt/renewal-hooks/post/ha2-renew-hook.sh并将编辑好的脚本内容贴到/etc/letsencrypt/renewal-hooks/post/ha2-renew-hook.sh中
提示:你也可以将ha2-renew-hook.sh改成其他名字,例如go2-certs.sh.
修改好脚本之后,使用certbot renew --dry-run来更新证书
使用场景2 : Axigen:
当Certbot自动更新完证书之后:
- 需要将新证书
fullchain.pem中的内容在前 和privkey.pem中的内容在后,合并成一个fullchain.pem文件并复制(覆盖)到/var/opt/axigen/certs目录下 - 在复制前停止Axigen,复制完毕后启动Axigen,实现重新载入新的证书
- 可以根据自己的实际需求,修改合并成
fullchain.pem的证书权限.
脚本示例2:
#!/bin/bash
# 设置变量(根据你的域名和路径调整)
DOMAIN="mail.test.net"
SRC_PATH="/etc/letsencrypt/live/$DOMAIN"
DST_FILE="/var/opt/axigen/certs/fullchain.pem"
/etc/init.d/axigen stop
# 合并 fullchain + privkey 为一个 PEM 文件(Axigen 格式)
cat "$SRC_PATH/fullchain.pem" "$SRC_PATH/privkey.pem" > "$DST_FILE"
# 设置正确的权限(根据你的系统调整)
chown axigen:axigen "$DST_FILE"
chmod 640 "$DST_FILE"脚本修改:
- 请叫脚本示例2中的
mail.test.net修改成你实际需要使用的域名 - 使用命令
grep axigen /etc/passwd查看axigen进程使用的用户名,输出如下:
root@test:/# grep axigen /etc/passwd
axigen:x:220:220:AXIGEN Mail Server System User,,,:/var/opt/axigen:/bin/false用户名:axigen
用户 ID(UID) 是:220
用户组 ID(GID) 是:220
3. 使用命令id axigen查看gid的name,输出如下:
root@test:/# id axigen
uid=220(axigen) gid=220(axigen) groups=220(axigen),100(users)因此可以得出chown axigen:axigen "$DST_FILE"
提示:
第一个axigen是用户名,可以使用命令getent passwd axigen验证用户是否存在
第二个axigen是用户组,可以使用命令id axigen验证axigen用户所属的gid的=符号后面()中的name,例如:
- 最后将修改好的内容贴进
/etc/letsencrypt/renewal-hooks/post/axigen-renew-hook.sh中并保存 修改好脚本之后,可以使用 使用/etc/letsencrypt/renewal-hooks/post/axigen-renew-hook.sh来测试脚本 或 使用certbot renew --dry-run来更新证书