I have finally found the time to work on my own implementation of MTA-STS.
As is often the case when actually implementing the specification, it
has turned up a number of issues of varying levels of severity, which
I'm listing in no particular order.
(1) Both RFC 7405 and RFC 5234 should be mentioned in the terminology section.
(2) The ABNF production field-delim appears in the definition of MTA-STS TXT
records and policies, with different values. I suggesting renaming the
former to sts-field-delim and the latter to sts-policy-field-delim,
to match the naming conventions for other productions.
(3) Section 3.1 contains this example:
"_mta-sts.example.com. IN TXT "v=STSv1; id=20160831085700Z;""
Do we really need/want the outer quotes here? (Note that this is not
inlined in the text, where the quotes would be required.)
(4) Section 3.1 does not contain an explicit statement of what to do if the
selected TXT record is syntactically invalid. I think this is another case
where no policy should be assumed, so how about changing:
If the number of resulting records is not one, senders MUST assume the
recipient domain does not implement MTA-STS and skip the remaining
steps of policy discovery.
to:
If the number of resulting records is not one, or if the resulting
record is syntactically invalid, senders MUST assume the recipient
domain does not implement MTA-STS and skip the remaining
steps of policy discovery.
(5) The production:
sts-ext-value = 1*(%x21-3A / %x3C / %x3E-7E)
; chars excluding "=", ";", and control chars
refers to "control chars", which AFAIK is not a well-defined. RFC 5234
defines CTL for this purpose, so this should be changed to "and CTLs".
SP was removed from the list of prohibited stuff in this text in
-15. Why? Space is still excluded by the actual production, and itbs
not thought of as a control character.
I hope the intent is not to allow stuff like:
v=STSv1; id=20160831085700Z; foo=bar1 bar2;
And if it is, the ABNF needs further work because there is now
an ambiguity regarding trailing spaces and the *WSP thatbs allowed
at the end of a parameter value.
(6) Section 3.2:
Parsers MUST accept TXT records and policy files which are
syntactically valid (i.e. valid key/value pairs separated by semi-
colons for TXT records) and but containing additional key/value pairs
not specified in this document, in which case unknown fields SHALL be
ignored.
"records) and but containing" -> "records), possibly containing"
(7) Itbs probably too late to change this, but the "mx" key name is misleading
at best: It has nothing whatsoever to do with MX records. Rather, it
specifies a set of certificate identities SMTP servers for the domain
are constrained to use. Indeed, nothing prevents mta-sts from being used
with a domain whose server is identified by an A record - with no MX record
in sight.
And perhaps more to the point, therebs no alignment between MX record
values and these key values, but this key name makes the reader think
there is.
At a minimum there needs to be a note making it clear that the MX
host names are not involved in the policy check. It would probably
also be good to say that "MX host" is simply a host designated to
handle mail for a given domain, which may or may not be the result
of MX record processing.
(8) The policy resource ABNF mandates CRLF as the line terminator.
Unfortunately, this is just not HTTP reality - line terminators are
going to be whatever was used in the file being served out, and I
donbt think mandating that people use CRLFs in these files is realistic.
As such, the ABNF needs to be changed to at least allow LF, and probably
CR, terminators. Something like:
sts-policy-term = CR / LF / CRLF
And then use this throughout the rest of the ABNF instead of CRLF.
(9) The production:
sts-policy-ext-value = 1*(%x21-3A / %x3C / %x3E-7E)
; chars, excluding "=", ";", SP, and
; control chars
has the same issue with "control chars" noted in (5). Additionally,
whatbs the point of excluding ";" and "="? Unlike TXT records, they
have no special meaning as delimiters here. If anything youbd want to
exclude ":", but I see no point in doing that either.
I also note that this production excludes SP (and unlike sts-ext-value,
the language about it has been retained). This seems overly restrictive to
me, so perhaps changing this to something like:
sts-policy-ext-value = %x21-7E [*(%x20-7E) %x21-7E]
; chars, excluding CTLs and no
; leading/trailing spaces
It also may be worth considering allowing UTF-8 in extension values.
Once the syntax rules are set theybre very difficult to change.
(10) The production for mx values:
sts-policy-mx-value = 1*(ALPHA / DIGIT / "_" / "-" / ".")
seems overly lax to me, especially since the DNS-ID fields being
compared against are constrained to valid domain syntax. Rather
than once again specifying productions for a domain, I would
suggest importing the definition of Domain from RFC 5321. This
then becomes:
sts-policy-mx-value = ["."] Domain
Domain = <see RFC 5321 4.1.2>
(11) For completeness, section 3.4 should contain a note about the handling
of domain literals. I suggest "this specification does not provide a
means of associating policies with address that employ domain literals"
or something stronger.
That's it for now. I should note that my implementation is incomplete, and
I expect I will have more comments once I've worked through the SMTP
client additions.
Ned
_______________________________________________
Uta mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/uta