内容提要
本文介绍如何通过脚本从指定路径更新雷池(SafeLine)WAF的SSL证书。雷池仅支持UI导入或Let's Encrypt验证,作者通过模拟登录API实现证书更新,并集成Certbot自动续期,实现证书自动同步更新。
延伸解读
为何需要模拟登录
雷池WAF目前仅支持UI导入或Let's Encrypt的HTTP-01验证方式配置证书,对于使用DNS验证的短期证书用户来说不够方便。官方未提供API文档或API Key,因此作者通过模拟登录流程(密码登录、OTP验证)获取JWT,再调用内部API实现证书更新。这提示用户,若需自动化管理证书,需依赖非官方接口,且需注意版本兼容性。
证书更新机制的关键点
文章指出,直接修改容器中Tengine的证书文件并重启容器,无法同步更新雷池的证书管理界面,因为证书信息以数据库为准。因此,必须通过API更新数据库记录。这提醒用户,在尝试手动替换证书文件时,需确保数据库同步,否则界面显示可能不准确。
自动化续期的集成方式
作者利用Certbot的renewal-hooks,在证书续期后自动执行脚本更新雷池证书,实现全自动同步。具体通过配置deploy-hook,在续期成功后运行Python脚本调用API。此方案适用于使用Certbot及DNS插件(如阿里云)的用户,可减少手动操作,但需注意脚本中需正确配置证书ID和路径。
Q&A
雷池WAF如何通过脚本从指定路径更新SSL证书?
雷池WAF本身只支持UI导入或Let's Encrypt验证,但可以通过模拟登录API来更新证书。具体步骤包括:使用Python脚本模拟登录获取JWT,然后调用API接口上传证书和私钥文件内容,实现证书更新。
雷池WAF证书更新为什么不能直接修改容器内文件?
因为雷池的证书配置以数据库为准,直接修改容器内Tengine的证书文件并重启容器,证书管理界面的有效期不会同步更新,所以需要通过API操作。
雷池WAF的登录流程是怎样的?
雷池登录流程为:密码登录后获得中间JWT,再校验OTP(动态验证码),通过后获得最终JWT,过程中需要携带CSRF token。
如何获取雷池WAF的证书ID?
可以通过调用list_all_certs方法获取所有证书列表,从中找到对应的证书ID。如果只有一个证书,ID通常为1。
如何将Certbot自动续期的证书同步到雷池WAF?
利用Certbot的renewal-hooks,在证书续期后自动执行一个脚本,该脚本调用雷池API更新证书。具体步骤包括:安装Certbot和DNS插件,配置自动续期,编写更新脚本并放置到deploy-hooks目录,然后测试。
雷池WAF更新证书需要哪些依赖?
需要安装Python的requests和pyotp库,用于发送HTTP请求和生成OTP验证码。
雷池WAF是否提供官方API文档?
没有,官方没有提供API文档,也没有生成API key的操作,只能通过模拟登录来实现。