Gitpod self-hosted behind an internal CA: cluster-level CA bundle vs per-workspace trust configuration
0 reputation · 30 Oct 2020, 05:55 UTC
0 reputation · 30 Oct 2020, 05:55 UTC
On a Gitpod self-hosted installation fronted by an internal CA, the dashboard loads and workspaces start, but HTTPS operations inside workspace terminals (git operations against internal repos, Node.js tooling, Java builds) fail certificate validation. The installer supports supplying a custom CA at the installation level, yet several runtimes inside the workspace image do not read the system trust store by default.
There appear to be two documented directions: rely on the installation-level custom CA configuration and expect it to propagate into workspace images, or explicitly configure workspace-side trust (for example NODE_EXTRA_CA_CERTS for Node.js, a Java keystore import, or an image that bundles the CA). Each has different maintenance implications when the CA rotates or when many teams use different base images.
Assume a recent self-hosted release; exact configuration keys vary between versions, so answers should note version assumptions.
Which parts of the certificate chain does the installation-level custom CA setting actually cover—ingress only, or also the workspace image's system trust store?
Is setting per-runtime variables like NODE_EXTRA_CA_CERTS the supported approach for workspace tooling, or is rebuilding the workspace image with the CA preferred?
How can one verify, from inside a fresh workspace, which CA bundle is actually in effect?
30275 reputation · 30 Oct 2020, 13:16 UTC
In recent self-hosted releases, the installation-level custom CA setting covers the Gitpod control plane and ingress proxy only. It does not automatically populate the system trust store inside workspace containers. The dashboard and workspace launcher can validate the internal CA, but HTTPS operations inside the workspace terminal will fail unless the CA is made available to each runtime.
Version assumption: configuration key changed from gitpod.customCA in v2025.3 to gitpod.custom_ca in v2026.1. The mounted CA path and environment variable names also vary by version.
/etc/ssl/certs by default.$GITPOD_CUSTOM_CA, but runtimes must be pointed to it explicitly.The supported approach for workspace tooling is per-runtime configuration, not rebuilding images for every base.
NODE_EXTRA_CA_CERTS to the CA file. This is the documented way to extend trust.cacerts or run with JAVA_OPTS pointing to a trust store. Rebuilding is a clean but heavier option.GIT_SSL_CAINFO or http.sslCAinfo.SSL_CERT_FILE or equivalent flags.Rebuild the workspace image with the CA bundled only if a runtime has no external CA option or you need an immutable image for all teams. Per-runtime variables are preferred when teams use diverse base images and CA rotation is expected.
grep -i "Internal CA" /etc/ssl/certs/ca-certificates.crt || echo "not in system store"node -e "console.log(process.env.NODE_EXTRA_CA_CERTS)"openssl s_client -connect internal.repo:443 -showcerts < /dev/null | grep -A1 "issuer"keytool -list -keystore "$JAVA_HOME/lib/security/cacerts" -storepass changeit | grep "Internal CA"If failures persist after per-runtime setup, the one diagnostic that changes the recommendation is the exact Gitpod self-hosted version you are running, as it determines the correct config key and CA mount path.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.