Re: The scheme https s not consistent with the TLS enabled setting (Re: [ANN] Apache Tomcat 11.0.22 Available)
Mark Thomas <[email protected]> Fri, 3 Jul 2026 07:38:07 +0100
| Newsgroups | gmane.comp.jakarta.tomcat.user |
|---|---|
| Message-ID | <[email protected]> |
On 03/07/2026 03:20, Christopher Schultz wrote: > Thomas, > > On 5/29/26 6:16 AM, Thomas Meyer wrote: >> >> Zitat von Christopher Schultz <[email protected]>: >> >>> Mark, >>> >>> On 5/26/26 1:34 PM, Mark Thomas wrote: >>>> On 12/05/2026 14:40, Mark Thomas wrote: >>>>> On 12/05/2026 14:15, Rémy Maucherat wrote: >>>>>> On Tue, May 12, 2026 at 1:46 PM Mark Thomas <[email protected]> wrote: >>>>>>> >>>>>>> On 12/05/2026 09:36, Thomas Meyer wrote: >>>>>>>> >>>>>>>> Zitat von Mark Thomas <[email protected]>: >>>>>>>> >>>>>>>> Hi, >>>>>>>> >>>>>>>>> - Various HTTP/2 validation improvements and a broader change >>>>>>>>> to use >>>>>>>>> stream resets rather than connection closures where >>>>>>>>> appropriate. >>>>>>>> >>>>>>>> After upgrading our applications to tomcat 11.0.22 we see only >>>>>>>> connection errors 503 for our setup. >>>>>>>> >>>>>>>> We do run Tomcat behind istio/envoy proxy and tomcat uses h2c mode. >>>>>>>> Istio Service mash handles TLS and Tomcat speaks clear text http2. >>>>>>>> >>>>>>>> We see those error messages in our logs: "Connection [{0}], Stream >>>>>>>> [{1}], The scheme [{2}] is not consistent with the TLS enabled >>>>>>>> setting >>>>>>>> of [{3}]" >>>>>>>> >>>>>>>> which seems to come from this change: >>>>>>>> https://github.com/apache/tomcat/commit/96817a0 >>>>>>>> >>>>>>>> Bug or feature? >>>>>>> >>>>>>> Hmm. The change was intentional. The motivation was a security >>>>>>> review >>>>>>> that highlighted that clients could connect over h2c to a >>>>>>> resource that >>>>>>> required TLS. We rejected that as a vulnerability since the >>>>>>> attacker can >>>>>>> only harm their own privacy but we did opt to fix the behaviour to >>>>>>> protect users from client side error / misconfiguration. >>>>>>> >>>>>>> I think the change is consistent with RFC 9113 but there is a >>>>>>> reference >>>>>>> to RFC 9112 3.3 which in turn references a "trusted gateway" >>>>>>> which is >>>>>>> the case you describe. However, Tomcat currently has no way to >>>>>>> determine >>>>>>> (without additional configuration) if an HTTP/2 request is from a >>>>>>> trusted gateway or not. >>>>>>> >>>>>>> Tomcat normally uses the RemoteIpValve in situations where the >>>>>>> application needs to see the protocol used by the client >>>>>>> irrespective of >>>>>>> the protocol used between the proxy and Tomcat. >>>>>>> >>>>>>> How practical is it to configure your proxy to use http >>>>>>> for :scheme and >>>>>>> have it set the X-Forwarded-Proto header? You'd also need to >>>>>>> configure >>>>>>> the RemoteIpValve Tomcat on Tomcat? >>>>>>> >>>>>>> Another solution would be to use h2 rather than h2c between the >>>>>>> proxy >>>>>>> and Tomcat. >>>>>>> >>>>>>> On balance I'm leaning towards the new behaviour of requiring some >>>>>>> explicit configuration if proxying secure traffic over h2c. I'll >>>>>>> note >>>>>>> that if you proxy over http you'll need similar configuration >>>>>>> although >>>>>>> AJP (which only supports clear text) will allow this without further >>>>>>> configuration. >>>>>>> >>>>>>> All that said, I am open to being convinced to either revert the new >>>>>>> behaviour or make it optional. >>>>>> >>>>>> We (kind of) allow this in a way: the connector has a secure flag >>>>>> where it can be configured to say it is supposed to be secure. >>>>>> That is >>>>>> why you have to configure both sslenabled and secure on the connector >>>>>> when actually enabling a secure setup. >>>>> >>>>> True. Although those only apply to HTTP and can only be used to >>>>> force http to be treated as https. >>>>> >>>>> RemoteIpValve is arguably a better, more generic solution. >>>>> >>>>> You got me thinking about maybe removing those settings from the >>>>> Connector. >>>> >>>> It has been a couple of weeks without any further comment. With the >>>> June release window approaching now would be the time to make a case >>>> adjusting this behaviour. Options include: >>>> >>>> - do nothing (keep the new behaviour) >>>> - revert the change >>>> - make the change optional (with a configuration option - TBD) >>>> - remove the secure and scheme settings entirely (and use >>>> RemoteIpValve) >>>> - something else >>>> >>>> I don't think I have strong views on any particular option. Do >>>> nothing is my default option but only because I can;t see a strong >>>> argument for on option over any of the others. >>> >>> +1 for "no additional changes". >>> >>> I think RemoteIPValve is the correct maneuver, here. >> >> Hi, >> >> we tried to use RemoteIPValve but it looks like this Valve is running >> way after the check done in https://github.com/apache/tomcat/blob/ >> main/ java/org/apache/coyote/http2/Stream.java >> any suggestions how to proceed? > > Sorry, just getting back to this. > > Bumping to get this back in front of Mark and Rémy who understand the > http/2 pipeline way better than I do. https://bz.apache.org/bugzilla/show_bug.cgi?id=70091 It was addressed in the June releases. Mark