|
| 1 | +# GEP-4152: Allow flexible TLS Validation in BackendTLSPolicy |
| 2 | + |
| 3 | +* Issue: [#4152](https://github.com/kubernetes-sigs/gateway-api/issues/4152) |
| 4 | +* Status: Provisional |
| 5 | + |
| 6 | +## TLDR |
| 7 | + |
| 8 | +The ability for the `BackendTLSPolicy` to skip TLS verification or to validate certifcates based on their fingerprint or public key hash. |
| 9 | + |
| 10 | +## Motivation |
| 11 | + |
| 12 | +The current `BackendTLSPolicy` follows a secure-by-default approach that requires users to provide a trusted CA certificate bundle or rely on the system’s default certificate store (which typically includes root CAs) to validate backend server certificates. However, real-world deployments include cases where strict certificate validation may not be possible or practical, e.g., Development and testing environments that use self-signed certificates generated dynamically at runtime. |
| 13 | + |
| 14 | +In such scenarios, users may need the flexibility to disable certificate verification, or to use certificate pinning. Certificate pinning offers a safer and more controlled alternative, instead of bypassing TLS validation, the gateway verifies that the backend’s certificate matches a known fingerprint or public key hash. This preserves the confidentiality and integrity guarantees of TLS while removing the operational overhead of managing full certificate chains or trusted CA bundles. |
| 15 | + |
| 16 | +### User Stories |
| 17 | + |
| 18 | +* As an application developer, I want the option to disable backend TLS certificate verification on a per-backend basis, so I can connect to services using dynamically generated or self-signed certificates during development or testing. |
| 19 | +* As an application developer, I want secure-by-default behavior, ensuring that certificate verification is always enabled unless I explicitly opt out, to prevent accidentally deploying insecure configurations to production. |
| 20 | +* As an application developer, I want an alternative to disabling verification, such as certificate or SPKI pinning, so I can securely communicate with backends using self-signed certifcates without managing CA bundles. |
| 21 | +* As a gateway operator, I want to control whether skipping TLS verification is permitted for specific Gateways. |
| 22 | +* As a security officer, I want transperency and auditability into where TLS verification has been disabled. |
| 23 | + |
| 24 | +## Goals |
| 25 | + |
| 26 | +* Enable connecting to backends over TLS without requiring certificate validation. |
| 27 | +* Support certificate and SPKI pinning as alternatives to disabling verification or relying on CA trust chains. |
| 28 | +* Maintain secure-by-default approach, with certificate verification enabled unless explicitly opted out. |
| 29 | +* Provide operator-level controls so Gateway constraints can restrict or permit the use of skip-verify. |
| 30 | + |
| 31 | +## API |
| 32 | + |
| 33 | +**TODO**: First PR will not include any implementation details, in favor of |
| 34 | +building consensus on the motivation, goals and non-goals first. _"How?"_ we |
| 35 | +implement shall be left open-ended until _"What?"_ and _"Why?"_ are solid. |
| 36 | + |
| 37 | +## References |
| 38 | + |
| 39 | +* [GEP-1897: BackendTLSPolicy - Explicit Backend TLS Connection Configuration](https://gateway-api.sigs.k8s.io/geps/gep-1897/) |
0 commit comments