Post Hook

使用场景1 : ha2

假设我有一个程序是ha2,当Certbot自动更新完证书之后:

  1. 需要将新证书复制到etc/ha2目录下
  2. 在复制证书之前停止ha2,复制完证书之后,重启ha2,实现重新载入新的证书
  3. 可以根据自己的实际需求,修改fullchain.pemprivkey.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
修改脚本
  1. www.test.net修改成你真实需要的域名
  2. /etc/ha2改成你需要证书存放的目录
  3. 将命令grep ha2 /etc/passwdha2修改你你实际的应用名称,并在终端中输入,并查看输出结果,例如:
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自动更新完证书之后:

  1. 需要将新证书fullchain.pem中的内容在前 和 privkey.pem中的内容在后,合并成一个fullchain.pem文件并复制(覆盖)到/var/opt/axigen/certs目录下
  2. 在复制前停止Axigen,复制完毕后启动Axigen,实现重新载入新的证书
  3. 可以根据自己的实际需求,修改合并成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"
脚本修改:
  1. 请叫脚本示例2中的 mail.test.net 修改成你实际需要使用的域名
  2. 使用命令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,例如:

  1. 最后将修改好的内容贴进/etc/letsencrypt/renewal-hooks/post/axigen-renew-hook.sh中并保存 修改好脚本之后,可以使用 使用/etc/letsencrypt/renewal-hooks/post/axigen-renew-hook.sh来测试脚本 或 使用certbot renew --dry-run来更新证书