Merchants want you to believe that HTTPS equals secure. I keep saying that it doesn’t. Here is another story for my side of the argument.
First, a little background. If a web site want to support HTTPS (also known as SSL or TLS), they need to have a certificate. The certificate is used as part of the process of generating an encryption key for each session. The owner of the web site buys (or gets one for free) a certificate and depending on the type of certificate, the buyer has to prove, more or less, that they own the domain that they want a certificate for.
Why do they have to prove they own the domain? Because if they didn’t have to prove they own it, anyone who wanted to could buy a certificate and install it and launch a bogus web site that pretends to be Facebook or Amazon or whoever.
Using the standard methods that certificates use, any certificate authority – and there are hundreds of them – can issue a certificate for your web site. As long as that certificate authority is trusted by your browser, you will have no clue that the web site that you think is owned by Amazon or Google or whoever is not legit. You will see the padlock and everything.
To make things worse, under these circumstances, an attacker can even create a bogus Google.Com or Amazon.Com, fool your browser into going to that site (using DNS spoofing or other techniques) and you now think you are at the real Google or Amazon.
Under the way things normally work with certificates, any certificate authority anywhere in the world can issue a certificate for your domain.
On some operating systems/browsers, you can disable which of the hundreds of certificate authorities you want to trust. That doesn’t solve the problem of a hacker imitating your web site and someone believing it, but it does solve the problem of you trusting sites certified by authorities in say China.
Curiously, it is pretty easy to disable, say, a certificate authority in China on Android but it is literally impossible for you to do this on an iPhone. This is because Apple’s philosophy is that Apple knows best. For details on how to do this (it is pretty geeky) on different environments, check the link below.
SO, now what is the new problem. The problem is that a Chinese certificate authority, WoSign, had a bug in their software that allowed people to get a certificate for a domain, say Google, if they could show that they could control a sub-domain, say mitch.google.com. A researcher tested this by using this bug to get a certificate for the popular web site GitHub and also for a Florida University. When they explained the problem to WoSign, they did revoke the certificate to GitHub, but did not revoke the one to the university. This is leading some people to speculate that they do not know what certificates they issued.
But remember that your browser trusts WoSign, so even though they are issuing bogus security certificates, your browser will trust them. If you are not using an iPhone, at least if you are motivated, you can decide that YOU are not going to trust WoSign, but I doubt very many people will go to that trouble.
Remember I said that WoSign revoked the bogus certificate to GitHub. Well that is nice, but it turns out, for a variety of reasons, certificate revocation doesn’t actually work. So while that GitHub certificate is revoked in theory, it may still work in practice.
While I don’t have a better answer for HTTPS, I can say with some confidence it is seriously broken. There are some possibilities like DNSSEC+DANE or certificate pinning, but very few web sites, in the grand scheme of things, have the ability to do this.
Which is why I keep saying that SSL is broken. We are giving people the delusion that things are secure, when they are not really very secure.
We really ought to do something about this before some hacker comes up with a really creative way to steal a lot of money.
Information for this post came from The Hacker News.
Information on how to remove the trust for certain certificate authorities can be found at CertSimple’s blog.