Repository navigation
Conversation
Meekohi
requested review from
Lang-Akshay,
brian-hussey,
crivetimihai,
ja8zyjits and
msureshkumar88
as code owners
September 10, 2026 16:13
Author
|
Hi @a-effort — a quick process note, since this is my first PR to the repo:
I'll turn review feedback around quickly. Thanks! Also refreshed the Verification table in the description: |
2 of 6 tasks
Collaborator
|
Thanks for contributing! 🙌 |
Meekohi
force-pushed
the
fix/mtls-client-cert-without-custom-ca
branch
from
October 4, 2026 15:03
1c01026 to
248ebc0
Compare
Build outbound SSL contexts whenever custom trust or client credentials exist. Apply the rule to health checks, connection helpers, handshakes, and tool calls. Decrypt stored handshake keys and preserve candidate-only credential isolation. Cover real TLS registration, handshakes, and MCP tool calls without gateway CA configuration. Reject untrusted servers, missing client identities, and incomplete credential pairs. Closes IBM#6771 Signed-off-by: Michael Holroyd <meekohi@gmail.com> Signed-off-by: Michael Holroyd <michael.holroyd@ga-ccri.com> {"fundingSource": "RD1191", "team": "CTO", "fshGit": "d3463a9a", "fshDocker": "sha256:62e82fe2"}
Meekohi
force-pushed
the
fix/mtls-client-cert-without-custom-ca
branch
from
October 22, 2026 22:02
248ebc0 to
5402f05
Compare
Author
|
Updated this PR to sync with the latest main branch. |
Signed-off-by: Michael Holroyd <michael.holroyd@ga-ccri.com>
{"fundingSource": "RD1191", "team": "CTO", "fshGit": "d3463a9a", "fshDocker": "sha256:62e82fe2"}
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
MCP gateways omit configured mTLS client credentials when their server certificate uses system CA trust. Present client credentials without requiring a custom CA.
Reproduction Steps
Register an HTTPS MCP gateway that requires a client certificate. Configure
client_certandclient_key, and leaveca_certificateunset. Registration, health checks, or tool calls fail because the upstream receives no client identity.Closes #6771.
Root Cause
Five outbound paths create an SSL context only when a custom CA exists. They therefore ignore configured client credentials with system trust.
Fix Description
Use
build_client_ssl_context()for health checks, SSE and Streamable HTTP connections, handshakes, and tool calls. Decrypt stored handshake keys, reject incomplete credential pairs, and preserve candidate-only credential isolation.Verification
Updated against
main@85dabf0be.make ruff interrogate pylintpasses.make test: 24,544 passed, 974 skipped, and two expected failures.make docker-prod-rustbuilds the production image successfully.make test-e2e: 129 passed and 14 feature-specific cases skipped against a fresh three-replica gateway stack.make detect-secrets-scanpasses.Coverage waiver: one validator-cache test-order failure occurs during coverage on this branch.
Both observed failure variants reproduce on
mainwhen schema-validator mock tests precede structured-content tests.The affected tests pass independently, and the ordinary full suite passes.
This existing test-isolation failure remains outside this PR.
Container gate waiver: fresh isolated Compose stacks replace host-wide
docker-nukeand shared-porttesting-up.The stacks use the rebuilt production images, fresh PostgreSQL volumes, Redis, nginx, and the MCP test upstream.
This preserves existing local services while exercising production gateway behavior.
GitHub Actions requires maintainer approval for the latest fork update. Reviewer approval also remains required.