Re: The scheme https s not consistent with the TLS enabled setting (Re: [ANN] Apache Tomcat 11.0.22 Available)

Christopher Schultz <[email protected]> Thu, 2 Jul 2026 22:20:16 -0400
Newsgroups gmane.comp.jakarta.tomcat.user
Message-ID <[email protected]>
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.

-chris