Comparison of SSL Labs TLS Scores with Different Go Versions
aoeus.com
aoeus.com
I certainly do not mean this is an unfair question to ask; quite the contrary! (It has been said "defaults matter", but I'm really coming around to the idea that even that understates the truth. Options almost don't matter. They do. But just barely.) More people should ask this of more code. I just want to make sure non-Go programmers understand what is being said here, that this is the default, not the top capability of the built-in Go TLS stack of those versions.
The right option name for this is probably "Protect against HTTPS-stripping".
Not sure when or frankly even if it will go public, but I hope it will. Still have a lot of work to do on it before it's worth anything.
Edit: Also, thank you for the name suggestion. One of the other things I've noticed is that a lot of web security is... well... let's say, named in a way that does not always make it clear exactly what it means. I'm trying to make this stuff more clear in the naming too.
To score A+ you must score A and additionally set HSTS headers with long duration (I use 2 years, haven't tried with less). For example, with Nginx you use something like:
add_header Strict-Transport-Security "max-age=63113904;";Just plugging it because it constantly outperforms my expectations and PolarSSL (now mbed owned by Arm), has avoided many of the recent openssl issues making my life less worrisome, but the dev doesn't really advertise or push it and relies on word of mouth more than anything.
It's worth checking out.
Go has one of the best TLS stacks in the world, and I expect the distinction to become starker in the future; in a few years, barring something unexpected from something like BoringSSL, it may end up being unquestioned best TLS stack.
Go suffers a bit from weak random numbers though (crypto/rand Read() output), says dieharder at least: http://nopaste.narf.at/show/31060/
I'm not sure how severe that is...
Do you have any proof to support this claim?
Which means they set long HSTS by default, which will bite you quite badly if you're not ready yet for an irreversible HTTPS rollout. But yeah, A+ looks awesome on comparison tables, doesn't it?
See https://www.hiawatha-webserver.org/forum/topic/2063/#10728
http.ListenAndServeTLS(":443", "cert.pem", "key.pem", nil))
A full HTTP and TLS stack ready to start dispatching requests to your callbacks. I know there are other languages that can do the same, but I still think it's impressive. I've written just a few thousand lines of Go and while I'm pretty sure I'm not really "doing it right" I was able to port some decent complexity C# and very easily had all cores processing data at a higher overall rate with the Go code. High level libraries like this, and managed memory makes it almost feel like a scripting language, but with all the advantages of a compiler.Operational question... If you're terminating client-side TLS like this, then does that mean either it's a single server or you have L4 (or lower) load balancing in front of it? I assume it's more common to have haproxy or nginx or something like that in front terminating TLS, with the API servers sitting behind.
[1] https://github.com/drwetter/testssl.sh
It only depends on OpenSSL and bash. I find it very useful for reviewing our systems before they go live.
I have to catchup on the latest TLS stuff every few months.
So what is the default preferred cipher suite string for Go 1.6 ? I worked out my own a couple years ago and it still gets an A rating on SSL Labs