v1.5.4
v1.5.4 - cert SAN cross-check in the route editor
A small UX-only patch release. One feature, no Rust code change, no schema migration, no config change. Upgrade is drop-in.
Added
- Issue #11 (route editor / TLS cert SAN cross-check) : the Routing tab in the route drawer now flags a non-blocking warning when the selected certificate's SAN list does not cover the route's
hostnameor any of itshostname_aliases. Pre-fix the mismatch was only visible at runtime as a TLS handshake failure (SSL_ERROR_BAD_CERT_DOMAINbrowser-side,unknown certificateworker-side) ; an operator who picked the wrong cert would not learn about it until a real client tried to reach the route. The check runs RFC 6125 strict matching - the same rules Chrome / Firefox / Safari enforce on the live handshake - so a "covered" verdict in the editor predicts a successful handshake, and an "uncovered" verdict predicts a real failure rather than a guess that can diverge from the browser. Specifically : exact match (case-insensitive, trailing-dot tolerant), wildcard match where*.example.comcovers exactly one subdomain label (sopki.example.comis in,a.b.example.comand the bare apexexample.comare out), partial-label wildcards likepki*.example.comrejected as ambiguous (Chrome / Firefox both reject these). The warning is rendered in the existingwarn-bannerstyle under the cert select with the offending hostname(s) named and the cert's SAN list echoed for context. Save remains allowed - a wildcard or multi-SAN cert that the operator knows covers the host can still be saved without friction. Newlib/cert-san-match.ts(3 exports :hostnameMatchesSan,hostnameCoveredByAny,findUncoveredHostnames) + 23 vitest cases pinning the contract (exact, wildcard single-label, apex rejection, multi-label rejection, partial-label rejection, case-insensitive, trailing-dot, label-boundary straddle, empty inputs, deduplication). No backend change : theCertificateResponse.san_domainsfield already carried the SAN list since v1.5.3 SAN extraction. 343 frontend tests green (was 320).
Upgrade notes
- No schema migration, no config change.
- No new dependency.
- Rust binaries are unchanged in behaviour ; the bump is metadata-only on the Rust side.
- A v1.5.3 -> v1.5.4 upgrade is a hot drop-in : stop the service, replace the binary / .deb / .rpm, restart. The SQLite store, certificates, configs, sessions all carry forward unchanged.
Artifacts
.deb(Ubuntu / Debian, amd64) : built viadist/build-deb.sh.rpm(RHEL / Rocky / Alma, x86_64) : built viadist/rpm/lorica.spec- Source tarball : auto-generated by GitHub from the tag
Verification (operator-side after deploy)
- Open the dashboard, edit any route that has a TLS certificate selected.
- Switch to a certificate whose SAN list does NOT cover the route hostname (or temporarily change the hostname).
- Confirm the orange warn banner appears under the TLS Certificate select with the offending hostname named.
- Confirm the Save button remains enabled (the warning is informational, not blocking).
- Switch back to a covering cert ; the banner clears in real time.