I have a problem with certificate authorities. I hate that most people have no idea what they are even though they deal with them every time they browse the web. Show of hands, does anyone understand what these dialogs are talking about?
I’m going to venture a guess that not many people raised their hands. So you’re all told to look for certain visual cues when browsing sensitive sites (banking, etc) but I’m sure no one ever told you what they mean or why they’re necessary. I’m about to tell you why it is all utterly stupid.
This all pertains to sites which deal with sensitive information, like your bank’s website, or any log in screen. The goal is to establish a unique encryption session between your computer and the server, so that eavesdroppers aren’t able to steal your valuable information as it gets sent along the line. This is accomplished by using the Secure Socket Layer (SSL) protocol. SSL uses public-key cryptography to securely establish a session (symmetric) key that is used to protect the subsequent data. This is how it works:
- Client (you and your browser) connects to a server over https:// (port 443)
- Server sends you it’s public certificate – This certificate contains the server’s public key .
- Client generates a random number, encrypts it with the server’s certificate and sends it – This number is the premaster key
- Server takes the premaster key along with some other random numbers that were exchanged and generates the session key
Now that you and the server have agreed on the same key all the data sent from this point forward will be encrypted.
So, some questions should come to mind:
Can’t someone eavesdrop on the key creation and thus obtain the session key?
No. The session key is made up of three random numbers hashed together, two of which will be available to an eavesdropper, and the third (the premaster key) will be encrypted with the server’s public key, so that only you and the server know what it is.
How can I trust the server’s certificate?
Well, each certificate is signed by a certificate authority.
What’s a certificate authority?
It’s a company that signs certificates. You see, a website will generate a public/private key pair and then send out a Certificate Signing Request (CSR) out to a CA who will take the public key and attach a digital signature to it and return it to the site. Now the website can distribute this signed certificate so it can’t be faked. When a browser receives a certificate, it verifies that the certificate has been signed by one of it’s trusted CAs
So, where do I get a trusted CA certificate?
Chances are, you already have them. Your computer, web browser, and java VM all ship with root trusted authority certificates in their respective certificate stores.
Wait, who are these CA’s again?
Here is a list that I found googling: Catsdeep FreeSSL, Comodo, Digicert, Digi-Sign, Digital Signature Trust Co., Ebizid, Enterprise SSL, GeoTrust, GlobalSign, LiteSSL, Network Solutions, Pink Roccade PKI, ProntoSSL , QualitySSL, Rapid SSL, Real digital certificates, Secure SSL, SimpleAuthority, SSL Certificate Management Site, SSL.com, Thawte Digital Certificates, The USERTRUST Network, Verisign, XRamp Security
That’s a pretty big list full of companies I’ve never heard of. Why should I trust them?
Well, they’re big companies, with a lot of money invested in this. Plus, how can you not trust them, with names like those, they must be secure!
In all seriousness, that last question is exactly the problem I have with certificate authorities. We have absolutely no reason to trust them. Worse than that fact though is that nobody understands just how much trust we are placing in these companies. We are taught as users to not be bothered with all of the magic that is going on between the browser, the ca, and the server, and to just assume that if there is a lock on the corner of your screen than you are safe and everything is good. This gives the CA a level of unaccountable authority because not only are we incapable of noticing any wrong doing on their part, we are completely ignorant of their existence! It’s a wonder scenarios like this aren’t more prevalent:
For those that don’t like to click on links, this is a security bulletin about Erroneous VeriSign-Issued Digital Certificates that attackers are using to sign invalid certificates.
The certificate authority is the main point of failure in the X509 and SSL system. I can’t for the life of me understand why any person in the field of security could conclude that giving a single company that much authority over an entire protocol is a good idea. They build these massively complicated, mathematically intense systems for protection, and then leave it open to a single entity for trust.
I wrote this post under that assumption that most users don’t know what a certificate authority is, or even vaguely what is happening during a secure connection. I feel like this illustrates a failure in the security community, much more so than in the individual user. We walk a fine line in the computer security field, constantly afraid that if we require the slightest bit of effort from a user than they are not going to use the technology. That’s all understandable, but if you go so far as to completely remove them from the process you leave them incapable of protecting themselves and fill them with a false sense of security. By not even being aware of the most essential component in SSL security, it is impossible for anyone to know what to do if there is a failure somewhere along the line. If the connection gets attacked, the protocol will rightly fail and the user will be presented with a choice; proceed anyway, or stop. How is the user supposed to make the correct decision here?
To illustrate this point, I want to see some comments. Answer this question: what do you do when you encounter a website with an invalid certificate? Do you just click ok and view the site anyway?