Hello,
I have identified a HTTP/2 non-conformity issue when I enable HTTP/2 features of an OpenLiteSpeed installation. The usage of the "h2c" protocol identifier when using a TLS connection is described in RFC 7540 Section 3.3. When using ALPN the server MUST NOT select h2c, the rules for NPN are not as explicit but it seems erroneous to offer a cleartext protocol when negotiating a TLS connection. I have tested other HTTP/2 server implementations and do not observe them exhibiting similar behavior.
This behavior has been observed at scale on live deployments across the web. HTTP/2 Dashboard monitors the adoption and performance of HTTP/2 on the web. Observe the H2C series on the Auxiliary Protocols chart. A significant proportion of the anomalous H2C protocol support is related to domains that report "LiteSpeed" in their Server response header.
My local testing has taken place on on OpenLiteSpeed v.1.4.14, with very basic configuration, running on CentOS 7.
Steps to reproduce
1) Enable HTTP/2 and TLS on the server.
2) Test NPN advertisement, openssl s_client -nextprotoneg '' -connect <HOST>:<PORT>
a) Observe "h2c" protocol identifier in the "Protocols advertised by server:" result
3) Test ALPN, openssl s_client -alpn 'h2c' -connect <HOST>:<PORT>
a) Observe "h2c" in the "ALPN protocol:" result
Correct behaviour
Do not advertise or select "h2c" protocol when using TLS based connections.
Lucas
I have identified a HTTP/2 non-conformity issue when I enable HTTP/2 features of an OpenLiteSpeed installation. The usage of the "h2c" protocol identifier when using a TLS connection is described in RFC 7540 Section 3.3. When using ALPN the server MUST NOT select h2c, the rules for NPN are not as explicit but it seems erroneous to offer a cleartext protocol when negotiating a TLS connection. I have tested other HTTP/2 server implementations and do not observe them exhibiting similar behavior.
This behavior has been observed at scale on live deployments across the web. HTTP/2 Dashboard monitors the adoption and performance of HTTP/2 on the web. Observe the H2C series on the Auxiliary Protocols chart. A significant proportion of the anomalous H2C protocol support is related to domains that report "LiteSpeed" in their Server response header.
My local testing has taken place on on OpenLiteSpeed v.1.4.14, with very basic configuration, running on CentOS 7.
Steps to reproduce
1) Enable HTTP/2 and TLS on the server.
2) Test NPN advertisement, openssl s_client -nextprotoneg '' -connect <HOST>:<PORT>
a) Observe "h2c" protocol identifier in the "Protocols advertised by server:" result
3) Test ALPN, openssl s_client -alpn 'h2c' -connect <HOST>:<PORT>
a) Observe "h2c" in the "ALPN protocol:" result
Correct behaviour
Do not advertise or select "h2c" protocol when using TLS based connections.
Lucas