Benjamin Kaduk has entered the following ballot position for draft-ietf-dnsop-svcb-https-08: Discuss
When responding, please keep the subject line intact and reply to all email addresses included in the To and CC lines. (Feel free to cut this introductory paragraph, however.) Please refer to https://www.ietf.org/about/groups/iesg/statements/handling-ballot-positions/ for more information about how to handle DISCUSS and COMMENT positions. The document, along with other ballot positions, can be found here: https://datatracker.ietf.org/doc/draft-ietf-dnsop-svcb-https/ ---------------------------------------------------------------------- DISCUSS: ---------------------------------------------------------------------- I'd like to have a (hopefully brief!) discussion about our description of the "strict transport security" functionality the HTTPS RRtype provides, with respect to its accuracty/completeness and how explicit vs implicit we should be about the corresponding divergence from "pure" HTTP behavior. It's pretty clear that at a pure HTTP protocol level (which as far as I can tell is the scope of applicability that we claim) that resources accessed with "http" scheme and resources accessed with "https" scheme have no intrinsic relationship -- §4.2.2 of draft-ietf-httpbis-semantics-19 says: Resources made available via the "https" scheme have no shared identity with the "http" scheme. They are distinct origins with separate namespaces. [...] But the procedures in this document (e.g., §9.5, §9) seem pretty clear that, when an HTTPS record is published, accesses for "http" scheme resources should be converted to "https" scheme accesses, with implication that the client should expect to get the same resource back from the modified query compared to the unmodified "http"-scheme one. While there is a caution in §9.5 that: If this redirection would result in a loss of functionality (e.g. important resources that are only available on the "http" origin), the operator MUST NOT publish an HTTPS RR. but in my reading it leaves some important details as only implicit! We need to care not only about resources only available on one vs the other origin, but also about whether the translation would change the semantics of the client's request/response exchange. That is, whether the resources accessible by the different schemes are actually analogous (which, per the above, is not required by HTTP and is subject to the site administrator's control or in some cases other application protocols on top of HTTP used by that origin). This (mostly implicit) requirement is a potential barrier for adoption of the HTTPS RRtype, and while the precondition is very often going to be satisfied, I wanted to get a sense for whether we should make the requirement more explicit, and possibly more prominent in the document (e.g., mention it in the Introduction). I don't know what the right answer is, but it seems important enough to ensure that the topic receives deliberate consideration. ---------------------------------------------------------------------- COMMENT: ---------------------------------------------------------------------- First off, thanks for this well-written document! It was pretty clear and easy to read despite covering some fairly complex logic. I made a github pull request with some hopefully boring editorial suggestions: https://github.com/MikeBishop/dns-alt-svc/pull/365 I did have a few high-ish-level thoughts that I either wasn't sure where to put in the section-by-section comments or wanted to make a bit more prominent. The first is a bit hard for me to describe, but basically, when we construct a QNAME for an SVCB or HTTPS query, we include information reflecting URI scheme and port, but when we get a TargetName back, that's been flattened to a single name, in some sense "using up more" of the DNS hostname namespace under the control of the alternative endpoint then in the authority's namespace. That is, if I wanted to provide service for both "foo" and "bar" schemes on two ports each, in order to serve all four combinations for a single service name, I would need to allocate four hostnames for alternative endpoints. We do mention this property as it relates to URI schemes, in §11.1 where we say that "zone owners SHOULD choose alias target names that indicate the scheme in use", but I didn't see much discussion of the port-related aspects. I know that the ServiceMode response can include a port to use in the parameters, so it's not really a concern about losing flexibility of what ports to use. It just seems "unbalanced" in some sense that I can't really put my finger on. On the other hand, it's not like hostnames are a particularly limited resource, so I don't really see any practical consequences of this setup; I'm just curious if this is a topic that the WG gave much consideration to. I was also struck by the procedure near the end of §3 where we append to the very end of the priority list an endpoint specified by the final value of $QNAME combined with the port number from the (original) authority endpoint. This seems a strange combination, since the authority port number is chosen by the origin but the final QNAME will potentially be a service operator rather far removed from the origin. Making provision for what essentially requires a tight coupling between these entities (when non-default ports are used, at least) feels somewhat at odds with the stated goal of allowing delegation of operational authority that I take to imply a more "hands-off" or independently operated approach. While I understand the utility in picking a single port to use for this last-ditch entry on the priority list, it doesn't seem like the port from the original authority is the only choice. One might imagine using the default port for the scheme, or the last 'port' SvcParam encountered in alias chasing, or probably other things as well. I suspect there are some subtleties here, but I don't think I can think about it in much depth at the moment, so I hope that the WG has already undertaken such consideration. I found it a bit surprising (though well described and in that sense well justified) that we limit ourselves to using ALPN values for which the ALPN value uniquely identifies the suite of protocols to use, most notably relating to whether TLS or DTLS is used. That is not something I typically associate as being a property that ALPN provides, though as I look through the registry, almost all of the existing entries (that I know much about) do seem to provide that property. Do we know of any ALPN values that are unusable as a result of this restriction? I'm somewhat curious what the TLS DEs would say if faced with registration requests designed to "split" an existing ALPN registration so that it would be usable with SVCB. The registration procedure for the new Service Parameters registry (Section 15.3.1) starts off saying that it's FCFS, but accompanies that with a MUST-level requirement for "MUST specify how to convert the SvcParamValue's presentation format to wire format" (plus some MAYs as well). I'm somewhat surprised that IANA is willing to accept responsibility for assessing whether the "MUST specify..." has been met. Perhaps a policy of Expert Review with directions to the experts that allocations are "shall issue" provided the MUST is satisfied would be more appropriate? Section 1.2 In ServiceMode, the SvcParams of the SVCB RR provide an extensible data model for describing alternative endpoints that are authoritative for the origin, along with parameters associated with each of these alternative endpoints. (editorial) Since the term "origin" has a specific meaning in the HTTP context, and this document covers both the generic SVCB and the HTTP-specific HTTPS records, but this section is supposed to be the "generic" one, I wonder if we can come up with a different term than "origin" to use here. Would "service" or a derived term be consistent with our definitions? Section 2.1 The presentation format of the record is: Name TTL IN SVCB SvcPriority TargetName SvcParams The SVCB record is defined specifically within the Internet ("IN") Class ([RFC1035]). Should we say something about how "Name" and "TTL" have the same meaning as in RFC 1035? alpha-lc = %x61-7A ; a-z SvcParamKey = 1*63(alpha-lc / DIGIT / "-") SvcParam = SvcParamKey ["=" SvcParamValue] SvcParamValue = char-string value = *OCTET I'd suggest putting some comments in the ABNF that <char-string> is defined in Appendix A and that <value> and <char-string> are related as described in the prose. Arbitrary keys can be represented using the unknown-key presentation format "keyNNNNN" where NNNNN is the numeric value of the key type without leading zeros. A SvcParam in this form SHALL be parsed as specified above, and the decoded value SHALL be used as its wire format encoding. Being SEC AD makes me think about edge cases a lot; do we want to say anything about whether a parser is required to be able to handle "keyNNNNN" for key types defined in this document? (Not that parsing DNS presentation format is the best thing to do in the first place, but it surely happens...) Section 2.4.2 The primary purpose of AliasMode is to allow aliasing at the zone apex, where CNAME is not allowed. In AliasMode, the TargetName will be the name of a domain that resolves to SVCB, AAAA, and/or A records. (See Section 6 for aliasing of SVCB-compatible RR types.) The TargetName SHOULD NOT be equal to the owner name, as this would result in a loop. Why is this not a "MUST NOT"? Does it ever make sense to cause such a loop? Using AliasMode maintains a separation of concerns: the owner of foosvc.example.net can add or remove ServiceMode SVCB records without requiring a corresponding change to example.com. Note that if foosvc.example.net promises to always publish a SVCB record, this AliasMode record can be replaced by a CNAME, which would likely improve performance. So this would be "_8080._foo.example.com CNAME foosvc.example.net" rather than "example.com CNAME foosvc.example.net"? I wonder if clarifying that it's not "example.com CNAME foosvc.example.net" is worthwhile. Section 3.1 For a section titled "Handling resolution failures", perhaps we should also give guidance on how resolution failures should be handled when DNS responses are not cryptographically protected? (I assume "proceed to the fallback", but for completeness' sake...) Section 4.3 For complex value types whose interpretation might differ between implementations or have additional future allowed values added (e.g. URIs or "alpn"), resolvers SHOULD limit validation to specified constraints. I'm not entirely sure what "specified constraints" is intended to mean, here. Would it be those constrains specified as always suitable for validation in the document that defines the SvcParam in question, or something else? Section 5.2 As a performance optimization, if some of the SVCB records in the response can be used without requiring additional DNS queries, the client MAY prefer those records, regardless of their priorities. This might be a performance optimization for the initial connection setup while being a performance de-optimization for the actual application traffic that goes over the connection (i.e., the authoritative's priority values might be assumed to provide actual value to the user). Did the WG discuss whether or not to go into such subtleties here? Section 7.1.2 Clients SHOULD NOT attempt connection to a service endpoint whose SVCB ALPN set does not contain any supported protocols. To ensure consistency of behavior, clients MAY reject the entire SVCB RRSet and fall back to basic connection establishment if all of the RRs indicate "no-default-alpn", even if connection could have succeeded using a non-default alpn. (editorial) Just to confirm: these two directives are only related in that they cover client ALPN handling, and there is no expectation that the "MAY reject" is preconditioned on "SVCB ALPN set does not contain any supported protocols"? I might consider splitting into two paragraphs, even though my general preference is to avoid single-sentence paragraphs. Section 7.2 The "port" SvcParamKey defines the TCP or UDP port that should be used to reach this alternative endpoint. [...] Is this intentionally excluding SCTP/DCCP/etc? Section 9.3 Origins that publish an "ech" SvcParam in their HTTPS record SHOULD also publish an "ech" SvcParam for any alt-authorities. [...] Just to confirm I'm understanding this properly: this is saying that if an origin publishes an HTTPS RR with an "ech" SvcParam (any single RR in the RRset suffices to trigger the condition), then the origin should also publish HTTPS records for any alt-authorities that it would send in an Alt-Svc header field, and those other HTTPS records should all include an "ech" SvcParam as well? I'm a little confused at why the RFC 7838 "alt-authorities" keyword is used here without any specific reference to Alt-Svc itself. (There are only three instances of the string "alt-authorit" in this document, two of which are in this paragraph; the third is clearly marked as applying to the Alt-Svc usage.) Section 9.4 Clients MUST NOT use an HTTPS RR response unless the client supports TLS Server Name Indication (SNI) and indicates the origin name when negotiating TLS. This supports the conservation of IP addresses. I could sort-of see a misreading of this that says you have to put the real origin in the SNI extension and not use ECH with a separate fronting origin. Maybe we want to say something about "uses SNI (possibly in conjunction with ECH) to indicate the origin name"? Section 11.2 queries for TargetName in advance (see Section 5). Unless otherwise specified, the convention is to set TargetName to the service name for an initial ServiceMode record, or to "." if it is reached via an alias. For foo://foo.example.com:8080, this might look like: I think it would be helpful to show an example of the "set TargetName to the service name for an initial ServiceMode record" in addition to the alias example that is shown. Section 11.3.3 Suppose that svc.example's default server pool supports HTTP/2, and it has deployed HTTP/3 on a new server pool with a different configuration. This can be expressed in the following form: $ORIGIN svc.example. ; A hosting provider. pool 7200 IN HTTPS 1 h3pool alpn=h2,h3 ech="123..." The prose suggests that perhaps the new pool is h3-only and doesn't support HTTP/2, but the actual example lists both alpn values. I guess it also omits no-default-alpn, so the new pool actually supports all three http versions... Section 11.3.4 * The A, AAAA, and HTTPS resolutions are independent lookups, so clients may observe and follow different CNAMEs to different CDNs. Clients may thus find a TargetName pointing to a name other than the one which returned along with the A and AAAA lookups and will need to do an additional resolution for them. [...] (editorial) I think something went awry near "the one which returned along with", as it's not even clear whether there are separate queries vs additional-section responses in the intended scenario. Section 13 Do we want to mention the discussion in §3.2 about using caution in resolving SVCB when using a proxy? I note that draft-ietf-tls-esni has a note (its §10.2) explaining that DNSSEC or other protection is not really needed for ECH config, since an attacker that controls DNS can already defeat ECH protections. Do we want to include similar discussion or otherwise mention this topic (e.g., by reference)? Section 15.3.2 | 65535 | N/A | Reserved | (This document) | | | | ("Invalid | | | | | key") | | Do we care that 'I' is not a lowercase letter? Section 15.4 I always worry somewhat when we propose a new mechanism with no worked examples for it (in this case, protocols using SVCB per the "MUST have an entry for its scheme" requirement in §12). Perhaps the HTTPS example is close enough that my worries are groundless. Section 17.1 Why is [DNAME] classified as normative? I only see one reference to it, in a list of examples of possible ways that resolvers might follow aliases, which does not seem like a "protocol feature" of this document. I could also perhaps see an argument that references to [HSTS] are just by way of analogy or indicating that we provide equivalent behavior, which would not seem to require the reader to understand [HSTS] in order to implement this specification. RFC 6147 is referenced only as part of a "MUST NOT perform DNS64" construction, which seems to indicate that it is *not* a normative reference. Appendix D.2 [I did not carefully review the examples for internal consistency, trusting that this document has received ample review already.] _______________________________________________ DNSOP mailing list DNSOP@ietf.org https://www.ietf.org/mailman/listinfo/dnsop