Appearance
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;
}