Available since version 0.71.0
config.yaml
Use cases
- A typical use case for TLS is to secure communications between your load balancer and router.
- Enable HTTP/2. TLS is mandatory for HTTP/2 operation. Once enabled, requests are upgraded to HTTP/2 whenever possible.
Cipher
By default, we inherit the defaults of Go TLS configuration. This means the following TLS protocols are supported:- TLS 1.3
- TLS 1.2
- TLS 1.1
- TLS 1.0
We strongly advice against using TLS below 1.2 for security reasons.
If our configuration does not meet your requirements, don’t hesitate to contact us or open an issue on GitHub.
Client Authentication or Mutual TLS (mTLS)
In a standard SSL transaction, the client verifies the server’s validity when establishing a secure connection. This involves checking the server’s certificate prior to starting the SSL transaction. However, there may be situations where you wish for the server to authenticate the client connecting to it. When client authentication is activated viaclient_auth.cert_file the client can send a certificate to the server that is validated by the server before a connection is established. By default it is not a requirement and the server support clients with valid and without certificates. You can set required to true to enforce that a client must be verified and authentic. If the validation does not succeed the client connection is refused.
config.yaml
client_auth with required=true on the server and the correct TLS settings on the client side.
Example in Go Clients
TLS with Subgraphs
For subgraph connections, encryption and authentication are automatically enabled when the subgraph URL uses thehttps:// protocol.
These settings do not apply to Cosmo Connect subgraphs.
See TLS with gRPC Subgraphs on how to configure them.
Custom CA Certificates
By default, the router uses your operating system’s root CA store to verify subgraph server certificates. If your subgraphs use TLS certificates signed by an internal or private CA that is not in the system’s root CA store, you can provide a custom CA certificate file usingca_file. The router will use this CA to verify the subgraph’s server certificate during the TLS handshake.
config.yaml
Router mTLS
In addition to accepting mTLS connections from clients (inbound), the router can also present client certificates when connecting to subgraphs (outbound). This is useful when your subgraphs require mTLS authentication to accept requests from the router. You can configure a global client certificate that applies to all subgraph connections, and optionally override it on a per-subgraph basis.Global Configuration
Apply a client certificate to all outbound subgraph connections:config.yaml
Per-Subgraph Configuration
Override the global config for specific subgraphs. Each entry fully overrides the globalall config for that subgraph:
config.yaml
Per-subgraph entries live under
tls.client.subgraphs and use the same field structure as tls.client.all (e.g., cert_file, key_file). A per-subgraph entry fully overrides the global all config for that subgraph.TLS with gRPC Subgraphs
gRPC subgraph connections use a separate configuration section from HTTP subgraphs:tls.client_grpc.
Unlike HTTP subgraphs, where a https:// URL automatically enables TLS, gRPC subgraph TLS must be explicitly activated with enabled: true.
Enabling TLS
Setenabled: true under tls.client_grpc.all to enable TLS for all gRPC subgraph connections. By default, the router uses the operating system’s root CA store to verify server certificates.
config.yaml
all config and configure it under subgraphs:
config.yaml
enabled: false in the per-subgraph entry. Per-subgraph config fully replaces the global all config for that subgraph.
config.yaml
Custom CA Certificates
If your gRPC subgraphs use certificates signed by an internal or private CA, provide the CA certificate viaca_file:
config.yaml
ca_file can also be set per-subgraph to use a different CA for a specific subgraph:
config.yaml
mTLS
To present a client certificate to gRPC subgraphs (mutual TLS), provide bothcert_file and key_file. Both fields are required together.
Global Configuration
Apply a client certificate to all gRPC subgraph connections:config.yaml
Per-Subgraph Configuration
Override the global config for specific gRPC subgraphs. A per-subgraph entry fully replaces the globalall config for that subgraph. It does not merge with it.
config.yaml
config.yaml