【问题标题】:Is SSLSocket communication secure using the attached code? [closed]使用附加代码进行 SSLSocket 通信是否安全? [关闭]
【发布时间】:2014-07-12 02:10:01
【问题描述】:

我使用Sockets 开发了一个聊天服务器和客户端,一切都很好,直到我在网上某处看到普通的Socket 通信容易受到攻击。谷歌搜索了一段时间后,我遇到了this page,它显示了一个示例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
        }
      }
    }
  }
}

【问题讨论】:

  • 这个问题似乎跑题了,因为它是关于代码审查的。
  • @AbidingCitizen - 跟随 aliteralmind,您可以在这里尝试:Code Review Stack Exchange
  • 我不同意。 OP 询问的是现有代码的属性,而不是是否可以更好地编码。

标签: java ssl java-io sslstream sslsocketfactory


【解决方案1】:

您应该通过 HandshakeCompletionListener 或 SSLSession 获取对等证书,以验证您正在与您认为正在与之交谈的主机交谈。除此之外,从安全的角度来看,您的代码是可以的。

但是,您还应该注意,您不应该在网络上使用 PrintWriter,因为它会吞下异常。

【讨论】:

猜你喜欢
  • 2015-02-08
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
  • 2017-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-06
相关资源
最近更新 更多