Hallo,
ich möchte zwei Java Programme (Client und Server) über TCP verbinden und mit SSL verschlüsseln. Diesen Code habe ich bis jetzt mal, kenn mich aber mit der Zertifizierung nicht so aus. Vielleicht könnte mir jemand schreiben, wie ich es auf die Reihe bekomme, das Client und Server das gleiche Zertifikat benutzen. Besten Dank,
Momentan bekomme ich folgende Exception:
Server- Programm:
Client- Programm:
ich möchte zwei Java Programme (Client und Server) über TCP verbinden und mit SSL verschlüsseln. Diesen Code habe ich bis jetzt mal, kenn mich aber mit der Zertifizierung nicht so aus. Vielleicht könnte mir jemand schreiben, wie ich es auf die Reihe bekomme, das Client und Server das gleiche Zertifikat benutzen. Besten Dank,
Momentan bekomme ich folgende Exception:
Code:
Ausnahme Klasse EncryptedConnection, Methode connectToServer2: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
Server- Programm:
Java:
public void serverSocketStart() {
try {
final SSLServerSocketFactory ssocketFactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
final SSLServerSocket sslServerSocket = (SSLServerSocket)ssocketFactory.createServerSocket(port);
final String[] enabledCipherSuites = {"SSL_DH_anon_WITH_RC4_128_MD5"};
sslServerSocket.setEnabledCipherSuites(enabledCipherSuites);
sslServerSocket.setReuseAddress(true);
System.out.println("SSL factory started..");
System.out.println("Listening for connections on port " + port);
while (true) {
try {
final SSLSocket sslSocket = (SSLSocket)sslServerSocket.accept();
clientCounter++;
System.out.println("Client " + clientCounter + " verbunden");
final ServerThread serverThread = new ServerThread("DataServerTcpipVerbindung " + clientCounter, sslSocket);
serverThread.setName("TCP/SSLConnection");
serverThread.start();
}
catch (Exception e) {
System.out.println("Ausnahme Klasse EncryptedConnection, Methode serverSocketStart: " + e);
}
}
}
catch (Exception e) {
e.printStackTrace();
}
}
Client- Programm:
Java:
public boolean connectToServer() {
boolean result = false;
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
try {
try {
SSLContext context = null;
try {
context = SSLContext.getInstance("SSL");
context.init(null, createTrustManager(), new java.security.SecureRandom());
}
catch (Exception ex) {
System.out.println("Ausnahme Klasse EncryptedConnection, Methode connectToServer1: " + ex);
}
final SSLSocketFactory dfactory = context.getSocketFactory();
sslSocket = (SSLSocket)dfactory.createSocket(host, port);
try {
System.out.println("Vor dem handshake: " + sslSocket.isConnected());
sslSocket.startHandshake();
System.out.println("Nach dem handshake: " + sslSocket.isConnected());
}
catch (Exception ex) {
System.out.println("Ausnahme Klasse EncryptedConnection, Methode connectToServer2: " + ex);
}
result = true;
}
catch (UnknownHostException ex) {
System.out.println("Ausnahme Klasse EncryptedConnection, Methode connectToServer3: " + ex);
return false;
}
//then here you can start using the socket object
}
catch (IOException ex) {
ex.printStackTrace();
}
return result;
}