docs/security/architecture.md
This document outlines the security architecture of Jaeger, focusing on cryptographic practices, input validation, and system hardening.
Jaeger supports TLS for all its network communications, including span ingestion, internal component communication, and access to the Query API and UI.
TLS can be configured for both clients and servers across all Jaeger components (Collector, Query, Ingester, Agent).
Jaeger can be configured to use TLS 1.2 and 1.3, and these are the only versions that should be used in production. Users should configure the minimum supported version as TLS 1.2 or higher using the --tls.min-version flag, or the corresponding YAML configuration, with TLS 1.3 recommended where available. While TLS 1.0 and 1.1 may still be technically supported for legacy interoperability, they are deprecated, have known security weaknesses, and must not be enabled in production environments.
Jaeger uses Go's standard crypto/tls implementation for TLS. Operators can configure the allowed cipher suites to ensure only strong cryptographic algorithms are used in their deployment.
insecure: true or insecure_skip_verify: true to bypass security controls, which is strongly discouraged for production environments.Jaeger verifies TLS certificates during the TLS handshake before application data is transmitted. Certificate verification is enabled by default when TLS is configured, and operators must explicitly opt out with insecure settings such as insecure_skip_verify.
Jaeger performs strict input validation to prevent injection attacks and ensure system stability.
Jaeger is designed to be deployed in a hardened manner.
alpine or scratch to reduce the attack surface.harden-runner to monitor and restrict network access during the build process.