fix: regenerate TLS cert when services change (hot-reload via ArcSwap)
HTTPS proxy certs were generated once at startup. Services added at runtime via API or LAN discovery got "not secure" in the browser because their SAN wasn't in the cert. Now the cert is regenerated on every service add/remove and swapped atomically via ArcSwap. In-flight connections are unaffected. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -711,7 +711,11 @@ async fn create_service(
|
||||
}
|
||||
|
||||
let tld = &ctx.proxy_tld;
|
||||
let is_new = !ctx.services.lock().unwrap().has_name(&name);
|
||||
ctx.services.lock().unwrap().insert(&name, req.target_port);
|
||||
if is_new {
|
||||
crate::tls::regenerate_tls(&ctx);
|
||||
}
|
||||
|
||||
let localhost = std::net::SocketAddr::from(([127, 0, 0, 1], req.target_port));
|
||||
let lan_addr =
|
||||
@@ -740,8 +744,9 @@ async fn remove_service(State(ctx): State<Arc<ServerCtx>>, Path(name): Path<Stri
|
||||
if name.eq_ignore_ascii_case("numa") {
|
||||
return StatusCode::FORBIDDEN;
|
||||
}
|
||||
let mut store = ctx.services.lock().unwrap();
|
||||
if store.remove(&name) {
|
||||
let removed = ctx.services.lock().unwrap().remove(&name);
|
||||
if removed {
|
||||
crate::tls::regenerate_tls(&ctx);
|
||||
StatusCode::NO_CONTENT
|
||||
} else {
|
||||
StatusCode::NOT_FOUND
|
||||
|
||||
Reference in New Issue
Block a user