0

を使用してチャットサーバーとクライアントを開発しましたが、オンラインのどこかで通常の通信が攻撃に対して脆弱Socketsであることを読むまで、すべてが順調でした。しばらくグーグルで調べた後、サンプルと実装 (以下のコード)を示すこのページSocketに出くわしました。SSLServerSocketSSLSocket

以下のコードの手順に従う場合、サーバーとクライアント間の通信が安全かどうかを知りたいです。


サーバーコード

class EchoServer {
  public static void main(String[] args) throws IOException {
    SSLServerSocket sslServerSocket = null;
    try {
      SSLServerSocketFactory sslServerSocketFactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
      sslServerSocket = (SSLServerSocket) sslServerSocketFactory.createServerSocket(9999);
      SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept();
      PrintWriter out = new PrintWriter(sslSocket.getOutputStream(),true);
      BufferedReader in = new BufferedReader(new InputStreamReader(sslSocket.getInputStream()));
      String inputLine;
      while ((inputLine = in.readLine()) != null) {
        System.out.println(inputLine);
        out.println(inputLine);
      }
    } finally {
      if (sslServerSocket != null) {
        try {
          sslServerSocket.close();
        } catch (IOException x) {
          // handle error
        }
      }
    }
  }
}


クライアントコード

class EchoClient {
  public static void main(String[] args) throws IOException {
    SSLSocket sslSocket = null;
    try {
      SSLSocketFactory sslSocketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
      sslSocket = (SSLSocket) sslSocketFactory.createSocket("localhost", 9999);
      PrintWriter out = new PrintWriter(sslSocket.getOutputStream(), true);
      BufferedReader in = new BufferedReader(new InputStreamReader(sslSocket.getInputStream()));
      BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
      String userInput;
      while ((userInput = stdIn.readLine()) != null) {
        out.println(userInput);
        System.out.println(in.readLine());
      }
    } finally {
      if (sslSocket != null) {
        try {
          sslSocket.close();
        } catch (IOException x) {
          // handle error
        }
      }
    }
  }
}
4

1 に答える 1

1

HandshakeCompletionListener または SSLSession を介してピア証明書を取得し、通信していると思われるホストと通信していることを確認する必要があります。それ以外は、セキュリティの観点からはコードは問題ありません。

ただし、例外を飲み込むため、ネットワーク経由で PrintWriter を使用しないでください。

于 2014-07-12T03:03:20.700 に答える