Thank you Hubert from starting this discussion. I think this can be the base for version 4 of the document.

On 2014-10-20 08:10, Hubert Kario wrote:
The items that probably should be changed or added:
 * curves weaker than secp256r1 - I think they shouldn't be
   enabled at all - while browsers do enable only the two or three
   NIST curves, clients that use OpenSSL enable also the rather weak
   163 bit curve, making it possible to negotiate them (and as such
   limit the level of security to about 80 bit)

I agree. The document currently recommends secp256r1, secp384r1 and secp521r1. It would be good to have a more comprehensive list of curves, and have another list of discarded curves in the "Mandatory discards" section. The problem is being able to specify these curves in configurations, which isn't widely supported in servers.

 * negotiation of curves in ECDHE - servers in general should
   be able to negotiate the used curve for this KEX - it's a RFC MUST

Could you clarify what you mean by 'negotiate' ? Do you mean that servers should implement configurable lists of supported curves?

 * lack of secp256r1 intolerance - servers that hardcode this
curve may ignore the tls extension completely, causing the connection to fail if the client doesn't support this curve (the server should
   choose a cipher that doesn't require ECC in such case)

This is the same problem we have with 2048 DHE parameters and Java 6, where the client fails the handshake instead of falling back to a non-DHE cipher. In this situation, I believe that the role of the guide is to inform operators on the issue and what configuration they should pick.

Servers should patch their TLS stacks, but that's hardly something we can address in the wiki...

 * SHA1 signing of (EC)DHE in TLSv1.2 - there's a bug in OpenSSL that
causes the SNI certificate selection to not copy acceptable signature
   algs properly, this causes it to sign the key exchange using SHA1.
Some servers may just hardcode the sig alg, which would be just as bad

That is also a server problem. What do you propose we add to the document to address this?

 * SHA-384 and SHA-512 signatures in certs - in current version
they are not acceptable - as they are stronger, I think they should
   be added as acceptable (but maybe marked as not recommended).
   SHA-224 should probably be explicitly marked as non recommended as
   it is not supported in some libraries that do support SHA-256 and
   greater (very old NSS had this issue)

I'm not against, modulo verification that these signatures work with all the intended clients described in "Oldest compatible client" of each level. We should also list the clients that are not compatible.

I wonder if this is really useful though. Server Side TLS is a pragmatic guide, and pragmatism dictates that operators should use SHA-256 certs, not SHA-384 or SHA-512. When asked to review a production site that runs a SHA-512 cert, I would recommend the admins to downgrade to SHA-256 to prevent unknown behavior with unknown clients.

 * ECDSA certs (and prioritisation of ECDSA above RSA) - there's no
   mention of those, and since we suggest PFS over non-PFS and
   ECDHE-ECDSA is over twice as fast as ECDHE-RSA[1], I think we
   definitely should allow (if not recommend) its use

Same comment as above: we first need to evaluate compatibility of clients. Having ECDSA in the recommended ciphersuites has no site effect on server compatibility. But recommending ECDSA certificates does have strong side effects.

Do you know of certificate authorities that issue ECDSA certs?

 * intolerance of TLS1.3 ClientHello - new version is incoming
   while a significant percentage of servers can't do TLS version
   negotiation properly

Let's leave this aside for now. TLS1.3 will not be implemented for many more months, and we don't know much about its structure yet. I don't want to confuse operators with recommendations that don't map to anything yet.

While most of those items may become issues only in future, I think
it's better to point to them now, so that the number of
servers that have bad configurations/bugs is limited. As such,
it will also limit the need for clients to do the TLS downgrade dance.

I never envisioned Server Side TLS as an implementation guide. I always thought of it as an operation guide. Many of your comments imply that we need a modern and reliable TLS implementation guide for servers, which I agree with, but maybe that should be a separate document that can dive into sample code and coding guidelines?

Even better, something similar to the Configuration Generator, but for code: http://mozilla.github.io/server-side-tls/ssl-config-generator/

I agree that we need to cover more of TLS, but we also must keep the guidelines focused on what operators need to know and can use quickly.

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

Reply via email to