most of the time when a browser warns you that a certificate is bad there's nothing wrong
I've never had a false-positive browser warning. I assume you're complaining about Firefox's and Chrome's treatment of self-signed certificates, which is completely appropriate. Self-signed certificates should always be rejected, unless the user has manually added them to the keystore.Still, if protection from completely passive eavesdropping is all you care about, you can use anonymous Diffie-Hellman to negotiate an ephemeral key. The protocol supports it. Heck a lot of home-grown client software doesn't even check the name on the cert and ends up with effectively just that by accident.
Feel free to add your own self-signed exceptions. I find it useful myself.
But that's not what HTTPS is and it's not how web browsers work. By definition, the lock icon in the user's browser means that the server (as displayed in the URL) has been authenticated to the user.
Can you elaborate on this? I'm genuinly curious.
SSL is possible and commonly done correctly. It is not a joke security wise. (If it is a security joke, show me something that isn't a security joke).
Unless you are a government (or have similar resources), you cannot hack SSL.
SSL would work a lot better if it worked more like SSH, where you could check to see if you have the right fingerprint at the beginning. And of course you can use it like this, but your browser tells you horrible things will happen. Alternately, a true web of trust with something more like the notaries might be useful.
But when it comes right down to it, any scheme of communication that relies on a variety of third parties for security isn't going to work, because you never know when one or more trusted parties are the eavesdropper.
Sure, the crypto works fine, but in practice good crypto often just lulls people into a false sense of security. "The browser shows https" is really a pretty weak indicator that no MITM is happening. I especially say this in contrast to something like an SSH handshake, which is a pretty strong indicator that no MITM is happening, especially if you validate your keys.
And the 95% of the population who don't know what a key fingerprint are, the people who are most likely to click on random things online, those people will just blindly accept that from every site on the web and then they can get MitM'ed easily by people in Starbucks. Right now you can't do that with HTTPS.