【发布时间】:2014-07-12 02:10:01
【问题描述】:
我使用Sockets 开发了一个聊天服务器和客户端,一切都很好,直到我在网上某处看到普通的Socket 通信容易受到攻击。谷歌搜索了一段时间后,我遇到了this page,它显示了一个示例SSLServerSocket 和SSLSocket 实现(代码如下)。
如果我按照以下代码中的步骤操作,我想知道我的服务器和客户端之间的通信是否安全。
服务器代码
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