On 2009-05-28 10:52 PDT, Kathleen Wilson wrote:
> Just to make sure I understand…
> 
> In the VeriSign case the MD2 roots expire on 2028-08-01, and the SHA1
> roots expire on 2028-08-02, so the SHA1 roots would take precedence in
> NSS.  Therefore, there is no benefit in keeping the MD2 roots, and the
> MD2 roots should be removed when the SHA1 roots are added.

That is also my understanding.

> In the Izenpe case, they are requesting to add both the SHA1 and the
> SHA256 roots.
> 
> The SHA1 dates are
> 12/13/2007 5:08:27 AM
> 12/13/2037 0:27:25 AM
> 
> The SHA256 dates are
> 12/13/2007 5:08:28 AM
> 12/13/2037 0:27:25 AM
> 
> NSS will always pick the SHA256 root, because its NotBefore date is
> one second later than that of the SHA1 root.

Correct.  NSS will use the newer root when validating certificates
received from remote peers, and it will send out the newer root in the
event that the user has a cert issued by that CA, and uses that cert
for signing email or performing SSL client authentication.

> This means that if the SHA256 root is included, there is no benefit in
> also including the SHA1 root.

Agreed.  Including both roots offers no advantage over including the SHA256
root alone.

> However, Izenpe may want to consider only including the SHA1 root
> because many of their customers may be using operating systems that
> don’t yet support SHA256.

There are two cases to be considered here.
1) The local NSS user is acting as a "relying party" and NSS is verifying a
cert chain received from some other "peer" party.
2) The local NSS user is acting as a "subject party" and NSS is sending out
the cert chain for the local NSS user to some other "peer" party.

When acting as a "relying party", there is no advantage to an NSS user for
NSS to retain Izenpe's SHA1 cert to the exclusion of their SHA256 cert,
because NSS itself can handle both kinds on all supported systems.

When acting as a "subject party", sending out the local user's cert chain,
in some cases, NSS will send out the full chain up to and including the
root CA cert, and in other cases, NSS will send out a partial chain
containing certs up to but NOT including the root CA cert.

In the current NSS releases (3.11.x and 3.12.x) an NSS subject party will
send a PARTIAL chain
- when sending an SSL client's cert chain (performing client auth),
- when sending a signed S/MIME (CMS) message

and will send a FULL chain
- when sending an SSL server's cert chain (acting as an SSL server)
- when constructing a PKCS#12 file containing a private key and cert chain

The type of root cert in NSS's cert store makes no difference in the partial
chain cases.  In the full chain cases, it could make a difference.

An SSL server that sends out a full chain with a SHA256 root could
conceivably cause a problem for a remote SSL client that does not understand
SHA256 signatures and that chooses to check the signature on the received
root cert rather than, or in addition to, relying on its own local trusted
copy of the root cert for that CA.  However, with respect to usage of NSS
for SSL/TLS, Mozilla software presently does not act as an SSL server, but
only as an SSL client.  So, this is not a concern to Mozilla browser users.
 Mozilla clients have understood SHA256 signatures for years.

The only remaining case that could possibly be of concern to mozilla users
is the PKCS#12 file creation case.  If a mozilla user created a PKCS#12
file with a SHA256 root, and then tried to import that file into some
other program that does not understand certs with SHA256 signatures, that
other program might refuse to import the contents of that file.

I think that covers all the considerations that would go into a decision
of whether to include only a SHA1-based cert, or whether to include a
newer SHA256 cert.  I will stop short of making a recommendation for
Izenpe in this case.

/Nelson
-- 
dev-tech-crypto mailing list
dev-tech-crypto@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-tech-crypto

Reply via email to