Two main themes in this release:
- OCSP stapling (Pro) — certificate monitors now capture the OCSP staple presented during the TLS handshake and raise a critical alert the moment a certificate is reported revoked.
- Status page on a dedicated subdomain — host the public status page at
status.example.com/with a clean URL, full personalization, and a single new env var.
OCSP stapling :material-crown: (Pro)
Revoked certificates can no longer hide behind a still-valid expiration date. Every certificate check — whether it comes from a standalone monitor or is auto-detected through an HTTPS endpoint — now captures the OCSP staple presented during the TLS handshake.
The captured fields are persisted on each check and exposed via the API:
| Field | Meaning |
|---|---|
ocsp_status
| good, revoked, unknown or error
|
ocsp_produced_at
| Timestamp when the OCSP response was issued |
ocsp_next_update
| Timestamp until which the staple is considered fresh |
ocsp_revoked_at
| Set when the responder reports a revocation |
ocsp_parse_error
| Set when the staple is present but unparseable |
Behavior
revokedemits a newocsp_revokedcritical alert through the existing pipeline — triggers, escalations, silences, and acknowledgments all apply without any extra configuration.- Stale staples (
NextUpdatein the past) downgrade tounknownand never alert, avoiding noise during responder outages. - No staple presented is treated as
unknown— also silent. Pinging the OCSP responder out-of-band is out of scope. ocsp_revokedis resolved automatically the next time a check returnsgood(rotation deployed).
UI
The SSL Certificates surface gains:
- A dedicated OCSP block in the slideover detail (status badge, produced-at / next-update, parse error message).
- An OCSP badge on certificate cards — shown only when the status is
revokedorerror, so green and unknown stay quiet. - A new History tab on the slideover that renders the per-check history (status dot, days remaining, OCSP badge) from
GET /api/v1/certificates/{id}/checks. - Humanized alert labels in Active alerts and the Alerts list:
ocsp_revokedshows as "Certificate revoked (OCSP)".
Edition gating
OCSP stapling is a Pro feature. Capture runs in Community to keep the code path simple, but persistence, API exposure, and alert emission are skipped unless the Pro edition is active. A new ocsp_stapling feature flag is exposed on GET /api/v1/edition; Community users see a Pro teaser in the OCSP block instead of an empty section.
Migration
Migration 20_cert_ocsp adds five nullable columns to cert_check_results. Existing rows are unaffected. The down.sql is a no-op (SQLite < 3.35 does not support DROP COLUMN); rolling back means staying on v1.2.12.
Status page on its own subdomain
The public status page can now be hosted at its own URL (e.g. https://status.example.com/) with no visible /status in the address bar. It is served by the Vue SPA, so all personalization features introduced in v1.2.11 (branding, palette, announcement banner, footer, FAQ, localization) render on both same-domain and subdomain deployments.
MAINTENANT_STATUS_URL
A new optional environment variable that declares the canonical, externally-reachable URL of your status page:
MAINTENANT_STATUS_URL=https://status.example.comIt is exposed to the frontend through GET /api/v1/edition as status_url and surfaced via the useEdition().statusURL composable. The admin UI uses it for the View public status page link in /status-admin, with a fallback to /status when the variable is not set — so existing single-domain deployments continue to work unchanged.
Subdomain routing
When the status page is served from its own subdomain, the Vue router detects the dedicated-status context and mounts PublicStatusPage at /, so visitors see a clean address bar with no redirect flash.
For deployments behind Traefik, the recommended middleware is replacepathregex (only rewriting the root / to /status/) rather than addprefix — this keeps SPA asset paths (/assets/...) and SSE endpoints (/status/events) intact:
http.routers.maintenant-status.rule: "Host(`status.example.com`)"
http.routers.maintenant-status.middlewares: "status-rewrite@docker"
http.middlewares.status-rewrite.replacepathregex.regex: "^/$"
http.middlewares.status-rewrite.replacepathregex.replacement: "/status/"Fixes & internals
- Certificate checks listing —
GET /api/v1/certificates/{id}/checksnow exposesdays_remainingin the JSON payload (previously omitted because it was a method, not a field). alert_advanced_filtersfeature flag — surfaced on the edition endpoint so the frontend can gate Pro-only trigger filters (scopes, tags) without a separate edition call.- Status page assets — fixed double-prefix 404s on CSS and SSE paths when Traefik
addprefix=/statuswas used; the favicon request is suppressed to avoid spurious 404s. - TriggerManager refactor — per-trigger rendering, channel-name lookup, and filter summarization extracted into a dedicated
TriggerList.vuecomponent. Pure refactor, no behavior change.
Upgrade notes
- OCSP stapling: nothing to configure — the feature activates automatically on Pro the moment v1.2.13 starts. Migration
20_cert_ocspruns at startup. The first check after upgrade will populate OCSP fields where a staple is present. - Status page (single-domain setups): nothing to do —
MAINTENANT_STATUS_URLis optional and the admin link falls back to/status. - Status page (subdomain setups): set
MAINTENANT_STATUS_URL=https://status.example.comand route the subdomain to the same backend. If you use Traefik, preferreplacepathregex(^/$→/status/) overaddprefix=/statusso SPA assets and SSE paths are not double-prefixed.
Documentation
- Updated: Certificates, Configuration, Status Page.