User Story
As an operator running Podman sandboxes against private-CA HTTPS services, I want inspected egress to trust an operator-supplied CA, so that agents can reach internal services without rebuilding the supervisor image for each OpenShell upgrade or CA rotation.
Problem Statement
After upgrading OpenShell from v0.0.116 to v0.1.2, a Podman sandbox whose workload image trusts a private CA no longer receives HTTP responses from services signed by that CA. The sandbox client completes TLS with OpenShell's interception certificate and sends its request, then receives curl: (52) Empty reply from server. The supervisor allows the connection but fails during upstream TLS establishment, before emitting an HTTP request event. The same service responds from the host, and other HTTPS destinations work.
This is a regression in the trust path: v0.0.116 ran the supervisor binary inside the workload container, where it could read that image's CA bundle. v0.1.2 runs a separate container from supervisor_image, whose CA bundle does not inherit workload-image additions. The supervisor reads its own system bundle for upstream TLS verification. v0.0.116 Podman spec, v0.1.2 supervisor spec, upstream root-store construction.
Impact / Why This Matters
Policy-allowed, inspected HTTPS requests to internal services stop working after the upgrade. The confirmed workaround is to build a version-matched custom supervisor image containing the private root, configure supervisor_image, restart the gateway, and create a fresh sandbox. That image must be rebuilt for OpenShell upgrades and CA rotation. tls: skip can avoid supervisor upstream verification but gives up HTTP inspection and credential rewriting, so it is insufficient for inspected endpoints. Podman's proxy_ca_bundle requires https_proxy and cannot configure trust for direct egress. Podman validation.
Acceptance Criteria
Reproduction Steps
- On v0.0.116, run a Podman sandbox with a workload image whose system CA bundle contains a private root. Allow an HTTPS destination signed by that root and request it from the sandbox. Observe an HTTP response.
- Upgrade to v0.1.2 and create a fresh sandbox using the same workload image and policy, with the stock supervisor image and direct egress (no
https_proxy). Request the same destination.
- Observe
curl: (52) Empty reply from server and a supervisor NET:FAIL event reporting Upstream TLS establishment failed after NET:OPEN ... ALLOWED. Verify the destination still responds from the host.
- Build a custom v0.1.2 supervisor image with that root CA, set Podman's
supervisor_image to it, restart the gateway, and create a fresh sandbox. The inspected request now returns an application-level response.
Environment
- OpenShell: worked on v0.0.116; regressed on v0.1.2 (latest release at filing).
- Runtime: Podman with the native Podman compute driver and separate workload/supervisor containers in v0.1.2.
- Egress: direct HTTPS to a service signed by a private CA; no corporate forward proxy.
- Host OS and Podman version: not recorded in the source report.
Logs
NET:OPEN ... ALLOWED ... -> <private-CA-host>:443
NET:FAIL ... <private-CA-host>:443
"message":"Upstream TLS establishment failed"
curl: (52) Empty reply from server
The OCSF event does not include the nested TLS library error. The custom-supervisor-image test confirms the missing private root in the stock supervisor's trust store as the cause in this environment.
Related: #3295 requests operator-managed additional destination CA trust across drivers. This report records the v0.1.2 Podman regression and its confirmed workaround.
User Story
As an operator running Podman sandboxes against private-CA HTTPS services, I want inspected egress to trust an operator-supplied CA, so that agents can reach internal services without rebuilding the supervisor image for each OpenShell upgrade or CA rotation.
Problem Statement
After upgrading OpenShell from v0.0.116 to v0.1.2, a Podman sandbox whose workload image trusts a private CA no longer receives HTTP responses from services signed by that CA. The sandbox client completes TLS with OpenShell's interception certificate and sends its request, then receives
curl: (52) Empty reply from server. The supervisor allows the connection but fails during upstream TLS establishment, before emitting an HTTP request event. The same service responds from the host, and other HTTPS destinations work.This is a regression in the trust path: v0.0.116 ran the supervisor binary inside the workload container, where it could read that image's CA bundle. v0.1.2 runs a separate container from
supervisor_image, whose CA bundle does not inherit workload-image additions. The supervisor reads its own system bundle for upstream TLS verification. v0.0.116 Podman spec, v0.1.2 supervisor spec, upstream root-store construction.Impact / Why This Matters
Policy-allowed, inspected HTTPS requests to internal services stop working after the upgrade. The confirmed workaround is to build a version-matched custom supervisor image containing the private root, configure
supervisor_image, restart the gateway, and create a fresh sandbox. That image must be rebuilt for OpenShell upgrades and CA rotation.tls: skipcan avoid supervisor upstream verification but gives up HTTP inspection and credential rewriting, so it is insufficient for inspected endpoints. Podman'sproxy_ca_bundlerequireshttps_proxyand cannot configure trust for direct egress. Podman validation.Acceptance Criteria
https_proxyor rebuilding the supervisor image.Reproduction Steps
https_proxy). Request the same destination.curl: (52) Empty reply from serverand a supervisorNET:FAILevent reportingUpstream TLS establishment failedafterNET:OPEN ... ALLOWED. Verify the destination still responds from the host.supervisor_imageto it, restart the gateway, and create a fresh sandbox. The inspected request now returns an application-level response.Environment
Logs
The OCSF event does not include the nested TLS library error. The custom-supervisor-image test confirms the missing private root in the stock supervisor's trust store as the cause in this environment.
Related: #3295 requests operator-managed additional destination CA trust across drivers. This report records the v0.1.2 Podman regression and its confirmed workaround.