However, you'll get no argument from me if you constrain your argument about dismal mis-design to browser UI/UX. The browser UX design for TLS security hasn't meaningfully changed since Netscape.
However, you'll get no argument from me if you constrain your argument about dismal mis-design to browser UI/UX. The browser UX design for TLS security hasn't meaningfully changed since Netscape.
I agree the UI needs to be properly worked out so that eg a bank can't be downgraded to an unauthenticated certificate.
CA-signed: Green lockpad
Self-signed: Yellow lockpad, with question mark superimposed over it
Regular HTTP: Orange, no lockpad (insecure)
Invalid or revoked cert: Red, "stay away" displayed within <blink> tags.
The current UI that most browsers present implies that self-signed certificates are worse ("scarier") than regular HTTP, which is not true.
No lock would suffice for unauthenticated https; those that find the distinction meaningful can investigate the URL. But then you still risk someone bookmarking https://example.com and suffering a downgrade attack from not paying attention to color changes.
The best way forward is probably the creation of a new protocol designator (httpz or something) that is SSL using the SSH key model. But there's no impetus to do this as it's easy enough to pay the CA tax and be on your way with unquestioned "full security".
Then warn the user if the certificate ever changes.
HSTS already allows self-signed certificates, if the certificated is validated out-of-band.
I think the whole UI aspect of web transport security needs re-thinking.
The criteria is not self-signed, it's trusted/authenticated or not. Most self-signed certs are not trusted, and solving that solves the CA problem. But if a self-signed cert is trusted then browsers happily display the secure UI without any errors.
User requests an HTTPS resource, which means the connection must be secure. The UA is unable to establish a secure connection, just as if a MITM attack was underway.
So, now, the user has just entered https://facebook.com. Currently, when this secure connection fails, the browser warns the user in no uncertain terms.
Your suggestion would be to what, exactly? Put a small, unobtrusive dot somewhere in the UI indicating "yeah, I know you asked for HTTPS, and I ignored that, but I didn't wanna really bother you"?
If you're responsible for user's safety, which may depend on the UA treating HTTPS as it should, then you've just betrayed your user.
And at any rate, by not aborting while verifying the certificate, you're already leaking potentially personal information: The URL, cookies, etc. So if you treat the user's data with respect, you don't go sending that insecurely after the user requested HTTPS.
And if you can't transmit the request, because you need to warn the user... you end up with a UI like browsers have.
In response to your previous post, the idea is that the user has to take some responsibility for their security (we can't stop them from entering their bank credentials into a friendly form on www.phish.com either), through a UI that makes it clear that the identity of the server is unauthenticated.