2011-07-05 16 views
0

誰でも私にSSLで見られるクライアント証明書と公開証明書の違いを説明できますか?.NETのクライアント証明書

なぜクライアント証明書に秘密鍵が必要ですか?

私は現在、秘密鍵が関連付けられていないクライアント証明書を持っており、IISは秘密鍵を要求し続けています。

助けてください!

+1

実装にジャンプする前に、デジタル証明書がどのように機能するか少しお読みになることをお勧めします。 http://technet.microsoft.com/en-us/library/bb123848%28EXCHG.65%29.aspx – Illuminati

+0

ようこそ。自分の質問を編集して更新することができます。あなたは質問(upvoteまたはdownvote)に投票することができます。あなたのニーズを満たし、あなたの質問に答える回答が得られたら、答えとして –

答えて

1

クライアント証明書は、SSL/TLSハンドシェイク中にサーバーに対してクライアントを認証するために使用されます(名前が示すとおり)。証明書を認証に使用するには、認証側が秘密鍵を持っていなければなりません。これは真正性の証明です(つまり、秘密鍵を所有している人が所有しています)。したがって、クライアントを認証するために何らかの証明書を使用する場合は、対応する秘密鍵が必要です。秘密鍵は決して​​クライアント側に残らず、特定の暗号実装でのみ使用されます。

しかし、あなたの質問は混乱しています。サーバーでは通常、サーバーをクライアントに対して認証し、サーバーの証明書を使用します。特定のクライアントの証明書が信頼され、クライアントがこの証明書を使用して自身を認証できることをサーバーに伝えることはできますが、クライアントの秘密鍵は必要ありません。だからあなたはIISで何か間違ったことをしています。

+0

と書くことができます。こんにちはEugene、今私はサーバーの証明書を持っていますキーストア。 どうすればクライアント証明書を生成できますか? – yixiang

+0

@ user693425質問は広すぎます。いくつかの本を読んで、PKIの基礎を学びましょう。これは概念の理解と、あなたがSOから得るはるかに一般的な情報の両方を提供します。 SOは理論を知ることが期待される実用的な質問のための技術的なサイトです。 –

+0

は、技術的に詳細になるように質問を更新しました。 は、理論の部分をもっと読む... thnaks – yixiang

1

I currently have a client certificate that does not have a private key associated with it

これは矛盾しています。すべての証明書には、それに関連付けられた秘密鍵があります。証明書とともにクライアントにインストールされます。実際に証明書の前に生成されました。証明書自体はエクスポートできますが、これは秘密鍵なしです。これは例えば次のように行われる。サーバーが既に信頼しているユーザーによってクライアント証明書に署名されていない場合、サーバーがクライアントを信頼するようにします。

+0

EJPでは、公開鍵証明書には秘密鍵が含まれていません。 通常のSSLハンドシェイクでは、証明書の公開鍵を使用して、サーバーの秘密鍵が復号化できるデータを暗号化します。 今私の混乱は..クライアント証明書の公開鍵証明書ですか? – yixiang

+0

user693425:(1)証明書に秘密鍵が含まれていません。私はそうでないことを述べなかった。 (2)非対称暗号化は、「通常のSSLハンドシェイク」ではなく、特定の暗号スイートのSSLハンドシェイクでのみ発生します。 (3)すべてのPKI証明書は「公開鍵証明書」です。 – EJP

+0

現在、私は.cerと.pfx証明書の両方を持っています。 私はサーバー側にpfx証明書をインストールします。 とクライアントアプリケーションは.cer証明書を使用して接続を確立します。 しかし、私のasp.netアプリケーションから、私はこのエラーを取得しておく:。 ** LOCALMACHINEストアまたはCurrentUserにストアのいずれかに証明書を見つけることができません** **私はすでに証明書がにインポートしていWindowsのキーストアと "NETWORK SERVICE"に付与されたアクセス権。** – yixiang

0

証明書には、鍵ペアの公開鍵が含まれています。誰かが鍵ペアの秘密鍵を保持し、その秘密を保持します。たとえば、PFXファイルなどでトランスポートするためにバンドルしない限り、証明書とは別に保存されます。

サーバーに「サーバー証明書」がある場合、その証明書には公開キーが含まれており、サーバーには秘密キーが安全に保管されています。秘密鍵を使用して、SSLハンドシェイクで何かを署名します。クライアントは、サーバが実際にサーバ鍵ペアの秘密鍵を保持しているかどうかを判定するために、その署名を検証するためにサーバの鍵ペアの公開鍵のみを有するサーバ証明書を必要とするだけである。

クライアントがクライアント認証のためのSSL接続で「クライアント証明書」を送信すると、クライアントは自身の秘密鍵を安全に保持します。証明書が別の場所で生成されたときに、クライアントマシン上でクライアント証明書をインポートするときに、秘密鍵をインポートすることを無視する可能性があります。しかし、クライアントは、SSLハンドシェイクで何かを署名し、クライアント鍵ペアの秘密鍵を保持していることをサーバに証明するために、そのクライアント秘密鍵を持つ必要があります。

サーバーには、公開鍵だけを持つクライアント証明書しか表示されません。公開鍵は、クライアントが署名したものとともに、クライアントが秘密鍵を保持していることを証明します。いずれの側も自分自身の秘密鍵を相手側に送信しません。証明書(一般名、発行者など)と一緒に公開鍵だけを運ぶ証明書のみを送信します

関連する問題