2012-06-26 6 views
18

.NET/WCFアプリケーションとサードパーティWebサーバー間の双方向SSL通信チャネルをセットアップする必要があります。今、私はすべての要素が正しく設定されていることを検証するために、ホストとのハンドシェイクを成功させようとしています(クライアント証明書、サーバー認証局、ネットワーク通信...)。私はs_clientコマンドを使用して、openSSLコマンドラインツールを使用してこれを検証しています。ここでOpenSSLとs_client - なぜクライアントから秘密鍵が必要ですか?

が私を停止しているものである、と私は理解していないもの:

  • を私は何でも、OpenSSLは クライアント証明書
  • クライアント証明書の秘密鍵を見つけることが期待されます第三者によって私に与えられましたが、 には秘密鍵が含まれていません
  • 私はopenSSLを使用して自分の秘密鍵ファイルを生成しています。 キー値の不一致エラー

私はSSLに手を入れ始めたので、プロトコル全体について非常に基本的な知識があることに注意してください。私が読んできたことから、サーバーとクライアントの両方が2方向SSL設定で秘密鍵を必要とするようです。しかし、私は自分のクライアントに働いている秘密鍵を取得する方法を理解できません(私に与えられたクライアント証明書を使って作業する)。 誰かがクライアントの証明書秘密鍵を明らかにすることができたら、私は大変なことに感謝します。

ありがとうございます!

+0

サーバー証明書があれば、与えられたはずのものだけです。誰もあなたにクライアント証明書を与えることはできません。自分の秘密鍵から始めて自分で構築する必要があります。おそらくあなたにそれを与えた人は誰もそれを理解していませんでした。 – EJP

+1

それを入れて、これは実際にもっと意味があります。そして私は、私の周りの多くの人がこのSSL全体を非常にうまく理解しているような気がしていることを確認します。 (私がここで成し遂げようとしているのは)主題に関するバーを上げるのは私の責任だと思います。 – Aerendel

答えて

39

証明書は公開された情報のみです。公開鍵証明書に含まれる名前にリンクするのは、その名前を正当に管理しているユーザー(名前やサーバーの名前など)にも秘密鍵があるということです。

証明書は、リモートパーティーに、対応する秘密キーでのみ実行できる操作(公開キーで確認できる)または何かの解読を実行するようにリモートエンティティに挑戦することによって証明されます公開鍵で暗号化されています。

SSL/TLSハンドシェイクの間に、サーバーは証明書を(クリアして)送信し、対応する秘密鍵があることをクライアントに証明します(SSL/TLSハンドシェイクでは、 using an authenticated key exchange

また、クライアント証明書認証を使用する場合もあります。ハンドシェイク中にクライアント証明書を送信するだけでは不十分です。クライアントは秘密鍵も持っていることを証明する必要があります。そうしないと、その証明書を受け取った誰もがそれを複製できます。証明書を使用する点は、自分の秘密(秘密鍵)を表示する必要がないようなクローン作成を防ぐことです。

具体的には、クライアントはTLSハンドシェイクメッセージのCertificate Verifyメッセージでハンドシェイクメッセージに署名する必要があります。これにより、サーバーはクライアント証明書で送信された公開鍵と照合できます。この手順がないと、クライアント証明書認証は実行されません。

クライアント証明書は第三者によって私に与えられたが、それは あなたがしている場合を除き、その秘密鍵なしで、あなたの証明書を与える任意の秘密鍵

は、少し無意味と思われるが含まれていません事前にあなたの側で証明書要求を生成していることが予想されます(この場合、秘密鍵が必要です)。

実際には、証明書とその秘密鍵が与えられるのではなく、鍵ペアを生成し、証明書要求(CSR)を作成し、CAがそのCSRから証明書を発行するようにします彼らはあなたの秘密鍵を知っています)。この場合、あなたは秘密鍵を保持していることが予想され、受け取った証明書と共にそれを使用することができます。

+0

基本的に私はここで2つの選択肢を持っています: 1 - 証明書の秘密鍵を持っていればそれを尋ねますが(状況によっては可能かもしれませんが)、これは全く標準的な方法ではありません OR 2 - openSSLを使用する)キー+ CSRを生成し、CSRに与えます。 CSRは私の秘密鍵に対応するクライアント証明書を生成するために必要な情報を持っているはずです。 – Aerendel

+0

はい。 (鍵ペアを生成して証明書を申請するには、OpenSSL以外の方法があります。特に、ブラウザ内でキーが生成され、エクスポートできるブラウザベースのCAがいくつかあります)。 – Bruno

+0

秘密鍵全体が今考え出された。それでもなお他の問題に直面していますが、これは私の質問に答えました。このような役に立つ方法でこれを説明する時間をとってくれてありがとう。 – Aerendel

関連する問題