package elte.java2_utikalauz5.rmi; import java.io.*; import java.net.*; import javax.net.ssl.*; import java.security.*; import java.rmi.server.*; /** Biztonságos kliensoldali végpontgenerátor. @link.forrásfájl {@docRoot}/../data/rmi/src SSLSzerver.java @since Java 2 Útikalauz programozóknak 5.0 */ class SSLKliensVegpontGenerator implements RMIClientSocketFactory, Serializable { /** Verziószám. */ private final static long serialVersionUID = 15L; public Socket createSocket(String kiszolgáló, int port) throws IOException { return (SSLSocket)((SSLSocketFactory)SSLSocketFactory.getDefault()). createSocket(kiszolgáló, port); }// hashCode és equals mint előbb public int hashCode() { return getClass().hashCode(); } public boolean equals(Object obj) { if (obj == null || getClass() != obj.getClass()) return false; return true; } } /** Biztonságos szerveroldali végpontgenerátor. A kulcsadatbázis adatait be kell írni a forrásba! @link.forrásfájl {@docRoot}/../data/rmi/src SSLSzerver.java @since Java 2 Útikalauz programozóknak 5.0 */ class SSLSzerverVegpontGenerator implements RMIServerSocketFactory { private SSLServerSocketFactory ssf = null; public SSLSzerverVegpontGenerator() throws Exception { try { SSLContext kontextus; KeyManagerFactory kmf; KeyStore ks; char[] jelszó = "az_adatbázis_jelszava".toCharArray(); ks = KeyStore.getInstance("JKS"); ks.load(new FileInputStream("kulcsadatbázis"), jelszó); kmf = KeyManagerFactory.getInstance( KeyManagerFactory.getDefaultAlgorithm()); kmf.init(ks, jelszó); kontextus = SSLContext.getInstance("TLS"); kontextus.init(kmf.getKeyManagers(), null, null); ssf = kontextus.getServerSocketFactory(); } catch (Exception e) { e.printStackTrace(); throw e; } } public ServerSocket createServerSocket(int port) throws IOException { return ssf.createServerSocket(port); }// hashCode és equals mint az előző példákban public int hashCode() { return getClass().hashCode(); } public boolean equals(Object obj) { if (obj == null || getClass() != obj.getClass()) return false; return true; } } /** Biztonságos számláló szerver. Használatakor ne feledjünk el a következő jogokat megadni!
grant signedBy "utikalauz" {
permission java.net.SocketPermission "*:1024-", "connect,accept";
};
Továbbá a felhasznált kulcsadatbázis adatait is be kell vinni a forrásfájlba!
@link.forrásfájl {@docRoot}/../data/rmi/src SSLSzerver.java
@link.letöltés {@docRoot}/../data/rmi SSLSzerver.jar
@since Java 2 Útikalauz programozóknak 5.0
*/
public class SSLSzerver implements Szamlalo {
private int számláló;
public SSLSzerver() {
számláló = 0;
}
public int számlál() {
return ++számláló;
}
public static void main(String paraméter[]) {
if (System.getSecurityManager() == null) System.setSecurityManager(
new SecurityManager());
try { // Létrehozzuk a távoli objektumunkat, amely az általunk
SSLSzerver szerver = new SSLSzerver(); //tervezett generátorokat használja
RMIClientSocketFactory csf = new SSLKliensVegpontGenerator();
RMIServerSocketFactory ssf = new SSLSzerverVegpontGenerator();
Szamlalo szerverCsonk = (Szamlalo) UnicastRemoteObject.exportObject(
szerver, 0, csf, ssf); // Bejegyeztetjük egy új névjegyzékbe
java.rmi.registry.LocateRegistry.createRegistry(34567);
java.rmi.registry.Registry registry = java.rmi.registry.LocateRegistry.createRegistry(34567, csf, ssf);
registry.rebind("Számláló", szerverCsonk);
System.out.println("A szerver készen áll.");
} catch (Exception e) {
System.out.println("Szerverhiba: " + e.getMessage());
e.printStackTrace();
}
}
}