1

私は、サーバーとクライアント アプリケーションがある Java プロジェクトに取り組んでいます。サーバーは接続を受け入れ、ソケット プログラミングを通じて要求されたデータをクライアントに送信します。

すべて正常に動作しますが、アップロードしてサーバーで作業すると、不明な IP から接続されます。また、このアプリケーションは多くの国で使用されるため、特定の IP をホワイトリストに登録する必要はありません。

アプリケーションからの接続のみがソケットを使用してサーバーによって受け入れられるように、これらの IP を禁止/拒否する方法はありますか? サーバーへの接続を要求するときにカスタムデータを送信して、サーバーにこれらの接続のみを受け入れるように指示することは可能ですか?

4

3 に答える 3

2

あなたが説明する選択的受け入れは、認証と承認の範囲内に収まります。クライアントを次のように接続します。

  1. 自分自身を識別して、サーバーへのアクセスが許可されているかどうかを判断できるようにします。これは、IP または MAC アドレスのホワイトリスト登録、クライアント側の証明書基本/ダイジェスト認証、またはその他のカスタム認証スキームなど、多くの手段で実現できます。
  2. アクセスが許可されると、承認ルールを使用して、接続しているクライアントがシステムで実行できることをさらに絞り込むことができます。

Apache Shiroなどのライブラリを確認することをお勧めします。これは、面倒な作業の一部を行います。

于 2012-06-20T11:22:17.817 に答える
1

インバウンド接続を受け入れた後Socket.getInetAddress()、返された Socket で使用して IP を取得し、その後検証することができます。

IP が許可されていない場合はSocket.close()、不要な接続を閉じるために使用します。

編集:
もちろん、検証は単なる IP を超えたものに基づくことができます。接続が開かれると、そのストリームを使用して任意のデータを転送し、認証の失敗に続いて接続を閉じるなど、クライアントを識別することができます。

ただし、これを行うには、誰かがあなたの通信を傍受できる可能性を考慮する必要があります。つまり、安全な接続を使用することは理にかなっています。

接続を開く (受け入れる) 前に Java でクライアントを認証する方法を知りません。

于 2012-06-20T11:09:16.773 に答える
0

サーバーとクライアントを検証する必要がある場合は、証明書の使用も検討する必要があります。

ここにいくつかの詳細情報があります:

于 2012-06-20T11:22:41.070 に答える