9

I use both Linux and Windows at work on a large enterprise LAN. The majority of the network configuration is out of my reach.

Certain SaaS applications that are hosted locally on the enterprise LAN, use self-signed SSL certificates. I am required to log into these on a regular basis.

Is there any sure way of knowing that the servers I'm logging into are the legitimate ones other than the obvious change of identity, supposing that it's possible a fellow employee might attempt a MitM attack?

synack
  • 93
  • 1
  • 6

1 Answers1

15

The point of the server certificate is so that the client can make sure that it knows the correct, genuine public key for the server. Certificates signed by a CA are one way to achieve that (with the unspoken assumption that we trust the CA for signing only certificates with correct information in it, and not goofing it up). A self-signed certificate cannot convey such a guarantee.

However, in some cases, you can replace the certificate model with direct trust. Namely, you inform your Web browser that for a given, specific certificate can be trusted. Firefox describes that as a "security exception". This does not completely solves the issue, but at least it reduces it to the problem of making sure once that you are seeing the correct server certificate. Afterwards, your browser will remember that "exception" and won't bug you with scary warnings -- but it will glower like a drunk christmas tree if somebody tries to feed you another, distinct self-signed certificate.

For the initial registration, when you connect the first time to the server, have your browser display the "SHA-1 fingerprint" or "thumbprint". How it is named changes with the browser, but this is a SHA-1 hash value computed over the complete certificate, and expressed as 40 hexadecimal characters. Then, phone the sysadmin of the intended server and have him spell out the thumbprint of his certificate: if they match, then you know that your browser is seeing the right certificate, and can register it as a locally known security exception.

(The process described above is exactly what is done for SSH, and it works for SSL too.)

How to install a "security exception" depends on the browser and the operating system, and I am way too lazy to lookup and describe all the possible combinations. But, at least, you have the concept.

Thomas Pornin
  • 322,884
  • 58
  • 787
  • 955
  • 1
    Thanks for the background theory and explanation. Not sure how feasible it is for me to contact every webmaster and DBA to verify this but I understand the point you are trying to make. Hopefully the fingerprint(s) don't change too often. – synack Jul 07 '13 at 23:08
  • 1
    @synack Unless wishing to make a point to the powers that be, I can imagine contacting the webmasters to ask for certificate verification being unpopular, particularly if other end users start doing the same too. While it may not achieve anything, *formally* contacting relevant persons in the organisation to raise your concerns about the security implications and end user time wasted due to using self signed certificates rather than those from a trusted CA would be wise. – Nick Jul 08 '13 at 16:36
  • 1
    @synack - If you cannot go to this effort then do not trust self-signed certs. – Ramhound Jul 09 '13 at 15:30
  • 1
    @Ramhound it's not a question of effort, it's a limitation of feasibility. I utilize many systems in disparate locations. My working day shift is not usually the same as admins in different time zones. – synack Jul 09 '13 at 21:37