0

私のクライアント/サーバー プログラムは OpenSSL を使用してデータ交換を処理し、動作していますが、クライアントが接続しているサーバーが偽のサーバーではなく正しいサーバーであることを確認する必要があります。

問題は、私のプログラムが自己署名証明書を生成し、クライアントがそれによって検証できないことです。証明書を埋め込むと、誰でもそれを抽出して、偽のクライアント サーバーを作成し、情報を盗もうとする可能性があります。OpenPGP 鍵についても同様です。

では、クライアントでもあるため、サーバーバイナリが誰でも利用できる場合でも、サーバーを検証する方法を実装できますか?

4

1 に答える 1

0

この状況では、安全な認証は実際の証明書に依存するのではなく、キー ペアがカバーされます。

非対称暗号化は、秘密鍵と公開鍵に依存しています。秘密鍵は秘密のままにしておく必要があります(したがって、認証する必要があるサーバー、つまり正しいサーバーとして説明したサーバーに保管してください)。公開鍵は任意に広めることができます。誰かができることは、秘密鍵の所有者のために情報を暗号化するか、所有者が発行した署名を検証することだけです。

実際の認証プロセスの背後にある (非常に) 基本的な考え方は、認証を行うクライアントが暗号化された乱数を送信することによって機能します。この乱数は、正しいサーバーだけが解読して返すことができます。または、クライアントによって定義されたものにサーバーが署名することによって機能します。認証のために実装された実際のプロセスは、中間者攻撃を防ぐためにもう少し複雑ですが、この回答の範囲をはるかに超えています.

では、クライアントでもあるため、サーバーバイナリが誰でも利用できる場合でも、サーバーを検証する方法を実装できますか?

すでに存在するものに依存し、独自に暗号コードを実装しないでください。すでにキーを配布している場合は、暗号化された通信に TLS を使用することを検討してください。認証はハンドシェイク フェーズで行われます。

于 2014-10-31T08:08:45.907 に答える