通过模拟登录,调用web服务的API,执行定制化操作,将本地SSL证书更新到雷池WAF中。
在内网部署雷池WAF后,发现官方只提供使用Let's Encrypt 的 HTTP-01 验证方法进行免费证书的更新,大部分内网或者家庭环境是无法提供80端口的,在浏览社区讨论以及GitHub相关issue后,发现一篇博客从指定路径更新雷池WAF证书。仔细浏览源码后,发现跟个人需求有一定出入(个人内网账号未添加OTP,lucky的docker环境不适合用python脚本),故而基于该博客提供的登录与更新证书的逻辑,对代码进行了封装,构建二进制文件,更好的兼容各类第三方工具回调。
以下安装过程以 Ubuntu 为例,其他系统请使用对应版本。
- 从release 页面获取最新版本压缩文件
- 解压缩,并赋予执行权限
- 部署至
/usr/local/bin
目录
## example for ubuntu
# download
wget https://github.com/DoraTiger/safeline-utils/releases/download/v0.1.0/safeline-utils-linux-amd64.tar.gz
# unzip and grant
tar -zxf ./safeline-utils-linux-amd64.tar.gz
chmod +x ./safeline-util
# move
sudo cp ./safeline-util /usr/local/bin/
- 准备 go 语言环境,可参考该博客的 2.3 节。
- 编译项目(考虑到服务器本身无网络的情况,提供了vendor目录,支持离线编译,如不需要,请删除makefile中的
-mod=vendor
),可参考Makefile
文件自行选择编译目标平台。 - 部署至
/usr/local/bin
目录
## example for ubuntu
# download
git clone https://github.com/DoraTiger/safeline-utils.git
cd NEU_IPGW
# build
make all
# grant
chmod +x ./build/linux-amd64/safeline-utils
# move
sudo cp ./build/linux-amd64/safeline-utils /usr/local/bin/
前提条件已经部署好了雷池WAF,若开启了两部验证要额外保存TOTP的secret。
- 部署lucky,参考以下compose文件
services:
lucky:
image: gdy666/lucky
container_name: lucky
volumes:
- /pathto/lucky:/goodluck # 自定义持久化路径,用于保存证书与命令工具
network_mode: host
restart: always
- 获取safeline-utils工具,并部署
cd /pathto/lucky
# 单独构建证书目录,方便区分
mkdir acme
cd acme
wget https://github.com/DoraTiger/NEU_IPGW/releases/download/v0.1.0/safeline-utils-linux-amd64.tar.gz # 假定系统为amd64架构,其他架构自行更改下载地址
# unzip and grant
tar -zxf ./safeline-utils-linux-amd64.tar.gz
- lucky安全管理界面添加证书并配置
映射路径
为/goodluck/acme
,证书改变后触发脚本
为:
# 自行修改网站地址、用户名、密码、证书路径,若有TOTP,则需额外添加 -o yoursecret,证书ID一般从1开始。
/goodluck/acme/safeline-utils cert update -u https://your.waf.site:9443 -n username -p password -i certID -c /goodluck/acme/certname.crt -k /goodluck/acme/certname.key
参考lucky部署第二三步。