1

デジタル証明書で否認防止と整合性がどのように達成されたかを理解していますが、まだ把握していない認証です。デジタル署名付きサーバーの認証

私は、C#でクライアント証明書アプリケーションを開発しています。これは、デジタル証明書とデジタル署名で認証できる必要があります。 Signature(SignedCms.CheckSignature())の有効性と整合性をチェックする方法はわかっていますが、どのような部分が認証されていますか?例えば

  1. クライアントクライアントが署名を受け取り、検証が成功した場合
  2. 、それを検証し、継続
  3. 、デジタル署名のためのサーバーを要求します。

クライアントは、中間者攻撃の犠牲者であり、手順2で有効な署名を受け取る可能性があります。検証は成功しますが、クライアントは適切なサーバーと通信していません。

私には何が欠けていますか?

答えて

1

署名証明書の信頼が失われています。

SSL証明書を検討すると、Windows(または任意のOS)によって信頼されるルートCAへの署名パスがあります。 MITMが自己署名証明書、または信頼できないCAによって生成された証明書を提示すると、それはブラウザによって拒否され、警告が表示されます。したがって、証明書は、あなたが知っているCAによって発行されたもの、またはあなたが知っているものと連鎖している場合にのみ信頼されます。

自己署名証明書の場合、鍵の指紋、シリアル番号、または他の定数識別子を安全に交換し、署名鍵が実際に期待しているものであることを検証する必要があります - 自己署名証明書は、一般公開のウェブサイトやその他のサービスに使用することはできません。

MITM攻撃があり、元のマシンからの署名が削除された場合、メッセージが変更され、署名証明書のIDを信頼するものと確認してから、辞任したメッセージを拒否します。

(現実には複雑になりますが、あなたは、私は願ってポイントGET)

+0

真ん中の人がサーバーからの署名をブロックし、信頼できるCAによって発行された完全に有効な証明書を使って、すべての新しいデジタル署名をクライアントに送信するとどうなりますか? –

+0

それはもっと面白くなります。 SSLでは、接続するアドレスをマシン名で証明するために証明書名を確認する必要があります。あなたは、その証明書がそのFQDNを所有している人に発行されたことを確認したことを確認して、SSL CAに頼っています。そして、間違った場合に備えて公開された失効リストがあります。他のシナリオでは、マシン名、おそらく変更される証明書フィンガープリント、またはチェイン全体が検証されます。これは、証明書が別のCAによって発行された場合とは異なります。あなたが私がそれを簡略化したと言った:) – blowdart

+0

私がよく理解していれば、非SSL環境に関する側面は、クライアントが既にサーバに関する正確な情報を持っていることを暗示しています(例えば指紋です。正確な指紋が保存されます)。クライアントが初めてサーバーに接続したときに、以前に信頼できる情報がない場合はどうなりますか? –

1

真ん中の人が要求に署名するための秘密鍵を所有している場合にのみ、有効な署名を受け取ることができます。あなたが見逃しているかもしれない重要なことは、デジタル署名されたアイテムのあらゆる部分を変更すると署名が無効になることです。途中の人はリクエストを再提出できますが、変更した場合は署名の検証は失敗します。

+0

どうかの署名がサーバーからミドルブロックの男、とは、クライアントにすべての新しいデジタル署名を送信します信頼できるCAによって完全に有効な証明書が発行されていますか? –

+0

クライアントが既存の公開鍵を使用してsigを検証しようとすると、失敗します。クライアントが新しいsigを受け入れるならば、もちろん、すべての賭けはオフになっているので、信頼のチェーンを使ってそれを受け入れる前に、certが信頼できるかどうかを確認する必要があります。 –

関連する問題