Skip to content

feat(router): add TLS/mTLS support to gRPC subgraphs#2861

Draft
dkorittki wants to merge 11 commits into
mainfrom
dominik/eng-9363-tls-support
Draft

feat(router): add TLS/mTLS support to gRPC subgraphs#2861
dkorittki wants to merge 11 commits into
mainfrom
dominik/eng-9363-tls-support

Conversation

@dkorittki
Copy link
Copy Markdown
Contributor

@dkorittki dkorittki commented May 13, 2026

WIP

Summary by CodeRabbit

  • New Features

    • TLS/mTLS support for outbound gRPC subgraph connections with global settings and per-subgraph overrides; gRPC transports can use TLS when configured.
    • HTTP vs gRPC outbound TLS settings are now separate.
  • Tests

    • New integration and unit tests covering gRPC TLS/mTLS behaviors: global vs per-subgraph overrides, CA verification, client certificate success/failure, inheritance/override semantics.
  • Documentation

    • Updated docs describing outbound TLS for HTTP and gRPC subgraphs and configuration examples.

Review Change Stack

Checklist

  • I have discussed my proposed changes in an issue and have received approval to proceed.
  • I have followed the coding standards of the project.
  • Tests or benchmarks have been added or updated.
  • Documentation has been updated on https://github.com/wundergraph/docs-website.
  • I have read the Contributors Guide.

Open Source AI Manifesto

This project follows the principles of the Open Source AI Manifesto. Please ensure your contribution aligns with its principles.

@dkorittki dkorittki changed the title feat: add (m)tls support to grpc subgraphs feat(router): add (m)tls support to grpc subgraphs May 13, 2026
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 13, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

This PR adds gRPC-specific client TLS configuration and schema, refactors TLS builders into HTTP vs gRPC paths, threads default/per-subgraph gRPC *tls.Config through the graph server into the gRPC connector, updates the gRPC provider and test env for TLS, and adds integration tests and docs for TLS/mTLS scenarios.

Changes

gRPC Client TLS Configuration

Layer / File(s) Summary
Configuration schema and contracts
router/pkg/config/config.go, router/pkg/config/config.schema.json, router/pkg/config/fixtures/full.yaml, router/pkg/config/testdata/config_defaults.json, router/pkg/config/testdata/config_full.json
New GRPCClientTLSConfiguration and TLS.ClientGRPC with all and subgraphs fields; JSON schema, fixtures, and testdata updated.
TLS config builders (HTTP vs gRPC)
router/core/tls.go, router/core/tls_test.go
Split TLS builder into buildSubgraphHTTPTLSConfigs and buildSubgraphGRPCTLSConfigs; buildTLSClientConfig now accepts certificate config by value; unit tests updated to new inputs and behaviors.
Graph server integration
router/core/graph_server.go
Build gRPC default + per-subgraph TLS configs in newGraphServer; add defaultClientTLS and perSubgraphTLS to BuildGraphMuxOptions; introduce setupConnectorOpts and pass resolved per-subgraph TLS into grpcremote.NewRemoteGRPCProvider.
gRPC remote provider TLS support
router/pkg/grpcconnector/grpcremote/grpc_remote.go
Add TLSConfig *tls.Config to RemoteGRPCProviderConfig and provider instance; select credentials.NewTLS when dialing if TLSConfig is present, otherwise use insecure credentials.
Test environment TLS setup
router-tests/testenv/testenv.go
Add SubgraphConfig.GRPCTLSConfig *tls.Config, extend makeSafeGRPCServer to accept tlsConfig and append grpc.Creds(credentials.NewTLS(...)) when non-nil, and wire subgraph GRPCTLSConfig into test server creation.
Comprehensive gRPC mTLS integration tests
router-tests/security/subgraph_grpc_mtls_test.go
Add TestSubgraphGRPCmTLS covering InsecureSkipCaVerification, client-certificate mTLS success/failure, CA CaFile verification, full mTLS, per-subgraph overrides, and helper grpcSubgraphTLSServerConfig.
Update existing HTTP mTLS tests
router-tests/security/subgraph_mtls_test.go
Replace ClientTLSConfiguration usages with HTTPClientTLSConfiguration and related wrapper types across existing mTLS tests.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • wundergraph/cosmo#2514: Main PR extends the earlier outbound subgraph mTLS work (#2514) by refactoring the router’s TLS config builders and plumbing to additionally construct and pass gRPC per-subgraph *tls.Config into grpcremote.NewRemoteGRPCProvider via the new tls.client_grpc/GRPCTLSConfig path.
  • wundergraph/cosmo#2863: Both PRs touch router/core/graph_server.go’s subgraph client TLS wiring (deriving per-subgraph HTTP TLS input from r.tls vs extending it to also build/propagate gRPC subgraph TLS configs), so the changes overlap at the code paths that construct outbound subgraph TLS.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 35.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title 'feat(router): add TLS/mTLS support to gRPC subgraphs' accurately describes the main feature added in the changeset: TLS and mutual TLS configuration support for gRPC subgraph connections.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Comment @coderabbitai help to get the list of available commands and usage tips.

@dkorittki dkorittki changed the title feat(router): add (m)tls support to grpc subgraphs feat(router): add mtls support to grpc subgraphs May 13, 2026
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 13, 2026

Router-nonroot image scan passed

✅ No security vulnerabilities found in image:

ghcr.io/wundergraph/cosmo/router:sha-393e2677f26c0b20df57652443290f0bbfd63674-nonroot

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
router/pkg/grpcconnector/grpcremote/grpc_remote.go (1)

71-86: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Protect Start with the provider mutex.

Start reads/writes g.cc without synchronization while other lifecycle methods use mu, which can race under concurrent start/get/stop paths.

Proposed fix
 func (g *RemoteGRPCProvider) Start(ctx context.Context) error {
+	g.mu.Lock()
+	defer g.mu.Unlock()
+
 	if g.cc == nil {
 		var transportCreds grpc.DialOption
 		if g.tlsConfig != nil {
 			transportCreds = grpc.WithTransportCredentials(credentials.NewTLS(g.tlsConfig))
 		} else {
 			transportCreds = grpc.WithTransportCredentials(insecure.NewCredentials())
 		}
 
 		clientConn, err := grpc.NewClient(g.endpoint, transportCreds)
 		if err != nil {
 			return fmt.Errorf("failed to create client connection: %w", err)
 		}
 
 		g.cc = clientConn
 	}
 
 	return nil
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@router/pkg/grpcconnector/grpcremote/grpc_remote.go` around lines 71 - 86,
Start currently reads/writes g.cc without acquiring the provider mutex (mu),
causing races with other lifecycle methods; modify RemoteGRPCProvider.Start to
acquire the same mutex used by other methods (mu) at the start of the function,
check g.cc while holding the lock, initialize g.cc if nil, and release the lock
(use defer Unlock immediately after Lock) so Start is synchronized with
Stop/GetClient and avoids data races on g.cc.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@router/core/tls.go`:
- Around line 71-73: The warning message logged when
sgCfg.InsecureSkipCaVerification is true is misleading (it says the subgraph
"inherits" from global config); update the logger.Warn call in tls.go (the
branch checking sgCfg.InsecureSkipCaVerification) to state that the subgraph TLS
config has InsecureSkipCaVerification enabled (or that the subgraph is
configured to skip CA verification), removing the word "inherits" and any
implication of global config so the message accurately reflects
sgCfg.InsecureSkipCaVerification and `logger.Warn` usage for the subgraph named
by `name`.

---

Outside diff comments:
In `@router/pkg/grpcconnector/grpcremote/grpc_remote.go`:
- Around line 71-86: Start currently reads/writes g.cc without acquiring the
provider mutex (mu), causing races with other lifecycle methods; modify
RemoteGRPCProvider.Start to acquire the same mutex used by other methods (mu) at
the start of the function, check g.cc while holding the lock, initialize g.cc if
nil, and release the lock (use defer Unlock immediately after Lock) so Start is
synchronized with Stop/GetClient and avoids data races on g.cc.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4e212fb2-4a36-4f65-bab3-b669318a1727

📥 Commits

Reviewing files that changed from the base of the PR and between 18d3ec0 and 1782dc5.

📒 Files selected for processing (14)
  • router-tests/security/subgraph_grpc_mtls_test.go
  • router-tests/testenv/testenv.go
  • router/core/graph_server.go
  • router/core/router.go
  • router/core/router_config.go
  • router/core/supervisor_instance.go
  • router/core/tls.go
  • router/core/tls_test.go
  • router/pkg/config/config.go
  • router/pkg/config/config.schema.json
  • router/pkg/config/fixtures/full.yaml
  • router/pkg/config/testdata/config_defaults.json
  • router/pkg/config/testdata/config_full.json
  • router/pkg/grpcconnector/grpcremote/grpc_remote.go

Comment thread router/core/tls.go
@codecov
Copy link
Copy Markdown

codecov Bot commented May 13, 2026

Codecov Report

❌ Patch coverage is 90.72165% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 66.32%. Comparing base (d211459) to head (eddd247).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
router/core/tls.go 83.87% 3 Missing and 2 partials ⚠️
router/core/graph_server.go 94.73% 1 Missing and 1 partial ⚠️
router/pkg/config/config.go 89.47% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2861      +/-   ##
==========================================
+ Coverage   66.24%   66.32%   +0.08%     
==========================================
  Files         258      258              
  Lines       27056    27126      +70     
==========================================
+ Hits        17923    17992      +69     
+ Misses       7720     7719       -1     
- Partials     1413     1415       +2     
Files with missing lines Coverage Δ
router/pkg/grpcconnector/grpcremote/grpc_remote.go 78.12% <100.00%> (+5.04%) ⬆️
router/core/graph_server.go 85.72% <94.73%> (+0.15%) ⬆️
router/pkg/config/config.go 82.29% <89.47%> (+0.36%) ⬆️
router/core/tls.go 88.52% <83.87%> (-6.35%) ⬇️

... and 4 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

dkorittki added 2 commits May 19, 2026 13:33
They are only needed when building a grpc connector
and are obsolete after that. Hence they don't need to be
a type field.
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@router/core/graph_server.go`:
- Around line 357-358: The graph mux reuse logic currently ignores TLS changes
because defaultClientTLS and perSubgraphTLS are only considered on rebuild;
update the reuse decision so muxes/connectors are not reused when those TLS
settings differ by including defaultClientTLS and perSubgraphTLS in the mux
identity/comparison (or cache key) used by the base/feature-flag reuse branches,
and force a rebuild/recreate of the mux/connector whenever those TLS values
change; locate the reuse checks that decide to keep an existing mux (the
base/feature-flag reuse branches) and add equality checks or incorporate the TLS
structs so stale gRPC credentials are not retained.
- Around line 1411-1420: After successfully calling setupConnector
(setupConnector), ensure partially-initialized resources are cleaned up if
subsequent buildGraphMux fails: either keep the connector/local resources
(caches, metric stores, pubsub providers) in local variables and only assign
them to the server state (s.*) after buildGraphMux completes successfully, or
add a short-lived defer immediately after setupConnector that calls
graphServer.Shutdown (or the connector-specific cleanup routine) and cancels
that defer if buildGraphMux succeeds; update the error-return paths after
buildGraphMux to invoke the cleanup so no providers or connectors remain running
on failure.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 526ede46-37b7-48f3-bd51-4acaaabcd3af

📥 Commits

Reviewing files that changed from the base of the PR and between 21e77d2 and 9350004.

📒 Files selected for processing (2)
  • router/core/graph_server.go
  • router/pkg/grpcconnector/grpcremote/grpc_remote.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • router/pkg/grpcconnector/grpcremote/grpc_remote.go

Comment thread router/core/graph_server.go
Comment thread router/core/graph_server.go
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs-website/router/configuration.mdx`:
- Line 463: The table entry for TLS_CLIENT_GRPC_ALL_ENABLED (key:
tls.client_grpc.all.enabled) incorrectly shows a required icon; update the icon
from a required/check state to the optional/square icon so the row reflects that
this setting is optional and has a default of false (change <Icon
icon="check-square" /> to <Icon icon="square" /> for the
TLS_CLIENT_GRPC_ALL_ENABLED row).

In `@docs-website/router/security/tls.mdx`:
- Line 270: The sentence "A per-subgraph entry fully replaces the global `all`
config for that subgraph — it does not merge with it." uses an em dash; update
this line in docs-website/router/security/tls.mdx to avoid em dashes by
splitting into two sentences or using a period, e.g. "A per-subgraph entry fully
replaces the global `all` config for that subgraph. It does not merge with it."
Ensure you keep the exact `all` code token and the phrase "per-subgraph entry"
so the meaning and reference remain unchanged.

In `@router/pkg/config/config.go`:
- Around line 944-952: The Enabled() method on GRPCClientTLSConfiguration
currently only checks the boolean Enabled flags and thus ignores populated TLS
fields set via env vars; update GRPCClientTLSConfiguration.Enabled() to also
return true if any subgraph or the All config has TLS material present
(non-empty CAFile, CertFile, KeyFile or InsecureSkipCAVerification == true) in
addition to checking v.Enabled, and apply the same change to the analogous
Enabled() method referenced around lines 959-968 (check the corresponding
struct's Subgraphs, All and their
CAFile/CertFile/KeyFile/InsecureSkipCAVerification fields) so that populated TLS
fields implicitly enable TLS rather than being silently ignored.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 7e3b000b-8595-4e0a-a3f2-f4eda450dc05

📥 Commits

Reviewing files that changed from the base of the PR and between 52f76b5 and 5ba51b0.

📒 Files selected for processing (16)
  • docs-website/router/configuration.mdx
  • docs-website/router/gRPC/concepts.mdx
  • docs-website/router/gRPC/grpc-services.mdx
  • docs-website/router/intro.mdx
  • docs-website/router/security/tls.mdx
  • router-tests/security/subgraph_grpc_mtls_test.go
  • router-tests/security/subgraph_mtls_test.go
  • router/core/graph_server.go
  • router/core/tls.go
  • router/core/tls_test.go
  • router/pkg/config/config.go
  • router/pkg/config/config.schema.json
  • router/pkg/config/config_grpc_tls_test.go
  • router/pkg/config/fixtures/full.yaml
  • router/pkg/config/testdata/config_defaults.json
  • router/pkg/config/testdata/config_full.json
✅ Files skipped from review due to trivial changes (4)
  • docs-website/router/gRPC/concepts.mdx
  • router/pkg/config/testdata/config_full.json
  • router/pkg/config/fixtures/full.yaml
  • docs-website/router/intro.mdx


| Environment Variable | YAML | Required | Description | Default Value |
| -------------------------------------------------- | -------------------------------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------------- | ------------- |
| TLS_CLIENT_GRPC_ALL_ENABLED | tls.client_grpc.all.enabled | <Icon icon="check-square" /> | Enable TLS for all gRPC subgraph connections. | false |
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix required marker for tls.client_grpc.all.enabled.

This field is shown as required, but the table also states a default of false. Mark it as optional (square) to avoid implying users must set it explicitly.

Suggested doc fix
-| TLS_CLIENT_GRPC_ALL_ENABLED                        | tls.client_grpc.all.enabled                        | <Icon icon="check-square" /> | Enable TLS for all gRPC subgraph connections.                                                       | false         |
+| TLS_CLIENT_GRPC_ALL_ENABLED                        | tls.client_grpc.all.enabled                        | <Icon icon="square" /> | Enable TLS for all gRPC subgraph connections.                                                             | false         |
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
| TLS_CLIENT_GRPC_ALL_ENABLED | tls.client_grpc.all.enabled | <Icon icon="check-square" /> | Enable TLS for all gRPC subgraph connections. | false |
| TLS_CLIENT_GRPC_ALL_ENABLED | tls.client_grpc.all.enabled | <Icon icon="square" /> | Enable TLS for all gRPC subgraph connections. | false |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs-website/router/configuration.mdx` at line 463, The table entry for
TLS_CLIENT_GRPC_ALL_ENABLED (key: tls.client_grpc.all.enabled) incorrectly shows
a required icon; update the icon from a required/check state to the
optional/square icon so the row reflects that this setting is optional and has a
default of false (change <Icon icon="check-square" /> to <Icon icon="square" />
for the TLS_CLIENT_GRPC_ALL_ENABLED row).


#### Per-Subgraph Configuration

Override the global config for specific gRPC subgraphs. A per-subgraph entry fully replaces the global `all` config for that subgraph — it does not merge with it.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Replace em dash in per-subgraph override note.

Use a period or split the sentence. Em dashes are disallowed in docs.

Suggested doc fix
-Override the global config for specific gRPC subgraphs. A per-subgraph entry fully replaces the global `all` config for that subgraph — it does not merge with it.
+Override the global config for specific gRPC subgraphs. A per-subgraph entry fully replaces the global `all` config for that subgraph. It does not merge with it.

As per coding guidelines: "Avoid em dashes. Use periods or restructure the sentence instead."

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Override the global config for specific gRPC subgraphs. A per-subgraph entry fully replaces the global `all` config for that subgraph — it does not merge with it.
Override the global config for specific gRPC subgraphs. A per-subgraph entry fully replaces the global `all` config for that subgraph. It does not merge with it.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs-website/router/security/tls.mdx` at line 270, The sentence "A
per-subgraph entry fully replaces the global `all` config for that subgraph — it
does not merge with it." uses an em dash; update this line in
docs-website/router/security/tls.mdx to avoid em dashes by splitting into two
sentences or using a period, e.g. "A per-subgraph entry fully replaces the
global `all` config for that subgraph. It does not merge with it." Ensure you
keep the exact `all` code token and the phrase "per-subgraph entry" so the
meaning and reference remain unchanged.

Comment on lines +944 to +952
// Enabled returns true if any subgraph or the default settings have TLS enabled.
func (c *GRPCClientTLSConfiguration) Enabled() bool {
for _, v := range c.Subgraphs {
if v.Enabled {
return true
}
}

return c.All.Enabled
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Do not ignore populated gRPC TLS settings when enabled is omitted.

Line 945 only checks the boolean flags. If an operator sets TLS_CLIENT_GRPC_ALL_CA_FILE, CERT_FILE, KEY_FILE, or INSECURE_SKIP_CA_VERIFICATION via env and forgets TLS_CLIENT_GRPC_ALL_ENABLED, this config stays silent and TLS is treated as disabled. LoadConfig validates YAML, not env-populated state, so this turns into a plaintext fallback instead of a validation error. Either derive enablement from populated TLS fields here, or add post-load validation that rejects TLS material when enabled is false.

Also applies to: 959-968

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@router/pkg/config/config.go` around lines 944 - 952, The Enabled() method on
GRPCClientTLSConfiguration currently only checks the boolean Enabled flags and
thus ignores populated TLS fields set via env vars; update
GRPCClientTLSConfiguration.Enabled() to also return true if any subgraph or the
All config has TLS material present (non-empty CAFile, CertFile, KeyFile or
InsecureSkipCAVerification == true) in addition to checking v.Enabled, and apply
the same change to the analogous Enabled() method referenced around lines
959-968 (check the corresponding struct's Subgraphs, All and their
CAFile/CertFile/KeyFile/InsecureSkipCAVerification fields) so that populated TLS
fields implicitly enable TLS rather than being silently ignored.

@dkorittki dkorittki changed the title feat(router): add mtls support to grpc subgraphs feat(router): add TLS/mTLS support to grpc subgraphs May 22, 2026
@dkorittki dkorittki changed the title feat(router): add TLS/mTLS support to grpc subgraphs feat(router): add TLS/mTLS support to gRPC subgraphs May 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant