Ahao's Studio.

长亭雷池WAF使用ACME DNS-1自动签发并更新证书

2025/05/12

部署环境:

  • Linux WAF 6.1.0-34-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.135-1 (2025-04-25) x86_64 GNU/Linux
  • 域名托管到Cloudflare
  • 超级差的校园网 常年在睡觉根本联系不到人的信息中心
  • 实验室网关是自己的iKuai并配置了DoH,本次部署也是使用ikuai作为dns

灵感

  • 内网服务器很多,每一台都为web后台配置证书很麻烦,但是http不安全,自签证书需要手动或者每次都选择信任,太麻烦了
  • 所以就想到了nginx反代,长亭雷池WAF成为了完美的选择(在水深火热的校园网内安全还是很重要的)

行动

出师不利

一开始选择不使用root来部署长亭雷池waf和acme,但是发现ACME一直失败
尝试了很多解决方法 每次issue证书都会随机报一两个错误libcurl - Error Codes
后来,用root一遍过
so
一定要听劝

(截图来自acmesh-offcial/acme.sh仓库README.md

前期准备

需要获取可以编辑域名区域的API_Token ,以及Zone_ID

  • 登录cloudflare,在账户信息中找到添加API_Token

  • 指定你的域名所在的区域并保存

  • 创建令牌,复制好备用(令牌只在第一次创建时显示)

  • 接下来进入你的域名的Overview概述页面,划到下面在右下角找到Zone ID,将其复制

开始部署

ACME

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#使用root运行
#安装长亭雷池WAF
bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/manager.sh)"

#安装acme,注意将邮箱改为自己的
curl https://get.acme.sh | sh -s email=my@example.com
#如遇到网络问题可以参考https://github.com/acmesh-official/acme.sh/wiki/Install-in-China

#将前面获取到的API_Token以及Zone_ID添加到临时环境变量
export CF_Token="F831evXO8tzrl5mJ-q7MufhuLutA0Cm9k0mxKyzu"
export CF_Zone_ID="0243c11e43ece2a1af1bc21031054f9e"

#使用acme脚本开始签发证书
apt update && apt install cron -y
acme.sh --issue --dns dns_cf -d *.your-domain.com

#ACME签发一半的问题都是GFW或者运营商导致的

部署到WAF

签发成功后在~/.acme.sh/'*.your-domain.com/

  • (windows文件名不允许有*,所以可以cat输出到终端复制)
  • 将证书'your-domain.com.cer' 和私钥 your-domain.com.key 的内容复制并在WAF后台添加证书处粘贴

  • 这时就可以在/data/safeline/resources/nginx/certs/处看到证书和私钥,现在就可以进行最后一步:自动化签发替换证书并reload nginx了
1
2
3
4
acme.sh --install-cert -d *.your-domain.com \
--key-file /data/safeline/resources/nginx/certs/cert_1.key \
--fullchain-file /data/safeline/resources/nginx/certs/cert_1.crt \
--reloadcmd "docker exec safeline-tengine nginx -s reload"

  • 现在你已经完成了为长亭雷池WAF自动使用ACME DNS-1自动签发证书,并自动更新替换的部署
    如使用其他服务商而不是Cloudflare操作可参考最下面附上的文档和文章

参考文章和文档

雷池社区版自动SSL | 雷池 SafeLine
acmesh-official/acme.sh: A pure Unix shell script implementing ACME client protocol
dnsapi · acmesh-official/acme.sh Wiki

CATALOG
  1. 1. 灵感
  2. 2. 行动
    1. 2.1. 出师不利
    2. 2.2. 前期准备
      1. 2.2.1. 需要获取可以编辑域名区域的API_Token ,以及Zone_ID
  3. 3. 开始部署
    1. 3.0.1. ACME
    2. 3.0.2. 部署到WAF
  • 4. 参考文章和文档