wowana.me
website source; use git clone git://wowana.me/wowana.me.git to clone this repository.
tls-certificates.md (6228B)
1 # TLS certificates 2 <!--[time 201712051236.50]--> 3 4 [two blog posts in one week, but this was on my mind today so I figured 5 I'd publish it now] 6 7 another thing I wrote back in 2016: 8 9 > I use self-signed certificates for all TLS-enabled servers I set up. I 10 > know there are freely-available certificates being handed out by 11 > authorities, and I know that Let's Encrypt exists. I do not refrain 12 > from requesting a CA-signed certificate because I am too lazy to do 13 > so; if I wanted, I would ready a CSR right away and get that taken 14 > care of. There is only one key reason I abstain from getting my 15 > certificate signed by a root signing authority: they are too 16 > centralised. 17 > 18 > Let's take it from the top: when you install a new operating system, 19 > be it Windows or Linux or Mac or a mobile device firmware, the system 20 > will most likely come preloaded with root certificate trusts. Who 21 > decides to trust these? You haven't hand-picked them, and most people 22 > don't even bother looking at the list of authorities their system 23 > trusts. Not to mention, most people don't even recognise half the 24 > companies and organisations that provide certificates. So, you're at 25 > the whim of others – all you can do is hope they have your best 26 > interests at heart and that they aren't screwing you over, 27 > accidentally or on purpose. In reality, quite a few authorities are 28 > lazy with checking if a CSR is valid or just a spoof attempt. As long 29 > as they profit, they don't really have your security at heart. 30 > 31 > And of course, high-profile companies can and do get hacked. This 32 > holds true for certificate authorities as well. And the more widely 33 > used a CA is, the more susceptible to attack it will be. Also, while 34 > this does not apply to everyone, there are workplace, school, and 35 > governmental filters that are put in place to censor certain sites 36 > deemed to be unacceptable for access, as well as to detect obscene or 37 > unsafe (malware) content. In order for a filter to be effective for 38 > these purposes, it must intercept all your traffic; HTTP is 39 > straightforward, but HTTPS requires the firewall to strip, analyse, 40 > and re-encrypt the content that passes between you and the webserver. 41 > In doing so, it relies on each computer in the network having its own 42 > certificate installed and accepted. End users may not be fully aware 43 > that this is going on, and they may believe they are completely safe 44 > because their browser is not warning them at all. This may be 45 > acceptable if everyone understands what this filter does and if the 46 > filter is configured correctly, but that isn't always the case. My 47 > high school's filter made no distinction between valid and invalid 48 > certificates, so I could unknowingly be put at risk for accessing an 49 > unsafe site that appears to my browser to be safe. Plus, if people 50 > wanted to use their own devices on the school network, they were 51 > required to install the root certificate even though they were not 52 > made aware of the consequences this would have. 53 > 54 > So that's one issue: most people don't even explicitly trust the 55 > certificates installed on their system. Even if you are aware of the 56 > root certificates you trust, you cannot fully trust that they will 57 > remain uncompromised and trustworthy in the future. Let's Encrypt was 58 > proposed as a solution to the skimpy checks most authorities put their 59 > customers through; Let's Encrypt uses a cryptographic proof to verify 60 > that you are the owner of your server. While this is a great step in 61 > the right direction, it does not change the fact that Let's Encrypt is 62 > still a centralised certificate authority, and thus is fallible to the 63 > same issues as every other authority. 64 > 65 > In contrast to the common SSL/TLS methods of verification, SSH 66 > actively encourages you to accept key fingerprints on a per-server 67 > basis. There is no metadata attached to this (e.g. <q>this key is 68 > valid on domain.xyz and www.domain.xyz</q>) that can be changed to 69 > fool you into accepting the certificate – there's just an arbitrary 70 > fingerprint that tells the complete truth about who the server is, 71 > straight to the point and no bullshit. PGP operates in much the same 72 > way, except that there is certain metadata on keys that describe the 73 > owner and their E-mail address. With both of these, the key owner can 74 > disclose the fingerprint via whatever channels he deems secure, 75 > meaning that an adversary has a harder time compromising this 76 > information. TLS certificates have fingerprints as well, but most 77 > client software obscures this in favour of a less helpful <q>this may 78 > be insecure</q> warning. 79 > 80 > A compromise would be to provide a simple-to-use and 81 > simple-to-understand web of trust system that combines the benefit of 82 > <q>lazy</q> and indirect trusting (<q>I trust my friend's judgment, 83 > therefore I would like to accept all the certificates that he 84 > does</q>) with the benefit of decentralisation (points of weakness are 85 > smaller and more dispersed, making damage caused by compromise much 86 > more tolerable than if a large CA was compromised) and direct trusting 87 > (<q>I know that this site is what it says it is</q>, similar to the 88 > <q>add exception</q> function already available in most client 89 > software). Right now we do not have the luxury of a well-thought trust 90 > system that is straightforward, unobtrusive, and secure. So for now, I 91 > will opt only for the <q>secure</q> option since it is the most 92 > important in this scenario. After all, if you want <q>straightforward 93 > and unobtrusive</q> without <q>secure</q>, why don't you just use 94 > HTTP? 95 96 to put my money where my mouth was, I did create my own CA to use with 97 all my websites, and that worked relatively well for about a year. but 98 lately I have found that some XMPP servers will not federate with 99 servers that have untrusted certificates, so it was time for me to make 100 a decision: compatibility or security. I bit the bullet and now I'm 101 using Let's Encrypt certificates on all my websites and servers, forced 102 TLS on websites/E-mail/XMPP (and soon IRC), and overall I guess it's a 103 good move even though I'm upset with the CA system. hopefully one day we 104 have a better system in place to address the flaws of the CA system.