Unfortunately, storing the crypted version of the password on the server means that the client has to send the password to the server in plaintext. Either you hide that with SSL, or you accept the fact that you have no real security.
If you try to protect the password in transit by using something like HTTP digest authentication, then you have to store the password (or some equivalent secret information) in plaintext on the server. Which is the bigger vulnerability?
And then there's the problem of forgotten passwords. If I forget mine, perlmonks will mail it to me. Not too secure, but handy. If you store crypted passwords, the only option is to reset them to some known value when they are forgotten. How do you know if the person requesting a reset of my password is me, or a bad guy?