Use SSL. Make sure the cert is valid. And hope nobody comes up with yet-another SSL vuln. edit And hope that they haven't gotten a new valid cert by hijacking mail for the domain, too. edit Or, hard-code the domains and IPs in your hosts file.
It's easy to obtain a free but legal CA if you have control of a DNS. Only very few users would notice the change via the hash. Even your browser's SSL detection wouldn't yell anything.
... which is something i hate about most browsers. why don't they cache the cert indefinitely and wave a big red flag any time it changes at all? the occasional false alarm due to renewal would be a fair cost for the gain of more notice to unauthorized changes.
When a browser pops up too many false-alarm warnings like that, users start to regard the browser as broken.
And given that commercial certs change fairly frequently (they expire every year or two, in most cases), you would have a lot of false alarms for each actual DNS hijacking. The vast majority of the times users saw such a message would be for the wrong reasons, and they'd be well-trained to ignore it long by the time an actual hijack attempt caused it to display.
Also, consider the case of multiple HTTPS servers, each with its own valid server certificate, in round-robin configuration, serving the same domain. Each time a user went from one server to another, the cert would change (but still be valid). They'd get errors all the time -- and my understanding is that this setup (separate certs and private keys for each server, rather than copying the same cert and private key across multiple machines) is considered best practice.
The real problem is that CA-based security relies on the CAs to not hand out certificates stupidly. Yet that's exactly what they do, when they use DNS (in the form of MX records, by sending email) to verify ownership of a site and issue a valid certificate.
You're correct that browser developers have the power here, but their power lies in threatening to drop shady CAs from the trusted root list (which would put a CA instantly out of business -- if your certs cause errors in a major browser, you're dead meat as a CA), not building in more warnings that will just give users bad habits.
IMO, any CA that is doing domain "verification" via DNS records (rather than going through WHOIS or, better yet, the domain's registrar and contacting the domain's owner of record) ought to be dumped from the trusted root list.
There needs to be a much stricter auditing and enforcement/removal system for bad and sloppy, lazy CAs. They are supposed to be the keystone of X.509 PKI, but in reality strike me as being closer to its Achilles Heel.
Normal Internet users know shit about SSL and stuff. Perhaps they would call the broadband company when saw that.
I always think browsers should be developed in two versions and can be switched by one key, one like MSN Explorer, one for advanced geeks with a console.
True story: the ISP I use was acquired by Tiscali and shortly afterwards their cert expired. I called them up to tell them and they told me to turn my anti-virus software off and try again.
just to clarify: they could obtain a new valid cert by redirecting the MX to their own mail server and requesting a new one via e-mail, right? or is there another way?