web-dev-qa-db-ja.com

クライアント証明書が認証にどのように機能するか(Web APIで)

私はこのシナリオに1週間取り組んできました。このリンクを使用してクライアント証明書を認証するコードを実装しました http://www.asp.net/web-api/overview/security/working-with-ssl-in-web-api

いくつかの質問がまだ残っています:

  1. リクエスト証明書が承認されたクライアントのみからのものであることを確認するにはどうすればよいですか? (私は秘密鍵の使用を知っていますが、どうやって?)
  2. 現在、私は自己署名SSLとクライアント証明書を使用しています。どこからどのようにして信頼できる証明書を取得できますか? (私はCAから知っていますが、実際のプロセスは何ですか?)
  3. 信頼できるクライアントにクライアント証明書を発行するにはどうすればよいですか?

上記の質問については、非常に多くのリングアンサーがあります。上記の質問に対する明確な回答が必要です。 ASP.NET 4.5(webAPI)を使用しています。

どんな助けでもありがたいです。

6
DSA

相互TLS(別名クライアント認証)はこれに対するソリューションです。

証明書の発行に関しては、私はそれをしません。私はクライアントから自己署名証明書を受け取り、なんらかの方法で直接プリンシパル(ユーザー)に固定しました。これを行うには、共通名と証明書の公開鍵の両方で索引付けされたルックアップテーブルを用意します。これにより、証明書の取り消し(行の削除)やCAの侵害(関与しない)などの潜在的な問題がはるかに容易になります。

または、クライアントにCSRをリクエストし、信頼できるCAを使用して署名することもできます(組織に適切に保護する専門知識とリソースがある場合は、サードパーティまたは独自の社内CA)。

以下は、The Code Projectからの優れた高レベルの説明であり、彼らはそれを示す.NETサンプルコードを持っています。

相互SSL認証または証明書ベースの相互認証とは、提供されたデジタル証明書を検証することにより、2人の当事者がお互いを認証し、双方が他の当事者の身元を保証することを指します。技術的には、サーバー(Webサイトまたはサーバーアプリケーション)に対して自身を認証するクライアント(Webブラウザーまたはクライアントアプリケーション)を指し、信頼された証明書によって発行された公開キー証明書/デジタル証明書を検証することによって、サーバーもクライアントに対して自身を認証します当局(CA)。認証はデジタル証明書に依存しているため、VerisignやMicrosoft Certificate Serverなどの証明機関は相互認証プロセスの重要な部分です。高レベルの観点から見ると、証明書ベースの相互認証を使用して暗号化チャネルを認証および確立するプロセスには、次の手順が含まれます。

  1. クライアントが保護されたリソースへのアクセスを要求します。
  2. サーバーはクライアントに証明書を提示します。
  3. クライアントはサーバーの証明書を検証します。
  4. 成功すると、クライアントは証明書をサーバーに送信します。
  5. サーバーはクライアントの資格情報を確認します。
  6. 成功した場合、サーバーはクライアントから要求された保護リソースへのアクセスを許可します。

出典: http://www.codeproject.com/Articles/326574/An-Introduction-to-Mutual-SSL-Authentication

10
Alain O'Dea