4

HTTP および SSL を介してサーバーと通信するアプリケーションを C# で開発しています。サーバーから提供された証明書をプログラムに信頼させる方法はありますか? この証明書はソフトウェアと一緒に配布されるため、外部 CA を介さずにサーバーを識別できます。

明確化: クライアント アプリケーションで、クライアントにハードコードされた単一の証明書を信頼して、自分のサーバーのみを信頼するようにしたいと考えています。

4

2 に答える 2

1

BouncyCastleを使用できます。

  1. 関数を使用して、CA証明書をBCusignDotNetUtilitiesクラスにロードしますFromX509Certificate(X509Certificate)
  2. サーバー証明書からBCに公開鍵をロードします。
  3. Verifyサーバー証明書の公開鍵を呼び出す

このようにして、証明書の署名を確認します。これが最も安全な方法です。また、クライアントを更新せずにサーバー証明書を更新する可能性もあります。(CAがコース外で有効である限り)

ここでの検証のソース:http ://www.bouncycastle.org/viewcvs/viewcvs.cgi/csharp/crypto/src/x509/X509Certificate.cs?view = markup Line:540

于 2012-07-19T12:26:33.037 に答える
0

私の意見では、安全なチャネルを持っていると信じて、これを行うことはできないと思います。私が間違っている場合は誰かが私を修正しますが、SSL の CA 信頼チェーンは、拇印が特定の値 (または証明書の他の部分) であることを確認するだけではありません。クライアントが正しいサーバーと通信していることを証明します (共有 CA キーのため)。このイラストは参考になります。手順 3 をスキップすると、サーバーはその ID をクライアントに証明できなくなります (証明書の検証をスローします)。

so that it will only ever trust my own server

SSL は、共有 CA 証明書 (verisign など) を使用してこれを保証します。意図したとおりに SSL を使用しないことを選択した理由が理解できないかもしれません。

編集: the_ajpが彼の回答指摘しているように、証明書チェーンで完全な検証を行うライブラリ (弾む城など) があります。これらは手動で呼び出すことができます。

于 2012-07-19T13:39:50.240 に答える