Skip to content

bug: Podman supervisor cannot trust operator-supplied CA for upstream TLS after v0.1.2 architecture change #3781

Description

@Tojaj

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

  • Podman sandboxes can use an operator-owned additional CA bundle for direct, inspected HTTPS egress without configuring https_proxy or rebuilding the supervisor image.
  • A policy-allowed private-CA HTTPS endpoint returns its application response while public-CA endpoints continue to work.
  • Upstream certificate and hostname verification remain enabled; malformed or unreadable configured CA material produces an actionable error.
  • The operator-provided trust material reaches the supervisor's upstream TLS client and remains separate from gateway authentication trust.

Reproduction Steps

  1. 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.
  2. 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.
  3. 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.
  4. 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    state:triage-neededOpened without agent diagnostics and needs triage

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions