On Wed, 16 Dec 2020 at 10:16, Cory Benfield <c...@lukasa.co.uk> wrote:
>
> On Fri, 11 Dec 2020 at 03:44, Victor Vasiliev <vasi...@google.com> wrote:
> >
> > Hi Cory,
> >
> > I am not sure there is a big difference between ALPN and ALPS in that 
> > regard.  ALPS is (or at least can be implemented as) "essentially a static 
> > byte sequence vended by the application layer protocol".  Furthermore, 
> > applications already have to vary their payloads dramatically depending on 
> > signals from the TLS stack whenever they implement ALPN (by choosing, e.g., 
> > HTTP/1.1 vs HTTP/2).  From that standpoint, it seems natural for ALPS 
> > handling to happen at the same or similar I/O points as ALPN handling.
>
> The distinction here is that a HTTP/2 stack needs to know what the
> peer sent for ALPS, which it never did for ALPN. That is, it was
> possible to compose TLS and HTTP/2 entirely independently: the TLS
> implementation accepted the static byte string from HTTP/2, and if the
> ALPN it negotiated matched that string it had successfully negotiated
> HTTP/2. I agree that applications needed to know what the ALPN
> negotiation was, but HTTP/2 did not. You can observe this in OSS
> stacks in the wild, where the HTTP/2 stack never sees the result of
> the ALPN negotiation.
>
> ALPS affects the HTTP/2 wire protocol: it is mandatory that the HTTP/2
> stack behind the TLS implementation be actively told what the peer
> presented in ALPS. This was not required with ALPN (H2 could assume it
> was being driven based on successful ALPN negotiation of its H2 ALPN
> token). While this is not novel for QUIC (see also Transport
> Parameters), it is absolutely novel for H2.
>
> > I am confused by the "fairly unpleasant" part; given that the existing 
> > implementations already can change settings in-band, this sounds like it's 
> > just a matter of making the existing logic conditional.
>
> The two aren't the same, and the ALPS draft has so far skated around
> this problem by not specifying how ALPS would actually work with
> HTTP/2. In particular, ALPS must interact with the ยง 3.5 connection
> preface in some way. The draft doesn't say how this would work, but
> the logical design is that if ALPS is successfully used the connection
> preface will be different (it won't bother to include SETTINGS
> frames). This cannot help but require tighter coupling between H2 and
> TLS, as the H2 stack must now be fed the ALPS data sent by the peer
> before it can parse any bytes from that peer. This is simply not a
> limitation we have today.

David Benjamin kindly followed-up with me off-list to note that I
missed an ALPS draft that does express how ALPS maps into HTTP/2.
Happily, my guess about how ALPS would map into HTTP/2 matches the
document exactly, so the remainder of my criticism still applies.

While I'm here though, I'd like to add an additional point regarding
draft-vvv-httpbis-alps-00, which is that section 4 should be revised.
Specifically, section 4 mandates that any HTTP/2 endpoint that
supports ALPS MUST support SETTINGS_HPACK_ENABLE_STATIC_TABLES. The
word "support" is unclear here: do I merely have to know what the
setting is, or do I have to actually support the functionality? I can
only presume the latter, given that ALPS does not support any concept
of negotiation.

I ask because I think coupling these two features together is
unreasonable, and places an unnecessary burden on implementers. There
is also no reason to couple them together. This setting should be a
separate draft, and should require an appropriate "I support you
setting this to 0, but will not be setting it to 0 myself." setting
value. This allows peers that actually support this functionality to
indicate support for it, without requiring that it be implemented by
anyone adopting ALPS.

> It is also different from making the existing logic conditional, as
> presumably we wouldn't bother with SETTINGS ACKs for ALPS settings.
> This is because a) the whole point of ALPS is that those settings are
> well-ordered w.r.t. the rest of the protocol, obviating the need for
> the ACK at all, and b) it would violate existing stack's assumptions
> that SETTINGS ACKs can only be received in response to SETTINGS
> frames. This requires a different path for the ALPS settings.
>
> I want to stress: I don't think ALPS is a bad idea, I think it's a
> good one! It clearly brings benefits for protocols that can require
> its presence. If we want to mint a new ALPN token for HTTP/2 that also
> mandates ALPS support I'm open to that, but frankly without it I don't
> see that ALPS helps us much for HTTP/2.
>
> >
> > On Tue, Dec 8, 2020 at 3:48 AM Cory Benfield <c...@lukasa.co.uk> wrote:
> >>
> >> On Thu, 3 Dec 2020 at 21:56, David Benjamin <david...@chromium.org> wrote:
> >> >
> >> > Hi TLS and HTTP friends,
> >> >
> >> > At the last HTTPWG interim, there was a question of why one would want 
> >> > something like ALPS (draft-vvv-tls-alps) for HTTP SETTINGS 
> >> > (draft-vvv-httpbis-alps) over TLS 1.3 half-RTT data. I know we've also 
> >> > had some discussion on this topic in the TLSWG as well. At the HTTP 
> >> > meeting, folks suggested writing up what a half-RTT-based mechanism 
> >> > might look like, so I put together an I-D below. I hope it helps clarify 
> >> > some of our thinking.
> >> >
> >> > (The I-D is not meant for adoption or publication or anything. I figured 
> >> > an I-D was probably the most familiar format for folks.)
> >> >
> >> > David
> >>
> >> Thanks for producing this document David: I think I was one of the
> >> folks who pushed for clarification in this area.
> >>
> >> I think the document does a good job laying out the difficulties with
> >> half-RTT data, but it didn't convince me that ALPS is easier for H2.
> >>
> >> My biggest concerns are around the need to tightly couple the TLS and
> >> application layer stacks. ALPN has been reasonably straightforward to
> >> handle, being essentially a static byte sequence vended by the
> >> application layer protocol. QUIC transport parameters are already
> >> harder, but for things like H2 the state machines have to be
> >> complicated by the addition of an essentially parallel I/O path. This
> >> is because, unlike QUIC, H2 does not (and cannot) spec the requirement
> >> for supporting the ALPS extension so the state machines need to
> >> tolerate the possibility that they will supply the SETTINGS as
> >> ALPS-data but then need to redeliver it in-band, which is fairly
> >> unpleasant (doubly so for servers that may want to use multiple TLS
> >> stacks, which now have to mitigate timing issues).
> >>
> >> I think if ALPS were restricted to protocols that could mandate its
> >> support then ALPS seems great. For H2 this seems unlikely to be
> >> deployed in the long-tail which limits its usefulness, and tbh I think
> >> brings more complexity than it's worth.
> >>
> >> _______________________________________________
> >> TLS mailing list
> >> TLS@ietf.org
> >> https://www.ietf.org/mailman/listinfo/tls

_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls

Reply via email to