2009-06-17 14 views
0

ユーザー名とパスワードでユーザーを認証する必要のあるWebサイトがあります。 SSLを使用したいと思いますが、私はSSL証明書を持っていません。しかし、私は大丈夫だと思う何かをする。これはパスワードを受け入れることができますか?

私のサイトは主にAJAXベースで、には JavaScriptが必要です。それ以外の場合は動作しません。

ログインしようとすると、AJAXを使用してデータベースに照会して、そのユーザー名の塩を探します。見つからない場合はランダムな塩が返されます名前かどうか)。その後、JavaScriptのMD5関数を使用して、クライアント側でパスワードを4K回ハッシュし(LinuxがMD5を使用してパスワードをハッシュするように)、ハッシュをサーバーにプレーンテキストで渡します。このハッシュは、さらにハッシュされ、データベース内の内容でチェックされます。

これは安全ですか?そうでない場合は、ほとんどの社内のWebサイトのSSL証明書を現金化する必要はありません。それが安全ではありません

+2

なぜSSL証明書を作成しないのですか? VeriSignによって署名されているのはおそらく高価ですが、問題があるはずはありません。 – balpha

+0

私はあなたが署名されたSSLなしですべてのあなたの訪問者を脅かすFirefoxを恐れることはできないことを知りませんでしたか? – Malfist

+2

だから、あなたのユーザーに誤った安全感を与えようとしているのですか? – Shog9

答えて

15

号。中間者の人は、ハッシュ値をスヌープし、後でそれをあなたに提示することができます。誤って自分自身を認証します。誰かを認証するために

、あなたは彼らが秘密を知っていることを証明する必要があります。暗号化されていないチャンネルを通過したものは秘密ではありません。

SSLを使用。 free that are accepted by Firefox,の証明書を取得することができ、IEユーザーに信頼できるルートに新しいCAを追加するよう指示することができます。 Certificates that are accepted by all browsersは安いです、私は年間30ドルだと思います。

+0

解決策は何でしょうか、ノンスですか? – Malfist

+4

あなたはすべてのリクエストでパスワードとMACを使って解決策を考え出すことができますが、それはあなたが知らないほどの穴に満ちています。また、証明書を購入するよりも導入する方がはるかに高価になります。 – erickson

2

あなたは自由のための独自のSSL証明書を作ることができ、それは一般ユーザーから信頼されないだろうが、あなたはそれを信頼することができます。

JavaScriptと暗号化されていないトランスポート層を使用すると、パスワード/ユーザー名のハッシュ方法の正確な青写真を与えるだけでなく、あなたがサーバーに送信するハッシュを取得する可能性があります。

本当にそのアプリケーションのセキュリティがどれほど重要かによって異なります。非常に重要な場合は、Ajaxをドロップし、SSL証明書を取得してHTTPSレイヤーを使用します。

+0

内部サイトの場合は、自己署名することで自分自身のCAを内部的にセットアップし、必要なすべての証明書を発行することができます。すべてのクライアントマシンで信頼できるルート証明書をインストールするだけで済みます。その後に発行される証明書は、それらのクライアントによって信頼されます。 これを外部サイトにする必要がある場合は、余分なお金を使って実際の証明書を取得してください。 – Eclipse

3

最良のオプションは以下のとおりです。

  • StartCom(無料)が署名した証明書を使用してください。 をネイティブにでサポートしています。 IEを持つユーザーは、信頼できるルートのリストにCAを追加できます。
  • 自己署名入りの証明書を使用して、ユーザーに配布して、ブラウザに追加します。

他の人が言及しているように、あなたのソリューションは、セキュリティで保護されていません。パスワードを平文でサーバーに送信するよりも改善はありません。主な理由は次のとおりです。

  • クライアントから平文で送信され、直接認証に使用されるものは、中間者や盗聴攻撃の影響を受けます。提案された解決策では、ハッシュされたパスワードがわかっている場合はログインできます。パスワードをハッシュとして送信することで違いはありません。
  • 認証後も、データは平文で送信されるため、簡単に盗聴できます。
  • MD5 is full of holes
+1

MD5に穴がいっぱいですか?どのように説明できますか? – Malfist

+1

@Malfist:私の主張へのリンクを追加しました。この文書では、MD5エクスプロイトを使用した不正なCAの作成方法を説明しています。 – molf

1

あなたのソリューションは、リプレイ攻撃に開いています。ブラウザとWebサーバーの間で直接Digest Authentication(RFC 2617)を試してください。

関連する問題