Subject: Re: [dane] simultaneous use cases (was: Starting WGLC on: draft-ietf-dane-use-cases-02)

From: Matt McCutchen <[email-masked]>
Date: Sat, 04 Jun 2011 19:33:55 -0400

On Mon, 2011-05-16 at 14:02 -0700, Jim Schaad wrote:
> I think that it might require some extra text.  There are two cases and they
> need to be distinguished.  The first is the combinable case and the second
> is the rollover case.  If you want to roll over from specifying the EE cert
> to specifying a CA cert this is different than saying that both are to be
> enforced.  At a minimum one needs to say that a combinable case exists.

I would suggest the following design.  A TLSA assertion for a service is
a disjunction of zero or more profiles, each of which is a conjunction
of one or more predicates on certificates; its meaning is that a
legitimate certificate satisfies all the predicates of some profile.
(Better terminology invited.)

We can have various predicate types that are applicable to different
subsets of the TLS certificate types, and are considered to be false for
certificates of inappropriate types.  The existing "certificate types"
become predicate types applicable to X.509 certificates.

There would be an additional predicate type for an unspecified
"traditional" certificate acceptance test, typically understood to be
PKIX validation against a mainstream public CA list plus a server ID
check.  An absent TLSA assertion is equivalent to one with a single
profile containing the single predicate "traditional".  You can then do:

- An additive assertion: (traditional) || (server_cert_hash(...))
- A restrictive assertion: (traditional && server_cert_hash(...))
- An assertion that completely replaces the traditional test:
(server_cert_hash(...))

And a client that elects to process a TLSA assertion from a
verified-insecure zone can just add the "traditional" predicate to every
profile where it does not already appear.

-- 
Matt