GitHub Issue:
https://github.com/GoogleChrome/ct-policy/issues/8
Chrome CT Policy only requires that the end-entity certificate be
logged to achieve CT qualification. It does not require that any of
the intermediate certificates used to construct the chain be logged.
At the same time, Chrome Log Policy does not place any restrictions on
what root certificates may be accepted by a log.
This combination leads to challenges for monitors. Imagine a CA asked
logs to accept a root not trusted by browsers, and then issued and
logged certificates chaining to this root for other people's domains.
What is a monitor supposed to do with these certificates?
It has been suggested that monitors should do chain validation on logged
certificates and ignore certificates that don't chain to a root they
care about[1]. However, monitors cannot do this as long as TLS clients
do not require logging of intermediate certificates, since unbeknownst
to a monitor, there may be an undisclosed cross-sign from the root
trusted by the log to a root trusted by Chrome. This cross-sign can be
included in the chain presented to Chrome, and as long as the
end-entity certificate has sufficient SCTs, it will be considered CT
qualified. If a monitor raises an alarm for such a certificate, the
best-case scenario is that there is no undisclosed cross-sign and the
alarm is a false positive. The worst-case scenario is that there is an
undisclosed cross-sign, and the domain owner has no way of knowing
which CA is ultimately responsible for the misissuance.
To solve this problem, Chrome could require that logs accept only
"trusted" roots, but this risks fragmenting the log ecosystem, since
different browsers have a different notion of what roots are trusted.
Instead, I think Chrome should require that any certificate used to
construct a certificate chain be logged, so that intermediate
certificates cannot be hidden from monitors.
Regards,
Andrew
[1]
https://groups.google.com/a/chromium.org/forum/#!msg/ct-policy/Itoq0YUZTlA/abf6cmjyCwAJ