It is a funny coincidence that the week I’m at LISA ‘13 I’m doing so much work on my own servers. It might be because I’m not spending my time in front of a computer at work like I usually do. It might be because I got unlucky and my SSL certificates failed at the wrong time.
Again, Johann pointed me on Twitter to the SSL Labs page for my blog, that noted how only a bunch of OS/Software combination fails for no SNI — but that made me notice that the website said that TLSv1.1 and TLSv1.2 were not enabled, although I was ready to swear I configured it to enable all TLS. And a quick check in my Puppet master shows that my idea was right:
SSLProtocol TLSv1.2 TLSv1.1 TLSv1
So what is going on? Well, the Apache logs don’t tell you anything about what’s going on, so I decided to try empirically and move the order:
SSLProtocol TLSv1 TLSv1.1 TLSv1.2
This worked with TLS 1.2 but not with 1.0 — which is pretty bad as most browsers do not support 1.2, only the newest ones do. Okay so what’s going on? Well, Turns out that this, taken from the Apache documentation, works:
SSLProtocol All -SSLv2 -SSLv3
And that’s what I have in my configuration right now; this also means it works very very well if a new version of TLS becomes supported, it will added. So, listen to my advice and do that!
A side note: turns out that IE6 on XP not only does not support SNI, but also it does not support any TLS protocol version (just SSLv3) which means it hasn’t been able to reach my blog for about an year already.
So I decided to look at the Apache source code, and it turns out that their documentation does not make it clear: unless you add a +
in front of the protocol version, the last entry is the catch-all. And there is no warning when that happens. There is no example for not using All
in the docs for Apache 2.2 — it’s actually even worse with the documentation for Apache 2.4 as the example now only enables TLSv1 and that’s it.
I’ll try to send a patch for either their documentation or the code to issue a warning when that setting is misused. In the mean time, please keep this in mind.
P.S.: seems like Readability has a problem with SNI and is now failing to fetch my articles. I’ve already contacted them about this and hopefully they’ll figure out how to fix it soon.
I got worried when I saw your tweet, but it turns out I had it set to SSLProtocol +TLSv1.2 +TLSv1.1 +TLSv1 ..strongest to weakest in this case. I’ll see if that’s proper usage, and if not turn it around and remove the +’s as you advised.I can also advise https://www.ssllabs.com/ssl… to check how the configuration is actively working out.
SSL Labs is what I linked above — I used it before, I just forgot to test it recently so I did not notice the screwup.Setting `SSLProtocol +TLSv1.2 +TLSv1.1` is okay — the `+` means that it’ll logically or that protocol to the others, which is what you want. The order is not really important, as it’s just a flagset that it will apply afterwards anyway. I still suggest to go for `All -SSLv2 -SSLv3` — the reason is that if TLSv1.3 comes out next month you probably want that updated sooner rather than later.