One of the things that bothers me is the way TLS/SSL is used with PKI (public key infrastructure). It implicitly drops a man in the middle (Cert Authorities) into every connection.
Not only do you have to trust the CA that signed the cert, you're trusting hundreds of CAs in your browser's root cert list. If any one of them is compromised, then every website on the whole Internet is vulnerable to MITM. Few if anyone ever checks the CA – AND there's no way for me to know that MyBank.com didn't switch CA's. A CA can generate a cert for any domain even if the domain owner didn't want them to. Diginotar CA was breeched and forged certs for google.com, even though that wasn't the CA Google uses, your browser would show a big happy green "secure" bar/logo when browsing via the compromised cert.
Then there's verisign, which used to be the only CA, and which is known to be on the take from the NSA. So, there was never any security in SSL in the first place, and there still isn't.
What could be nice is if we could use plain old symmetric stream ciphers for TLS/SSL.
If only there were some protocol to ask the user for a username / password, and then key the stream ciphers with that… OH WAIT, HTTP Auth exists.
DH key exchange is only useful to exchange a shared secret. Once we've established a shared secret (and of course that's exactly what we do via account/passwords) then we can just use the password to key the stream cipher on both ends, and start encrypting without needing DH key exchange (after account creation) and since the window is so small we don't need to trust a corrupt CA system either. A MITM would have to be persistently MITM-ing every connection or your password would stop working.
HTTP Auth (digest) goes something like this:
User sends request to connect + user name.
Server sends a nonce (random string).
User HMACs (hashes) the nonce with their passphrase.
User sends resulting hash to server as a proof of knowledge.
Server HMACs the nonce with the passphrase and compares this to the one the user sent.
If they match then the server knows that the user knows the password.
Now, what they could do instead is exchange nonce values (possibly signed via each the other's private keys). HMAC those nonces with the password (the shared secret).
Then just take the resulting HMAC value and key a stream cipher with it.
A user's browser would check to see if the user has established a connection with the server and pop up the HTTP Auth user/pass dialog. User enters that and THEN the connection is made (no phishable login page cluttering up our sites). Similarly, account creation would occur via dialog outside the web page (which is the only time PKI need be used).
The browser could cache the user/pass if desired, just like they already can.
A MITM would see the nonces be exchanged and then immediatly the connection is encrypted. They can't modify the nonces or the encrypted tunnel will fail. A CA or MITM doesn't know the password so they can't spoof either end.
Of course, "privacy" nutjobs will balk at sending one's user ID in the clear – not realizing every packet has your return IP address, which reveals your location and the ISP sells such data regularly to marketing firms anyway. There's Tor, but only shazbots think it's fucked too:
http://thestack.com/chakravarty-tor-traffic-analysis-141114
Why the fuck don't we have the option to key HTTPS via HTTP Auth? Because that would be ACTUALLY SECURE. Think about it: You could go to your bank in person, setup a password without DH bullshit or CA MITM, and just use plain old pre-shared key (or share a passkey with your friend in person), and have maximum security for important stuff without a stupid as fuck China/Russia/USA spy-agency-friendly CA MITM everywhere. You could opt out of the CA system AND STILL BE SECURE. That we don't have this simple capability in browsers after decades of development is proof elites want to prevent such a thing big time (that or all browser devs are batshit stupid – in which case we shouldn't trust them with our security at all anyway).
TL;DR: Why no plain-Jane symmetric stream ciphers for web security? Because: Dystopia.