We use essential cookies to make the site work. With your consent, we also use analytics + marketing cookies.
A survey of common webhook-signature mistakes — timestamp windows, cert rotation, HMAC pitfalls — and how we designed ours to be safe by default.
Webhook signatures should be boring. In practice, most CPaaS integrations get them subtly wrong — usually in ways that only bite you six months in, on an outage nobody can reproduce.
Header: X-CPaaS-Signature: t=1734567890,v1=abcd...
signed_payload = "{timestamp}.{raw_body}"
signature = HMAC_SHA256(signing_secret, signed_payload)On the receiver side you reject anything with a timestamp more than 5 minutes off, HMAC the concatenation yourself, and constant-time compare.
When you rotate a signing secret we keep the previous one accepted for 24 hours. That gives you a graceful window to redeploy your verifier code. Both secrets are returned by the API so you can log signature-verification success rate before you flip.
The best webhook signature scheme is one you can rotate at 2 AM without paging anyone.— Every SRE, everywhere