SMTP MTA Strict Transport Security (MTA-STS)Google, Incdmargolis (at) google (dot com)Google, Incrisher (at) google (dot com)Yahoo!, Incrbinu (at) yahoo-inc (dot com)Comcast, Incalex_brotman (at) comcast (dot com)Microsoft, Incjanet.jones (at) microsoft (dot com)
Applications
Using TLS in ApplicationsSMTP Mail Transfer Agent Strict Transport Security (MTA-STS) is a
mechanism enabling mail service providers to declare their ability to
receive Transport Layer Security (TLS) secure SMTP connections, and to
specify whether sending SMTP servers should refuse to deliver to MX
hosts that do not offer TLS with a trusted server certificate.
The STARTTLS extension to SMTP allows SMTP clients and hosts
to negotiate the use of a TLS channel for encrypted mail transmission.
While this opportunistic encryption protocol by itself provides a high
barrier against passive man-in-the-middle traffic interception, any
attacker who can delete parts of the SMTP session (such as the "250
STARTTLS" response) or who can redirect the entire SMTP session (perhaps
by overwriting the resolved MX record of the delivery domain) can
perform downgrade or interception attacks.
This document defines a mechanism for recipient domains to publish
policies specifying:
whether MTAs sending mail to this domain can expect
PKIX-authenticated TLS supportwhat a conforming client should do with messages when TLS cannot be
successfully negotiatedThe key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in .
We also define the following terms for further use in this document:
MTA-STS Policy: A commitment by the Policy Domain to support PKIX
authenticated TLS for the specified MX hosts.Policy Domain: The domain for which an MTA-STS Policy is defined. This
is the next-hop domain; when sending mail to "alice@example.com" this
would ordinarily be "example.com", but this may be overridden by
explicit routing rules (as described in
, "Policy Selection
for Smart Hosts and Subdomains").The DANE TLSA record is similar, in that DANE is also
designed to upgrade unauthenticated encryption or plaintext transmission
into authenticated, downgrade-resistant encrypted transmission. DANE
requires DNSSEC for authentication; the mechanism described
here instead relies on certificate authorities (CAs) and does not
require DNSSEC, at a cost of risking malicious downgrades. For a
thorough discussion of this trade-off, see ,
"Security Considerations".
In addition, MTA-STS provides an optional report-only mode, enabling
soft deployments to detect policy failures; partial deployments can be
achieved in DANE by deploying TLSA records only for some of a domain's
MXs, but such a mechanism is not possible for the per-domain policies
used by MTA-STS.
The primary motivation of MTA-STS is to provide a mechanism for domains
to ensure transport security even when deploying DNSSEC is undesirable
or impractical. However, MTA-STS is designed not to interfere with DANE
deployments when the two overlap; in particular, senders who implement
MTA-STS validation MUST NOT allow a "valid" or "report-only" MTA-STS
validation to override a failing DANE validation.
MTA-STS policies are distributed via HTTPS from a "well-known"
path served within the Policy Domain, and their presence and
current version are indicated by a TXT record at the Policy Domain.
These TXT records additionally contain a policy id field, allowing
sending MTAs to check the currency of a cached policy without performing
an HTTPS request.
To discover if a recipient domain implements MTA-STS, a sender need only
resolve a single TXT record. To see if an updated policy is available
for a domain for which the sender has a previously cached policy, the
sender need only check the TXT record's version id against the cached
value.
The MTA-STS TXT record is a TXT record with the name _mta-sts at the
Policy Domain. For the domain example.com, this record would be
_mta-sts.example.com. MTA-STS TXT records MUST be US-ASCII,
semicolon-separated key/value pairs containing the following fields:
v: (plain-text, required). Currently only "STSv1" is supported.id: (plain-text, required). A short string used to track policy
updates. This string MUST uniquely identify a given instance of a
policy, such that senders can determine when the policy has been
updated by comparing to the id of a previously seen policy. There is
no implied ordering of id fields between revisions.An example TXT record is as below:
_mta-sts.example.com. IN TXT "v=STSv1; id=20160831085700Z;"The formal definition of the _mta-sts TXT record, defined using
, is as follows:
If multiple TXT records for _mta-sts are returned by the resolver,
records which do not begin with v=STSv1; are discarded. 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. If the resulting TXT record contains multiple strings, then
the record MUST be treated as if those strings are concatenated together
without adding spaces.
The policy itself is a set of key/value pairs (similar to
header fields) served via the HTTPS GET method from the fixed
"well-known" path of .well-known/mta-sts.txt served by the
mta-sts host at the Policy Domain. Thus for example.com the path is
https://mta-sts.example.com/.well-known/mta-sts.txt.
The "Content-Type" media type for this resource MUST be
"text/plain". When fetching a policy, senders SHOULD validate that the
media type is "text/plain" to guard against cases where webservers allow
untrusted users to host non-text content (typically, HTML or images) at
a user-defined path. Additional "Content-Type" parameters are ignored.
This resource contains the following newline-separated key/value pairs:
version: (plain-text). Currently only "STSv1" is supported.mode: (plain-text). One of "enforce", "testing", or "none",
indicating the expected behavior of a sending MTA in the case of a
policy validation failure.max_age: Max lifetime of the policy (plain-text non-negative integer
seconds, maximum value of 31557600). Well-behaved clients SHOULD
cache a policy for up to this value from last policy fetch time. To
mitigate the risks of attacks at policy refresh time, it is expected
that this value typically be in the range of weeks or greater.mx: MX identity patterns (list of plain-text strings). One or more
patterns matching a Common Name () or Subject Alternative
Name () DNS-ID present in the X.509 certificate presented
by any MX receiving mail for this domain. For example:
mx: mail.example.com
mx: .example.net
indicates that mail for this domain might be handled by any MX with a
certificate valid for a host at mail.example.com or example.net.
Valid patterns can be either fully specified names (example.com) or
suffixes (.example.net) matching the right-hand parts of a server's
identity; the latter case are distinguished by a leading period. If
there are more than one MX specified by the policy, they MUST be on
separate lines within the policy file. In the case of
Internationalized Domain Names (), the MX MUST specify the
Punycode-encoded A-label and not the Unicode-encoded
U-label. The full semantics of certificate validation are described in
, "MX Certificate Validation."An example policy is as below:
The formal definition of the policy resource, defined using , is as
follows:
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. If any
non-repeated field--i.e. all fields excepting mx--is duplicated, all
entries except for the first SHALL be ignored. If any field is not
specified, the policy SHALL be treated as invalid.
When fetching a new policy or updating a policy, the HTTPS endpoint MUST
present a X.509 certificate which is valid for the mta-sts host (e.g.
mta-sts.example.com) as described below, chain to a root CA that is
trusted by the sending MTA, and be non-expired. It is expected that
sending MTAs use a set of trusted CAs similar to those in widely
deployed Web browsers and operating systems.
The certificate is valid for the mta-sts host with respect to the
rules described in , with the following application-specific
considerations:
Matching is performed only against the DNS-ID and CN-ID identifiers.DNS domain names in server certificates MAY contain the wildcard
character '*' as the complete left-most label within the identifier.The certificate MAY be checked for revocation via the Online Certificate
Status Protocol (OCSP) , certificate revocation lists (CRLs),
or some other mechanism.
Policies fetched via HTTPS are only valid if the HTTP response code is
200 (OK). HTTP 3xx redirects MUST NOT be followed, and HTTP caching (as
specified in ) MUST NOT be used.
Senders may wish to rate-limit the frequency of attempts to fetch the
HTTPS endpoint even if a valid TXT record for the recipient domain
exists. In the case that the HTTPS GET fails, we suggest implementions
may limit further attempts to a period of five minutes or longer per
version ID, to avoid overwhelming resource-constrained recipients with
cascading failures.
Senders MAY impose a timeout on the HTTPS GET and/or a limit on the
maximum size of the response body to avoid long delays or resource
exhaustion during attempted policy updates. A suggested timeout is one
minute, and a suggested maximum policy size 64 kilobytes; policy hosts
SHOULD respond to requests with a complete policy body within that
timeout and size limit.
If a valid TXT record is found but no policy can be fetched via HTTPS
(for any reason), and there is no valid (non-expired) previously-cached
policy, senders MUST continue with delivery as though the domain has not
implemented MTA-STS.
Conversely, if no "live" policy can be discovered via DNS or fetched via
HTTPS, but a valid (non-expired) policy exists in the sender's cache,
the sender MUST apply that cached policy.
Finally, to mitigate the risk of persistent interference with policy
refresh, as discussed in-depth in , MTAs
SHOULD proactivecly refresh cached policies before they expire; a
suggested refresh frequency is once per day. To enable administrators to
discover problems with policy refresh, MTAs SHOULD alert administrators
(through the use of logs or similar) when such attempts fail, unless the
cached policy mode is none.
When sending mail via a "smart host"--an intermediate SMTP relay rather
than the message recipient's server--compliant senders MUST treat the
smart host domain as the policy domain for the purposes of policy
discovery and application.
When sending mail to a mailbox at a subdomain, compliant senders MUST
NOT attempt to fetch a policy from the parent zone. Thus for mail sent
to "user@mail.example.com", the policy can be fetched only from
"mail.example.com", not "example.com".
When sending to an MX at a domain for which the sender has a valid and
non-expired MTA-STS policy, a sending MTA honoring MTA-STS MUST
validate:
That the recipient MX supports STARTTLS and offers a valid
PKIX-based TLS certificate.That at least one of the policy's "mx" patterns matches at least one
of the identities presented in the MX's X.509 certificate, as
described in "MX Certificate Validation".This section does not dictate the behavior of sending MTAs when policies
fail to validate; see , "Policy Application" for a
description of sending MTA behavior when policy validation fails.
The certificate presented by the receiving MX MUST chain to a root CA
that is trusted by the sending MTA and be non-expired. The certificate
MUST have a CN-ID () or subject alternative name (SAN,
) with a DNS-ID matching the mx pattern. The MX's
certificate MAY also be checked for revocation via OCSP ,
CRLs , or some other mechanism.
Because the mx patterns are not hostnames, however, matching is not
identical to other common cases of X.509 certificate authentication (as
described, for example, in ). Consider the example policy
given above, with an mx pattern containing .example.com. In this
case, if the MX server's X.509 certificate contains a SAN matching
*.example.com, we are required to implement "wildcard-to-wildcard"
matching.
To simplify this case, we impose the following constraints on wildcard
certificates, identical to those in section 3.2.3 and
section 6.4.3: wildcards are valid in DNS-IDs or CN-IDs, but
must be the entire first label of the identifier (that is,
*.example.com, not mail*.example.com). Senders who are comparing a
"suffix" MX pattern with a wildcard identifier should thus strip the
wildcard and ensure that the two sides match label-by-label, until all
labels of the shorter side (if unequal length) are consumed.
Note that a wildcard must match a label; an mx pattern of
.example.com thus does not match a SAN of example.com, nor does a
SAN of *.example.com match an mx of example.com.
A simple pseudocode implementation of this algorithm is presented in
.
When sending to an MX at a domain for which the sender has a valid,
non-expired MTA-STS policy, a sending MTA honoring MTA-STS applies the
result of a policy validation failure one of two ways, depending on the
value of the policy mode field:
enforce: In this mode, sending MTAs MUST NOT deliver the message to
hosts which fail MX matching or certificate validation.report: In this mode, sending MTAs which also implement the TLSRPT
specification merely send a report indicating
policy application failures (so long as TLSRPT is also implemented by the
recipient domain).none: In this mode, sending MTAs should treat the policy domain as
though it does not have any active policy; see ,
"Removing MTA-STS", for use of this mode value.When a message fails to deliver due to an enforce policy, a compliant
MTA MUST NOT permanently fail to deliver messages before checking for
the presence of an updated policy at the Policy Domain. (In all cases,
MTAs SHOULD treat such failures as transient errors and retry delivery
later.) This allows implementing domains to update long-lived policies
on the fly.
An example control flow for a compliant sender consists of the following
steps:
Check for a cached policy whose time-since-fetch has not exceeded its
max_age. If none exists, attempt to fetch a new policy (perhaps
asynchronously, so as not to block message delivery). Optionally,
sending MTAs may unconditionally check for a new policy at this step.For each candidate MX, in order of MX priority, attempt to deliver
the message, enforcing STARTTLS and, assuming a policy is present,
PKIX certificate validation as described in
, "MX Certificate Validation."A message delivery MUST NOT be permanently failed until the sender
has first checked for the presence of a new policy (as indicated by
the id field in the _mta-sts TXT record). If a new policy is not
found, existing rules for the case of temporary message delivery
failures apply (as discussed in section 4.5.4.1).MTA-STS is intended to be used along with TLSRPT in
order to ensure implementing domains can detect cases of both benign and
malicious failures, and to ensure that failures that indicate an active attack
are discoverable. As such, senders who also implement TLSRPT SHOULD treat the
following events as reportable failures:
HTTPS policy fetch failures when a valid TXT record is present.Policy fetch failures of any kind when a valid policy exists in the
policy cache, except if that policy's mode is none.Delivery attempts in which a contacted MX does not support STARTTLS or
does not present a certificate which validates according to the
applied policy, except if that policy's mode is none.To ensure that the server sends the right certificate chain, the SMTP
client MUST have support for the TLS SNI extension . When
connecting to a HTTP server to retrieve the MTA-STS policy, the SNI
extension MUST contain the name of the policy host (e.g.
mta-sts.example.com). When connecting to an SMTP server, the SNI
extension MUST contain the MX hostname.
HTTP servers used to deliver MTA-STS policies MUST have support for the
TLS SNI extension and MAY rely on SNI to determine which certificate
chain to present to the client. In either case, HTTP servers MUST
respond with a certificate chain that matches the policy hostname or
abort the TLS handshake if unable to do so.
SMTP servers MUST have support for the TLS SNI extension and MAY rely on
SNI to determine which certificate chain to present to the client. If
the client sends no SNI extension or sends an SNI extension for an
unsupported server name, the server MUST simply send a fallback
certificate chain of its choice. The reason for not enforcing strict
matching of the requested SNI hostname is that MTA-STS TLS clients may
be typically willing to accept multiple server names but can only send
one name in the SNI extension. The server's fallback certificate may
match a different name that is acceptable to the client, e.g., the
original next-hop domain.
MTAs supporting MTA-STS MUST have support for TLS version 1.2
or higher. The general TLS usage guidance in
SHOULD be followed.
Updating the policy requires that the owner make changes in two places:
the _mta-sts TXT record in the Policy Domain's DNS zone and at the
corresponding HTTPS endpoint. As a result, recipients should expect a
policy will continue to be used by senders until both the HTTPS and TXT
endpoints are updated and the TXT record's TTL has passed.
In other words, a sender who is unable to successfully deliver a message
while applying a cache of the recipient's now-outdated policy may be
unable to discover that a new policy exists until the DNS TTL has
passed. Recipients should therefore ensure that old policies continue
to work for message delivery during this period of time, or risk message
delays.
Recipients should also prefer to update the HTTPS policy body before
updating the TXT record; this ordering avoids the risk that senders,
seeing a new TXT record, mistakenly cache the old policy from HTTPS.
Domain owners commonly delegate SMTP hosting to a different
organization, such as an ISP or a Web host. In such a case, they may
wish to also delegate the MTA-STS policy to the same organization which
can be accomplished with two changes.
First, the Policy Domain must point the _mta-sts record, via CNAME, to
the _mta-sts record maintained by the hosting organization. This
allows the hosting organization to control update signaling.
Second, the Policy Domain must point the "well-known" policy location to
the hosting organization. This can be done either by setting the
mta-sts record to an IP address or CNAME specified by the hosting
organization and by giving the hosting organization a TLS certificate
which is valid for that host, or by setting up a "reverse proxy" (also
known as a "gateway") server that serves as the Policy Domain's policy
the policy currently served by the hosting organization.
For example, given a user domain user.example hosted by a mail
provider provider.example, the following configuration would allow
policy delegation:
DNS:
Policy:
Note that while sending MTAs MUST NOT use HTTP caching when fetching
policies via HTTPS, such caching may nonetheless be useful to a reverse
proxy configured as described in this section. An HTTPS policy endpoint
expecting to be proxied for multiple hosted domains--as with a large
mail hosting provider or similar--may wish to indicate an HTTP
Cache-Control max-age response directive (as specified in )
of 60 seconds as a reasonable value to save reverse proxies an
unnecessarily high-rate of proxied policy fetching.
In order to facilitate clean opt-out of MTA-STS by implementing policy
domains, and to distinguish clearly between failures which indicate
attacks and those which indicate such opt-outs, MTA-STS implements the
none mode, which allows validated policies to indicate authoritatively
that the policy domain wishes to no longer implement MTA-STS and may, in
the future, remove the MTA-STS TXT and policy endpoints entirely.
A suggested workflow to implement such an opt out is as follows:
Publish a new policy with mode equal to none and a small
max_age (e.g. one day).Publish a new TXT record to trigger fetching of the new policy.When all previously served policies have expired--normally this is
the time the previously published policy was last served plus that
policy's max_age, but note that older policies may have been served
with a greater max_age, allowing overlapping policy caches--safely
remove the TXT record and HTTPS endpoint.A new "well-known" URI as described in will be
registered in the Well-Known URIs registry as described below:
URI Suffix: mta-sts.txt Change Controller: IETF
IANA is requested to create a new registry titled "MTA-STS TXT Record
Fields". The initial entries in the registry are:
Field NameDescriptionReferencevRecord version of RFC XXXidPolicy instance ID of RFC XXXNew fields are added to this registry using IANA's "Expert Review"
policy.
IANA is requested to create a new registry titled "MTA-STS Policy
Fields". The initial entries in the registry are:
Field NameDescriptionReferenceversionPolicy version of RFC XXXmodeEnforcement behavior of RFC XXXmax_agePolicy lifetime of RFC XXXmxMX identities of RFC XXXNew fields are added to this registry using IANA's "Expert Review"
policy.
SMTP MTA Strict Transport Security attempts to protect against an active
attacker who wishes to intercept or tamper with mail between hosts who
support STARTTLS. There are two classes of attacks considered:
Foiling TLS negotiation, for example by deleting the "250 STARTTLS"
response from a server or altering TLS session negotiation. This would
result in the SMTP session occurring over plaintext, despite both
parties supporting TLS.Impersonating the destination mail server, whereby the sender might
deliver the message to an impostor, who could then monitor and/or
modify messages despite opportunistic TLS. This impersonation could be
accomplished by spoofing the DNS MX record for the recipient domain,
or by redirecting client connections intended for the legitimate
recipient server (for example, by altering BGP routing tables).MTA-STS can thwart such attacks only if the sender is able to previously
obtain and cache a policy for the recipient domain, and only if the
attacker is unable to obtain a valid certificate that complies with that
policy. Below, we consider specific attacks on this model.
SMTP MTA-STS relies on certificate validation via PKIX based TLS
identity checking . Attackers who are able to obtain a valid
certificate for the targeted recipient mail service (e.g. by
compromising a certificate authority) are thus able to circumvent STS
authentication.
Since MTA-STS uses DNS TXT records for policy discovery, an attacker who
is able to block DNS responses can suppress the discovery of an MTA-STS
Policy, making the Policy Domain appear not to have an MTA-STS Policy.
The sender policy cache is designed to resist this attack by decreasing
the frequency of policy discovery and thus reducing the window of
vulnerability; it is nonetheless a risk that attackers who can predict
or induce policy discovery--for example, by inducing a sending domain to
send mail to a never-before-contacted recipient while carrying out a
man-in-the-middle attack--may be able to foil policy discovery and
effectively downgrade the security of the message delivery.
Since this attack depends upon intercepting initial policy discovery, we
strongly recommend implementers to prefer policy max_age values to be
as long as is practical.
Because this attack is also possible upon refresh of a cached policy, we
suggest implementers do not wait until a cached policy has expired
before checking for an update; if senders attempt to refresh the cache
regularly (for instance, by checking their cached version string against
the TXT record on each successful send, or in a background task that
runs daily or weekly), an attacker would have to foil policy discovery
consistently over the lifetime of a cached policy to prevent a
successful refresh.
Additionally, MTAs should alert administrators to repeated policy
refresh failures long before cached policies expire (through warning
logs or similar applicable mechanisms), allowing administrators to
detect such a persistent attack on policy refresh. (However, they should
not implement such alerts if the cached policy has a none mode, to
allow clean MTA-STS removal, as described in .)
Resistance to downgrade attacks of this nature--due to the ability to
authoritatively determine "lack of a record" even for non-participating
recipients--is a feature of DANE, due to its use of DNSSEC for policy
discovery.
We additionally consider the Denial of Service risk posed by an attacker
who can modify the DNS records for a recipient domain. Absent MTA-STS,
such an attacker can cause a sending MTA to cache invalid MX records,
but only for however long the sending resolver caches those records.
With MTA-STS, the attacker can additionally advertise a new,
long-max_age MTA-STS policy with mx constraints that validate the
malicious MX record, causing senders to cache the policy and refuse to
deliver messages once the victim has resecured the MX records.
This attack is mitigated in part by the ability of a victim domain to
(at any time) publish a new policy updating the cached, malicious
policy, though this does require the victim domain to both obtain a
valid CA-signed certificate and to understand and properly configure
MTA-STS.
Similarly, we consider the possibility of domains that deliberately
allow untrusted users to serve untrusted content on user-specified
subdomains. In some cases (e.g. the service Tumblr.com) this takes the
form of providing HTTPS hosting of user-registered subdomains; in other
cases (e.g. dynamic DNS providers) this takes the form of allowing
untrusted users to register custom DNS records at the provider's domain.
In these cases, there is a risk that untrusted users would be able to
serve custom content at the mta-sts host, including serving an
illegitimate MTA-STS policy. We believe this attack is rendered more
difficult by the need for the attacker to also serve the _mta-sts TXT
record on the same domain--something not, to our knowledge, widely
provided to untrusted users. This attack is additionally mitigated by
the aforementioned ability for a victim domain to update an invalid
policy at any future date.
Even if an attacker cannot modify a served policy, the potential exists
for configurations that allow attackers on the same domain to receive
mail for that domain. For example, an easy configuration option when
authoring an MTA-STS Policy for example.com is to set the mx equal
to .example.com; recipient domains must consider in this case the risk
that any user possessing a valid hostname and CA-signed certificate (for
example, dhcp-123.example.com) will, from the perspective of MTA-STS
Policy validation, be a valid MX host for that domain.
A host of risks apply to the PKI system used for certificate
authentication, both of the mta-sts HTTPS host's certificate and the
SMTP servers' certificates. These risks are broadly applicable within
the Web PKI ecosystem and are not specific to MTA-STS; nonetheless, they
deserve some consideration in this context.
Broadly speaking, attackers may compromise the system by obtaining
certificates under fraudulent circumstances (i.e. by impersonating the
legitimate owner of the victim domain), by compromising a Certificate
Authority or Delegate Authority's private keys, by obtaining a
legitimate certificate issued to the victim domain, and similar.
One approach commonly employed by Web browsers to help mitigate against
some of these attacks is to allow for revocation of compromised or
fraudulent certificates via OCSP or CRLs . Such
mechanisms themselves represent tradeoffs and are not universally
implemented; we nonetheless recommend implementors of MTA-STS to
implement revocation mechanisms which are most applicable to their
implementations.
Nicolas Lidzborski
Google, Inc
nlidz (at) google (dot com)
Wei Chuang
Google, Inc
weihaw (at) google (dot com)
Brandon Long
Google, Inc
blong (at) google (dot com)
Franck Martin
LinkedIn, Inc
fmartin (at) linkedin (dot com)
Klaus Umbach
1&1 Mail & Media Development & Technology GmbH
klaus.umbach (at) 1und1 (dot de)
Markus Laber
1&1 Mail & Media Development & Technology GmbH
markus.laber (at) 1und1 (dot de)
The owner of example.com wishes to begin using MTA-STS with a policy
that will solicit reports from senders without affecting how the
messages are processed, in order to verify the identity of MXs that
handle mail for example.com, confirm that TLS is correctly used, and
ensure that certificates presented by the recipient MX validate.
MTA-STS policy indicator TXT RR:
MTA-STS Policy file served as the response body at
https://mta-sts.example.com/.well-known/mta-sts.txt:
Below is pseudocode demonstrating the logic of a compliant sending MTA.
While this pseudocode implementation suggests synchronous policy
retrieval in the delivery path, in a working implementation that may be
undesirable, and we expect some implementers to instead prefer a
background fetch that does not block delivery if no cached policy is
present.