So this video explains how https works. What I don’t get is what if a hacker in the middle pretended to be the server and provided me with the box and the public key. wouldn’t he be able to decrypt the message with his private key? I’m not a tech expert, but just curious and trying to learn.
It is possible and it has been done.
You need to get your “hacker” key signed/certified by an official CA. Which is not that difficult with some of them because they are doing it for money.
You don’t really ‘need to’ in a world where a good proportion of people will happily click ‘continue anyway’ when they get any sort of certificate error
Thats why we have HSTS and HSTS preloading, so the browser refuses to allow this (and disabling it is usually alot deeper to find than a simple button to “continue anyways”)
In Chromium browsers you can simply type “thisisunsafe” to bypass even HSTS failures.
people will happily click ‘continue anyway’
Not possible without a certificate. There will be no TLS connection, only an error message. No ‘click continue’.
It is trivial for an attacker to make self-signed TLS certs, and you can absolutely just click “continue” on sites that use them when you get a warning from the browser
What browser is that?
Firefox, Chrome, Edge, will all warn you about self-signed certs or cert mismatches but allow you to continue. You’re completely correct that SSL/TLS needs a certificate, but it doesn’t need to be CA issued or in any way legitimate for the encrypted tunnel to be established
I am personally using firefox and referencing my own servers that use their own self-signed TLS certs that I have not bothered to load onto my pc because they aren’t public, but chromium-based browsers aren’t some outlier here
Your own servers probably also dont have HSTS enabled, or clicking continue will be disabled (if not overwritten in your browser-config)
Reading the HSTS spec, it doesn’t work on first connection, and while most people are using websites they access more than once, that notably isn’t all web use.
As others have mentioned, a trusted 3rd party signs the correct key so your browser can check the key itself.
However, it should also be noted that your browser must have a list of trusted 3rd parties and their certificates used for signing in order to perform this check. It’s entirely possible to modify this list yourself. Some examples include:
- executing your own MITM style “*attack” in order to intercept and analyze local https traffic
- corporate network inspection and monitoring, where a gateway does the above for all devices on the network which have a CA cert pre-installed through some policy
So while it’s possible for trusted 3rd parties to issue valid certificates to bad actors, it’s also possible to add anyone (you, your employer, or some bad actors) to the trusted parties list.
Add Norton to that list. They also perform their own MITM attack on your pc to ensure your certificates are “safe”…
So there are two things that certificates are for. You already understand the first one, which is the cryptography itself. You can use them to encrypt your traffic so that information sent over the connection is not in plain text.
The second thing certificates do, is the answer to your dilemma. Identification. For your browser to trust a website’s certificate, the certificate has to be valid for that website. What makes a certificate valid? The certificate has to have been signed by a trusted Certificate Authority, and the name on the certificate must match the website you’re visiting. If you were to ask “What makes a certificate authority trusted?” The answer is that your web browser and/or operating system come preloaded with certificates for trusted certificate authorities. These special certificates were used to sign the certificate of the website you’re visiting, which is another thing your browser checks for. A malicious third party can’t (easily) obtain a valid certificate/key pair for a domain that they don’t own. If your browser was presented with a fake certificate from the malicious third party, it would not connect and would warn you that your connection isn’t secure and would explain why.
Now if more specifically, you’re wondering that if a malicious third party takes any given website’s public certificate, can it use that to decrypt your session? After all, that public cert is signed and trusted. The answer to that, is that when a certificate is created, so too is a private key file created. This private key is never presented to the public, and it’s the only thing that can decrypt sessions that were encrypted by its paired public certificate. So that third party could install that certificate on a web server theoretically, but they wouldn’t actually be able to decrypt anything because they don’t have the private key for the legitimate certificate.
So in order for a man in the middle attack like this to work, they’d have to obtain not only a legit websites public certificate, but also the corresponding private key. OR, the third party would need to get access to your PC, and install its own certificate authority signing cert, so that it’s fake, self signed certificates are trusted by your browser. Both of these are possible, but at that point you’re not talking about an unknown man in the middle, the man would have to compromise one of the two ends.
Nevermind hackers. Look up “corporation in the middle” attacks, which is a prime example of subverting secure channels at scale.
If you don’t own the hardware, nothing you do on it is truly private. Ditto if someone else has admin access to your hardware (eg BYOD scenarios) . Inserting a root certificate into the OS is trivial in both cases.
An additionap note on what a certificate is, to supplement everyone here who’ve desceibe howbthat’s the missing piece:
A certificate’s first main purpose is being the vehicle vy which the public key is distributed, but additionally it contains information ABOUT the owner. Then the whole thing is digitally signed with the private key (and also a trusted CA’s private key), so that a receiver can validate the authenticity of the cert with the public key.
The “info” in the cert can theoretically be anything, but the most important one is the domain. Your browser knows that visiting google.com is secure because it checks the cert it gets from google.com to see if it states that it owns the google.com domain, and then we trust the root CAs around the world to make clients prove they own that domain, before issung a cert for it.
What if a hacker were to obtain the Master Key Certificate to the entire Internet? How much damage could be caused by that?
All the damage.
Which is why that cert (and its private key) are kept offline in a secure facility that takes multiple authorized people to access.
https://www.cloudflare.com/dns/dnssec/root-signing-ceremony/