Мне нужно разработать настольное приложение клиент-сервер с SSL-сокетами в Java. Одним из требований является шифрование сообщений.Как проверить соединение с SSL-сокетами в java (client-server) с помощью wirehark и другими сомнениями
Я пытаюсь использовать некоторые примеры кода в Интернете, чтобы знать, как сделать зашифрованное соединение. Примеры, похоже, работают нормально или, по крайней мере, они не генерируют ошибок, однако я должен проверить из Wireshark, что сообщения фактически зашифрованы, но в wirehark я вижу только TCP-пакеты. На мой взгляд, у меня есть сертификаты и хранилища ключей.
JavaSSLServer.java
/**
@web http://java-buddy.blogspot.com/
*/
public class JavaSSLServer {
static final int port = 8000;
public static void main(String[] args) {
System.setProperty("javax.net.ssl.keyStore","/home/jose/serverKey.jks");
System.setProperty("javax.net.ssl.keyStorePassword","servpass");
SSLServerSocketFactory sslServerSocketFactory =
(SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
try {
ServerSocket sslServerSocket =
sslServerSocketFactory.createServerSocket(port);
System.out.println("SSL ServerSocket started");
System.out.println(sslServerSocket.toString());
Socket socket = sslServerSocket.accept();
System.out.println("ServerSocket accepted");
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
try (BufferedReader bufferedReader =
new BufferedReader(
new InputStreamReader(socket.getInputStream()))) {
String line;
while((line = bufferedReader.readLine()) != null){
System.out.println(line);
out.println(line);
}
}
System.out.println("Closed");
} catch (IOException ex) {
Logger.getLogger(JavaSSLServer.class.getName())
.log(Level.SEVERE, null, ex);
}
}}
JavaSSLClient.java
/**
@web http://java-buddy.blogspot.com/
*/
public class JavaSSLClient {
static final int port = 8000;
public static void main(String[] args) {
System.setProperty("javax.net.ssl.trustStore", "/home/jose/clientTrustedCerts.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "clientpass");
SSLSocketFactory sslSocketFactory =
(SSLSocketFactory)SSLSocketFactory.getDefault();
try {
Socket socket = sslSocketFactory.createSocket("localhost", port);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
try (BufferedReader bufferedReader =
new BufferedReader(
new InputStreamReader(socket.getInputStream()))) {
Scanner scanner = new Scanner(System.in);
while(true){
System.out.println("Enter something:");
String inputLine = scanner.nextLine();
if(inputLine.equals("q")){
break;
}
out.println(inputLine);
System.out.println(bufferedReader.readLine());
}
}
} catch (IOException ex) {
Logger.getLogger(JavaSSLClient.class.getName())
.log(Level.SEVERE, null, ex);
}
}
}
Я добавил System.setProperty (...
В Wireshark:
Другой пример:
Результаты в Wireshark были похожи.
Я хочу установить соединение с SSL-сокетами, которые шифруют сообщения между клиентом и сервером и могут быть проверены с Wireshark (это еще одно требование).
Мои вопросы:
Как проверить, что сообщение фактически шифруется с помощью Wireshark?
Должен ли я видеть пакеты SSL/TLS вместо TCP, чтобы заключить, что они зашифрованы?
Можете ли вы сказать мне, если какой-либо примерный код неправильный или неполный?
Отправить знакомое сообщение и посмотреть, сможете ли вы его просмотреть в Wireshark. Это фактическое требование. – EJP