Skip to content

GUIDES · 08

Enterprise networks.

Corporate proxies with TLS inspection and self-signed roots are a first-class deployment, not a workaround. Tell tebako how to reach the network (the proxy half) and what to trust (the roots half) — both are one environment variable or three lines of config.yaml.

The two halves.

Everything tebako downloads — runtimes, payloads, registry indexes — uses one in-process HTTPS client. Getting through an enterprise network is always the same two questions:

  1. Reach the network — which proxy do connections go through?

  2. Trust the answer — which root certificates verify the TLS connection, especially when the proxy inspects (re-encrypts) traffic with your organization’s own root CA?

Both are answered by environment variables or by the network: section of ~/.tebako/config.yaml. Environment always wins, per key. There is no "disable verification" setting and there never will be — a wrong answer fails closed with a named error, never a silent fallback.

Reach the network: the proxy.

The standard spellings work, uppercase or lowercase:

$ export HTTPS_PROXY=http://proxy.corp:3128
$ export NO_PROXY=localhost,127.0.0.1,.internal.corp   # comma list; * and .suffix work
$ tebako install metanorma

or the same policy in config:

# ~/.tebako/config.yaml
network:
  proxy: http://proxy.corp:3128

Precedence is HTTPS_PROXYHTTP_PROXYALL_PROXYnetwork.proxy → direct. HTTPS connections tunnel through the proxy via CONNECT and TLS still terminates at the target host — an inspecting proxy re-encrypts, which is exactly what the trust half below is for.

Proxy authentication uses credentials embedded in the URL (http://user:pass@proxy.corp:3128). Credentials never reach the log: the audit journal records proxy=http://*@proxy.corp:3128. A proxy that rejects them answers with the named ProxyAuthRequired error (HTTP 407). SOCKS proxies are not supported and are refused by name.

Trust the answer: three spellings.

1. The default (bundled Mozilla roots). Nothing to configure. Works wherever the proxy passes TLS through untouched.

2. The platform store — for roots your IT pushes by GPO/MDM into the operating system’s own trust store (Windows certificate store, macOS keychain, the Linux CA bundle). One env var:

$ export TEBAKO_TLS_PLATFORM_ROOTS=1

or in config:

network:
  tls_roots: platform

3. Additive PEMs — keep the bundled Mozilla roots AND ALSO trust your organization’s root, from a PEM file:

$ export TEBAKO_EXTRA_CA=/etc/pki/corp-root.pem    # os-path-list; several files allowed
network:
  extra_ca: [/etc/pki/corp-root.pem]

The additive and platform spellings do not combine — the OS verifier trusts exactly the OS store, so tls_roots: platform together with extra_ca is a named error that tells you to push the CA into the OS store instead. A PEM that is unreadable or does not parse is a named error at startup, never a silently skipped file.

See what was decided.

Every process that fetches writes its network policy to the audit journal, ~/.tebako/journal.log:

1788670000 event=network-config proxy=http://***@proxy.corp:3128 (/home/u/.tebako/config.yaml)
1788670000 event=network-config extra_ca=1 file(s) (/home/u/.tebako/config.yaml)

Fleet tooling can scrape the journal to prove which machines run with which policy.

The packaged application’s own connections.

The settings above govern tebako’s downloads. A packaged application making its own TLS connections (Ruby’s net/http, Python’s requests, …) is a separate surface: it reads the runtime’s usual variables, and a payload image can ship its own CA bundle that the driver exports as SSL_CERT_FILE at boot (a mounted ssl/cert.pem marked for materialization). Your organization’s root can travel inside the payload itself — no host configuration needed. The runtime’s own tooling conventions (REQUESTS_CA_BUNDLE, SSL_CERT_FILE, …) apply unchanged.

Fully offline fleets.

For sites with no outbound access at all, pair this guide with Curate a local library: one team mirrors the needed artifacts into a directory registry (file:///), and every machine installs from it. TEBAKO_OFFLINE=1 turns any accidental network reach into a hard error instead of a leak.

The one exception you may meet.

The size-gated bootstrap (the first bytes of a standalone packaged executable) deliberately ships without the proxy/additive-CA machinery to stay under its 3 MiB gate. It always honors TEBAKO_TLS_PLATFORM_ROOTS; pointed at a proxy or TEBAKO_EXTRA_CA, it stops with the named NetworkingCompiledOut error instead of guessing. The fix on such machines is the toolchain path — tebako install and the shims — which carries the full surface, or the platform-store spelling, which works everywhere.