Skip to content

Webhook

创建Webhook署时,需要提供Webhook的回调地址,以及生成一个回调令牌。

Certeasy服务的下发请求参数类型为application/json,请求内容具体如下:

{
	"timestamp": "1725724459", // 请求时间戳
	"payload": {
		"fullchain": "-----BEGIN CERTIFICATE-----\nMIIE9......=\n-----END CERTIFICATE-----\n", // 证书内容
		"key": "-----BEGIN PRIVATE KEY-----\nMIIEvgI......y\n-----END PRIVATE KEY-----\n", // 证书密钥
		"name": "cert-cloud-202409101568-668" // 证书名称
	},
	"sign": "909eff6e8fb75a0a9f018131baef40e1", // 签名内容
}

sign 生产方式 : MD5(timestamp + MD5('您的回调令牌'))

1.创建Webhook部署

在Certeasy 云资源添加页面,填写 Webhook 地址和生成/粘贴回调令牌

阿里云登录页

2.签名验证返回

用户接受数据后需要对数据签名进行校验,判断请求是否合法。

校验方式如下:

MD5(requestBody.timestamp + MD5('您的回调令牌')) === requestBody.sign

验签正确请返回响应,字符串 success 内容如下:

success

3.示例

  @Post('/webhook')
  @HttpCode(HttpStatus.OK)
  webhook(@Body() data: any, @Query() query: any, @Res() res: Response) {
    const requestBody = {
      ...data,
      ...query,
    };
    if (!requestBody?.timestamp) {
      res.status(HttpStatus.OK).send('failed');
      return;
    }
    // 签名校验
    const sign = cryptoMd5(
      requestBody?.timestamp + cryptoMd5('对应的密钥'),
    );
    if (sign !== requestBody?.sign) {
      res.status(HttpStatus.OK).send('sign failed');
      return;
    }
    // 这里需要直接输出
    res.status(HttpStatus.OK).send('success');
    return;
  }

一站式证书服务 · 自动签发 · 自动部署 · 到期监控