On Thursday, 5 May 2016 13:22:34 UTC+1, Rob Stradling wrote: > That logic would imply that all of the "Not Trusted by Mozilla" > intermediates should be moved to "Disclosure required!", given that I > can't prove the non-existence of cross-certificates that would cause > these intermediates to become trusted!
As a relying party I think the correct algorithm here is an iterative one, or at least, is best explained that way. Given the set of disclosed certificates, create a graph of CA nodes, reachable from the NSS public trust roots by following certificates that meet certain criteria. From each of those nodes, if you know of any certificates that would also meet the criteria, which are not yet disclosed, you must disclose them. Repeat until nobody discloses any more certificates and thus the graph stops changing. A rough stab at the criteria goes like this: CA:TRUE (and not ruled out by path length?) notBefore < now() < notAfter() EKU either non-existent or contains TLS-server something about name constraints ? Why do I say the algorithm is iterative ? Here's an extreme example. Suppose there are two rather incestuous companies Foo and Bar, each is a public root CA but also operates a confusing number of intermediates built up over many years, some even prior to the World Wide Web. Their root CAs are respectively Foo Root CA and Bar Root CA and all their intermediates have their name in the CN (already an improvement over the reality we face today). Step 1. Foo identifies that "Foo Root CA" signed an unconstrained cert for "Bar Public Issuer Class 8" and they disclose that, although the only record they still have is a stained bar napkin so they hope they copied the serial number down correctly. Step 2. Bar now remembers that "Bar Public Issuer Class 8" is still trusted, it had a 25 year expiry date and from archive tapes they find it signed an unconstrained cert for "Foo SHA-1 Upgrade CA" so they disclose that. Step 3. Foo is surprised to be reminded of the old "Foo SHA-1 Upgrade CA" and that it's still technically trusted despite being retired back when Twitter didn't exist, they dig through old records and find it signed "Bar New 2048 RSA" so they disclose that. Step 4. Bar is a little embarrassed, the keys from "Bar New 2048 RSA" are actually still in use in an OCSP server, but yep, it was technically unconstrained, and worse yet they find it was used to sign a cert for "Foo Private CA Oscar Zulu" before moving to its OCSP role. Step 5. Foo are even more embarrassed that "Foo Private CA Oscar Zulu" is actually publicly trusted, they've been moving clients who want Intranet certs onto it, and completely forgot it has a cross-signature. Whoops. At least it didn't sign any other CA certificates though. The algorithm terminates. As I understand it this algorithm, once performed properly, discloses all the intermediate certificates that should end up in a chain for a certificate I, a normal relying party, end up relying on. Relying parties can make trust decisions based on these disclosures, and Mozilla can inspect e.g. audits and evidence of appropriate technical controls for the disclosed intermediates. If I run into a bad certificate (not talking about merely non-conforming, but e.g. a fake "google.com" or something of that sort) with an undisclosed intermediate in the chain Mozilla can most reasonably as a first step actively distrust that undisclosed intermediate. It would be literally _incredible_ for a root CA to argue that an intermediate is so important that Mozilla should still trust it despite the bad certificate, yet so unimportant they forgot it even existed and so didn't disclose it. From there Mozilla can investigate the intermediate's issuer. Did they "forget" any others? But in many cases just this first step plugs a big hole without waiting for weeks of discussion to conclude. So far what we tend to see with intermediates that have been "forgotten" is that they aren't supposed to be used to issue TLS certificates. Distrusting those as a result of a security incident would be no great loss to the web PKI. A "submarine" intermediate, one that was not only technically unconstrained but deliberately signing end-entity TLS certificates or signing another CA that does so, yet not disclosed to Mozilla during the current process would therefore be rare and deserving of extra scrutiny if found later. _______________________________________________ dev-security-policy mailing list [email protected] https://lists.mozilla.org/listinfo/dev-security-policy

