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(); } } }