web-dev-qa-db-ja.com

TLSクライアント証明書の代わりにHTTP基本認証

以下の答えは this 質問からのものです。

受賞した答えは、実際にはまったく問題に対処していません。データ転送のコンテキストでSSLについてのみ言及しており、実際には認証については触れていません。

安全に認証することを本当に求めていますREST APIクライアント。TLSクライアント認証を使用している場合を除き、SSLだけではREST APIクライアント認証なしのSSLはサーバーのみを認証しますが、これはほとんどのREST APIには関係ありません。

TLSクライアント認証を使用しない場合は、ダイジェストベースの認証スキーム(Amazon Webサービスのカスタムスキームなど)またはOAuthまたはHTTP基本認証(ただし、 SSLのみ)。

クライアント認証なしでHTTPSを使用することを検討しているここでの質問は、クライアントSSL証明書を使用しない場合のポスターによるとサーバーは、誰と通信しているのか実際には知りません。ここで理解しているのは、サーバーに対してクライアントを認証するために認証トークンを使用してアクセスする場合です。次に、そのトークンがサーバーデータベースのユーザーIDとペアになっている場合、サーバーは誰がトークンを送信しているのかevenを知りません。

まず第一に

1-これは本当の問題ですか?特にHttpsを使用する場合(TLSクライアント認証なし)

2-そして最も重要なことですが、それが重要なセキュリティ上の欠陥であると想定しています。投稿者が言及しているように、HTTP基本認証はどのように役立ちますか? HTTP基本認証は、エンコードされたユーザー名のパスワードをヘッダーで送信するだけです。したがって、クライアントがトークンを受信すると(ユーザー名のパスワードを送信した後、代わりに)、残りの要求に対して、代わりにこのヘッダーでこのトークンを使用しますパスワードの、そしてすべてが突然大丈夫ですか?

それでもサーバーはリクエストがどこから来ているのかを知りません、おそらくサーバーはデータベースに一致するユーザーの有効なトークンを持っていますが、本当にsend誰がそれを知らないのですか? 。 (私はまだこれが非常に難しいと思っていますが、トークンがhttpsで盗まれて他の誰かに使用されることになります!)

この件名を持ってくると必ず返信が届きます。「まあ、あなたはトークンを送信しますが、サーバーは誰がトークンを送信したのかわからないので、安全ではありません」。リクエストが適切な場所から送信された場合、そのトークンとペアになっているユーザー(私のDBから確認)が「本当に正しい」ことを確認できます

あるいは、ここで言っていることが正しくないかもしれません

26
Spring

「ユーザーの認証」について話すとき、私たちが本当に意味することは、「ユーザーが他の誰も知らないはずの何かを知っていることを確認する」ことです。その「何か」は、パスワード、証明書、ハードウェアセキュリティトークン、さらにはユーザーの網膜パターンである可能性がありますが、すべての場合において、ユーザーのIDではなく、実際に確認しているのはその情報へのアクセスです手段)そのように。

ポイントは、原則として、allこれらの認証システムが盗まれ、ユーザーを偽装するために使用される可能性があるということです。パスワードがログに記録され、証明書が保存されているディスクから証明書がコピーされ、ハードウェアトークンが盗まれる可能性があり(リバースエンジニアリングと複製も可能)、ユーザーの網膜パターンでさえ、原則としてスキャン、記録、偽造される可能性があります。私たちができる最善のことは、いずれの場合も、これを可能な限り「非常に困難」にすることです。

10
Ilmari Karonen

多分私は質問を誤解している。

あなたが引用した答えは、クライアント証明書、HTTP BASICAUTH、または他のものであるかどうかにかかわらず、認証のsome形式を使用しない場合、サーバーはそれが誰であるかを知らないと私に言っていますコミュニケーション。

(多分それはあなたのアプリケーションにとって大丈夫です、多分それはそうではありません、あなただけがそれに答えることができます。)

言い換えると、何らかの認証を使用する場合、サーバーは誰と通信しているのかを知っています。認証された資格情報が属する「人」と通信しています。

このコンテキストでは、認証はいくつかの資格情報を介してIDを確立するプロセスです。

認証は、資格情報が盗まれたことを保証するものではありません。 SSLは、クライアントとサーバー間の転送中に資格情報が安全であることを保証します(「保証」とは言いませんが)。

GMailを使用している場合、SSLを使用していますが、Googleはどのようにしてあなたと通信していることを認識していますか?

6
cschneid