Checkout outage: expired payment-gateway certificate
Author: Dmitri Sokolov · Date: 2026-09-14
| Severity | Duration | Detected by | Incident commander |
|---|---|---|---|
| SEV1 | 47 min | Synthetic checkout probe | Priya Raman |
Summary
On 10 September, Kestrel's checkout service could not reach our payment gateway for 47 minutes because the client certificate it presents had expired. Every card payment failed with a generic error. We restored service by deploying a renewed certificate by hand.
Impact
Card checkouts failed for all web and mobile customers from 14:02 to 14:49 UTC. Orders paid with store credit were unaffected. Roughly 3,100 customers saw a failed payment, and an estimated $41,000 in orders was abandoned; about 60% of those customers retried successfully after recovery.
Timeline
timeline
title Incident timeline (UTC)
14.02 : Gateway certificate expires, payments start failing
14.06 : Synthetic checkout probe pages on-call
14.11 : On-call acknowledged, incident declared
14.31 : Root cause identified as expired client cert
14.44 : Renewed cert deployed by hand
14.49 : Payment success rate back to baseline
| Time (UTC) | Event |
|---|---|
| 14:02 | Client certificate for the gateway expires |
| 14:06 | Synthetic checkout probe fires, pages on-call |
| 14:11 | On-call (Dmitri) acknowledges, declares SEV1 |
| 14:31 | TLS handshake error in gateway logs points to the cert |
| 14:44 | Renewed cert issued and deployed by hand |
| 14:49 | Payment success rate recovers to 99.4% |
Root cause
- Why did payments fail? The gateway rejected our expired client certificate.
- Why was it expired? It was issued manually in 2025 with a one-year lifetime and never renewed.
- Why was it not renewed? It lives outside cert-manager, so no automated renewal covered it.
- Why did nobody notice? Our expiry alerts only watch certificates cert-manager issues.
- Why is it outside cert-manager? The gateway requires a CSR flow we never automated.
What went well
- The synthetic probe detected the failure within four minutes.
- The payments runbook pointed straight at the gateway logs.
What went poorly
- Twenty minutes went to suspecting the morning's deploy before checking TLS errors.
- Issuing a new cert needed a vendor portal login only two people had.
Where we got lucky
- One of those two people was online. On a weekend this would have lasted hours.
Action items
| Action | Owner | Priority | Due |
|---|---|---|---|
| Automate gateway CSR flow in cert-manager (PAY-812) | Dmitri Sokolov | P0 | 2026-09-26 |
| Alert on every TLS cert in the inventory, not just managed ones (OBS-301) | Ana Lima | P1 | 2026-10-03 |
| Add TLS handshake errors to the payments dashboard (OBS-302) | Ana Lima | P2 | 2026-10-10 |
| Share vendor portal access with the on-call group (SEC-77) | Priya Raman | P1 | 2026-09-19 |
Lessons
A certificate nobody's tooling knows about is a certificate that will expire. Inventory beats memory.