News for hackers. Stuff that matters.
Re:Achieving a Perfect SSL Labs Score with Go by dorianm on Sunday May 22, 2016 @06:05AM (#11747994)
> No HTTP/2 for you! - HTTP/2 was enabled by default in go 1.6, however HTTP/2 mandates the support of the cipher suite TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256. As this is a 128bit cipher, it needs to be removed. The only way to achieve a perfect score now is to disable HTTP/2.

Why does it have to be this way?

Re:Achieving a Perfect SSL Labs Score with Go by FiloSottile on Sunday May 22, 2016 @09:03AM (#11748443)
I think something to understand here is that SSL Labs wants you to aim for A+, not for 100%. The numeric score is probably just to visualize what areas need improvement, and obviously 256 scores more than 128, but that's not an indictment of 128.

This article in a nice exercise, but not a guide you should follow in production. The HTTP/2 ciphersuites recommendations are great, and there's no security reason to disregard them.

Re:Achieving a Perfect SSL Labs Score with Go by MrPeterLambert on Sunday May 22, 2016 @09:27AM (#11748496)
Author here. This is exactly right.

I even go as far to say:

> You should probably stop here. Continuing to attempt to achieve a perfect score will result in reduced client compatibility. This means that many users will not be able to access your site.

I should probably have also said that it is unlikely to be their intentions. An A+ is more than good enough.

This was just an exercise to better understand how to influence the score with a Go server as I've read a few in the past for NGINX, Apache etc.

Aiming for 100% in all ares was just a fun, but mostly pointless metric. It did, however uncover a couple of interesting things along the way.

Re:Achieving a Perfect SSL Labs Score with Go by ivanr on Sunday May 22, 2016 @11:41AM (#11748967)
That's absolutely correct; the goal should be to get an A+. (SSL Labs author.)
Re:Achieving a Perfect SSL Labs Score with Go by davidben on Sunday May 22, 2016 @11:45AM (#11748980)
The blog isn't quite right. HTTP/2 requires ECDHE (or DHE, but don't do that) with an AEAD, which means one of the GCMs or CHACHA20_POLY1305 if you have it. It's written as a blacklist, but this was the intent.

What's going on is Chrome and Firefox don't do AES_256_GCM (but Chrome will be adding support in the next release, see [1]), which means it was picking a CBC mode cipher and HTTP/2 wouldn't allow it.

SSL Labs is, in my opinion, wrong about incentivizing AES_256_CBC over AES_128_GCM. The CBC mode ciphers in TLS are composed wrong and very very difficult to implement safely. They'll be gone in TLS 1.3.

[1] https://groups.google.com/a/chromium.org/d/msg/security-dev/...

Re:Achieving a Perfect SSL Labs Score with Go by blowski on Sunday May 22, 2016 @12:14PM (#11749123)
I appreciate the information you've given, but such a list of acronyms is exactly why so many webservers are configured incorrectly. Why can't this be made easier? Maybe flags like "Modern Support Only" or "Legacy Browser Support".
Re:Achieving a Perfect SSL Labs Score with Go by jlgaddis on Sunday May 22, 2016 @12:40PM (#11749230)
If you use the Mozilla SSL Configuration Generator [0], you can select "Modern", "Intermediate", or "Old", and end up with a cut-and-paste configuration snippet that'll best suit your specific needs.

[0]: https://mozilla.github.io/server-side-tls/ssl-config-generat...

Re:Achieving a Perfect SSL Labs Score with Go by blowski on Sunday May 22, 2016 @12:46PM (#11749248)
That's really useful, thank you.

But my question still stands - why do nginx and Apache not provide the same settings as a configuration option?

Re:Achieving a Perfect SSL Labs Score with Go by stouset on Sunday May 22, 2016 @05:47PM (#11750429)
Because what is implied by those terms changes over time, and minor changes can have major impacts on accessibility by older clients.
Re:Achieving a Perfect SSL Labs Score with Go by MrPeterLambert on Sunday May 22, 2016 @03:22PM (#11749864)
Can you explain how it isn't quite right? I would like to correct the article if this is the case.

When I ran the code, the Go HTTP/2 package caused a panic with the message "http2: TLSConfig.CipherSuites is missing HTTP/2-required TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256".

I went source diving and found the following:

https://golang.org/src/net/http/h2_bundle.go?h=TLS_ECDHE_RSA...

It even has the helpful comment:

> If they already provided a CipherSuite list, return an error if it has a bad order or is missing ECDHE_RSA_WITH_AES_128_GCM_SHA256.

I cannot see how I would have achieved my aim without disabling HTTP/2.

The aim of the exercise was to get a perfect score using Go. I wasn't discussing HTTP/2 in general. I was referencing the Go standard library implementation.

As I say, if you still think it's not right, please let me know.

Re:Achieving a Perfect SSL Labs Score with Go by achernya on Sunday May 22, 2016 @06:47PM (#11750619)
The specific detail that you've noticed in the Go implementation has to do with RFC 7540, Section 9.2.2 (https://tools.ietf.org/html/rfc7540#section-9.2.2) which requires TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 for TLS 1.2 only. Deployments of the future TLS 1.3 are free to not support this cipher, if I am reading the RFC correctly.

That is to say, you're correct that server configured for a 100% on SSLLabs will not support HTTP/2, but I agree with davidben that SSLLabs is incorrect here for incetivising AES-256, particularly in CBC mode, for the 100% score.

Re:Achieving a Perfect SSL Labs Score with Go by Spooky23 on Sunday May 22, 2016 @08:28AM (#11748328)
128bit or the requirement to exceed it for an A+?

There's no reason that 128 but cannot be used today, particularly for transport encryption.

Re:Achieving a Perfect SSL Labs Score with Go by darkhorn on Sunday May 22, 2016 @08:36AM (#11748364)
Because it was developed for Google and they what they care is speed not security or client side certificates.
Re:Achieving a Perfect SSL Labs Score with Go by FiloSottile on Sunday May 22, 2016 @09:10AM (#11748456)
This is so outlandish that I'd love to be able to dismiss you as a troll, but it's also so wrong it makes me angry, so I want to make sure no one nods reading your comment.

Google has SINGLEHANDEDLY improved the security of the TLS ecosystem by light-years:

* They ship the most modern client (Chrome), and started the auto-update trend.

* They forced the move from SHA1 and RC4 by leveraging that client power (with the degraded UI messages) even if it costed them popularity.

* They are leading CT, the single next best thing to happen to the ecosystem.

* They are keeping CAs accountable like no one did before.

* They have amazing people working on security UX and even shared the messages they use for anyone else to use.

* Finally, Chrome is by far the most secure browser you can use thanks to its state-of-the-art sandbox.

And take your client side certificates grudge somewhere else.