4

あなたが私に答えられるように、私はあなたに私の質問をはっきりと提供します

SslStreamを使用して保護したクライアントサーバー(ソケット)接続があり、sslを使用すると、クライアントがサーバーにのみ接続するようになります。

そのためには、サーバー認証を検証し、サーバーが実際のサーバー(私のサーバー)であることを確認する関数をクライアントに追加する必要があります

しかし、自己署名証明書を検証してあなたの助けを求める方法が本当にわかりません

よろしくお願いいたします。

4

2 に答える 2

6

証明書が自己署名されていない場合を想像してください。信頼できる認証局によって署名されています。これが機能する理由は、クライアント デバイス (windows、mac、linux、iphone、android デバイス) が既知のすべての認証局の証明書を既に持っているためです。接続を確立すると、オペレーティング システムが作業を行います。これにより、接続中にクライアントに送信される証明書が、よく知られている認証局によって署名されていることが保証されます。ただし、これが機能する唯一の理由は、クライアントがすべてのよく知られている認証局の証明書を既に持っているためです。

自己署名証明書 (または自己署名認証局によって署名された証明書) を使用することを選択した場合は、オペレーティング システムではなく、自分で作業を行う必要があります。ただし、タスクは基本的に同じです。接続中にクライアントに送信された証明書が期待されるものと一致することを確認する必要があります。また、署名付き証明書が使用するのと同じ戦略を使用する必要があります。クライアントには、予期される証明書 (または証明書チェーン) が事前にインストールされている必要があります。

何らかの方法で、クライアントがすでに自己署名証明書を持っていることを確認する必要があります。具体的には、証明書内のすべての公開情報。クライアントは秘密鍵を持っていません-それは...秘密であるためです。次に、アプリにコードを追加して、接続中に送信された証明書のハッシュが、事前にインストールされた証明書のハッシュと一致することを確認できます。

以前に同様の質問をしたことがあることに気付きましたが、すでにすべて知っているかもしれません。ここに 1 つの追加ポイントがあります。

自己署名証明書の秘密鍵を完全に安全に保つ限り、誰も自己署名証明書を偽造することはできません。それはできません。誰かが試みた場合、あなたの秘密鍵と一致しない新しい秘密鍵を生成する必要があります-あなたが秘密鍵を安全に保管していたので、彼らはあなたの秘密鍵を知らないからです.

その後、すべてが崩壊します。別の秘密鍵を持っている場合は、別の公開鍵が必要になります。これは、異なる証明書ハッシュを持つことを意味します。 また、アプリは既に正しい公開鍵とハッシュを知っているため (上記のとおり)、不正な公開鍵とハッシュを使用しようとすると、アプリは接続を拒否します。これは、アプリケーションで行う必要がある部分です。

彼らがあなたの公開鍵とハッシュを使用しようとして、別の秘密鍵を使用しようとすると、SSL は接続を許可しません。

于 2012-09-16T02:23:28.480 に答える
0

Trusted である安価な証明書を使用しないのはなぜですか?

于 2012-09-16T02:50:35.897 に答える