Hallo zusammen,
ich versuche mich grade daran RMI mittels ssl zu verschlüsseln, allerdings ist mir trotz zahlreicher tutorials die das ganze mehr oder weniger beschreiben der ablauf schleierhaft.
Demzufolge habe ich ein ganz simples rmi programm geschrieben bei dem der client einfach nur einen methode mit einem mitgeliefertem parameter auf dem server aufruft.
Diesen methodenaufruf würde ich nun gern per ssl verschlüsseln, allerdings versteh ich nicht wircklich wie das gehen soll.
Ein beispiel wie man einen Stream durch SSL verschlüsselt konnte ich basteln
allerdings weiss ich nicht wie ich auf die methoden auf dem server über einen ssl socket zugreifen kann / soll.
Hat da jemand einen Rat oder könnte mir das grob erklären ?
ich versuche mich grade daran RMI mittels ssl zu verschlüsseln, allerdings ist mir trotz zahlreicher tutorials die das ganze mehr oder weniger beschreiben der ablauf schleierhaft.
Demzufolge habe ich ein ganz simples rmi programm geschrieben bei dem der client einfach nur einen methode mit einem mitgeliefertem parameter auf dem server aufruft.
Java:
package client;
import java.rmi.Naming;
import java.rmi.RemoteException;
import server.ServerInterface;
public class Client{
//Attribute
private String surl;
private ServerInterface s;
public Client() {
surl = "rmi://localhost:9999/MyServer";
try {
s = (ServerInterface)Naming.lookup(surl);
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
public void print(String str) throws RemoteException {
s.print(str);
}
public static void main (String [] args)
{
try {
String str = "asdf";
Client c = new Client();
System.out.println("Client sendet" + str);
c.print(str);
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
Java:
package server;
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
public class Server extends UnicastRemoteObject implements ServerInterface {
private static final long serialVersionUID = 1L;
public Server() throws RemoteException {
super();
int port = 9999;
Registry reg;
try {
reg = LocateRegistry.createRegistry(port);
reg.bind("MyServer", this);
System.out.println("Server gestartet");
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
public synchronized void print(String str) {
System.out.println("Server : " + str);
}
public static void main (String [] args) throws RemoteException {
new Server();
}
}
Java:
package server;
import java.rmi.*;
/**
* Diese Interface definiert Methoden
*/
public interface ServerInterface extends Remote {
public void print (String str) throws RemoteException;
}
Diesen methodenaufruf würde ich nun gern per ssl verschlüsseln, allerdings versteh ich nicht wircklich wie das gehen soll.
Ein beispiel wie man einen Stream durch SSL verschlüsselt konnte ich basteln
Java:
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import java.io.*;
public
class EchoClient {
public
static
void
main(String[] arstring) {
try {
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("localhost", 9999);
//usereingabe
InputStream inputstream = System.in;
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
//outstream für den server
OutputStream outputstream = sslsocket.getOutputStream();
OutputStreamWriter outputstreamwriter = new OutputStreamWriter(outputstream);
BufferedWriter bufferedwriter = new BufferedWriter(outputstreamwriter);
String string = null;
//einlesen der usereingabe
while ((string = bufferedreader.readLine()) != null) {
//gelesene daten an den server schreiben
bufferedwriter.write(string + '\n');
bufferedwriter.flush();
}
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
Java:
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSocket;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public
class EchoServer {
public
static
void
main(String[] arstring) {
try {
SSLServerSocketFactory sslserversocketfactory =
(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket sslserversocket =
(SSLServerSocket) sslserversocketfactory.createServerSocket(9999);
SSLSocket sslsocket = (SSLSocket) sslserversocket.accept();
//output des client ist der input des server
InputStream inputstream = sslsocket.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
String string = null;
//output des clients lesen
while ((string = bufferedreader.readLine()) != null) {
//ausgeben
System.out.println(string);
System.out.flush();
}
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
allerdings weiss ich nicht wie ich auf die methoden auf dem server über einen ssl socket zugreifen kann / soll.
Hat da jemand einen Rat oder könnte mir das grob erklären ?