By default, FANGS listens on plain HTTP — convenient for local development but not suitable for any environment where the runner and orchestrator are on different hosts. FANGS supports two levels of transport security: server TLS, which encrypts the connection and authenticates the orchestrator to runners, and mutual TLS (mTLS), which additionally requires runners to present a client certificate before the orchestrator accepts them. Without mTLS, any process that can reach the orchestrator’s port can register as a runner and receive scan jobs.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/irchaosclub/FANGS/llms.txt
Use this file to discover all available pages before exploring further.
Modes at a glance
Plain HTTP
No flags required. Development and single-host setups only. The orchestrator logs
scheme: http.Server TLS
Orchestrator uses
-tls-cert + -tls-key. Runner uses -tls-ca. Connection is encrypted and the orchestrator’s identity is verified.Mutual TLS
Server TLS plus orchestrator uses
-tls-client-ca. Runner additionally uses -tls-cert + -tls-key. Both sides are authenticated.TLS implementation details
The orchestrator’s TLS configuration is built bybuildServerTLSConfig in internal/orchestrator/api/server.go:
- Minimum TLS version: 1.2 (
tls.VersionTLS12) - Server TLS: activated when both
-tls-certand-tls-keyare non-empty; the server callsListenAndServeTLSwith the supplied cert/key pair - mTLS: activated when
-tls-client-cais additionally set; the server setsClientAuth = tls.RequireAndVerifyClientCertand loads the CA pool from the supplied PEM bundle
Step 1 — Generate certificates
FANGS ships a convenience script atdocs/scripts/gen-tls.sh that creates a self-signed CA, a server certificate with SANs, and a runner client certificate. Use it for development and testing; in production, issue certificates from your existing PKI.
Run the generator script
tls/ca.crt, tls/server.crt, and tls/runner.crt already exist. Delete the tls/ directory to regenerate.What the script does
The script runs the following openssl commands (abbreviated):The
extendedKeyUsage constraints are intentionally set: serverAuth on the server cert and clientAuth on the runner cert. Go’s TLS stack enforces these during the handshake.Step 2 — Configure the orchestrator
- Server TLS only
- Mutual TLS (recommended)
Runners must supply
-tls-ca but do not need a client certificate.Step 3 — Configure the runner
- Server TLS only
- Mutual TLS (recommended)
Multiple runners
Each runner can share the same client certificate, or you can issue per-runner certs from the same CA for stronger identity isolation. To issue an additional cert for a second runner:-tls-client-ca. It does not require separate registration per CN — the runner’s identity is the -runner-id flag, which is independent of the certificate CN.
Certificate rotation
Issue new certificates from the same CA
Run the openssl commands above with a new key and a fresh validity period. The CA key and
ca.crt do not change.Deploy the new cert and key to the orchestrator
Copy the new
server.crt and server.key to the orchestrator host, then restart the orchestrator. Existing runner connections will reconnect and pick up the new cert automatically.