SlideShare uma empresa Scribd logo
1 de 17
Lezione 7: Remote Method
         Invocation e SSL
         Corso di Programmazione in Rete
        Laurea Magistrale in Ing. Informatica
          Università degli Studi di Salerno



1
Outline

    ✦ Esecuzione del programma

    ✦ RMI e SSL




2
Esecuzione del programma


    ✦ Prima di lanciare il server occorre far
      partire il programma rmiregistry
     •   il programma deve partire dalla directory in cui si
         trovano i file .class




3
Passaggio dei parametri

    ✦ Nella chiamata a un metodo di un oggetto
      locale, Java usa i seguenti meccanismi
      per il passaggio dei parametri e del valore
      di ritorno:
     •   per i tipi atomici il passaggio è per valore
     •   per tutti gli altri tipi, il passaggio è per riferimento




4
Passaggio dei parametri
    ✦ Nel caso di oggetti remoti, le regole
      cambiano:
     •   per i tipi atomici il passaggio è per valore
     •   per gli oggetti che implementano un’interfaccia
         remota, il passaggio è per riferimento (remoto)
     •   per i tipi serializzabili che non implementano
         un’interfaccia remota il passaggio è per valore
     •   per tutti gli altri tipi, non è possibile utilizzarli
         come parametro o valore di ritorno di un metodo
         remoto


5
Passaggio dei parametri
    ✦ Conseguenze
     •   il comportamento di un metodo può cambiare a
         seconda se l’oggetto è locale oppure remoto
     •   il passaggio per valore di un oggetto può avere un
         impatto significativo sulle prestazioni, dal
         momento che comporta la trasmissione su rete di
         una versione serializzata dell’oggetto e di tutti gli
         oggetti ad esso collegati!
     •   il server deve avere accesso ai .class delle classi
         effettive dei parametri passati per valore
         ‣   non è sempre banale, per il polimorfismo


6
Passaggio dei parametri
    ✦ Esempio di codice che ha un effetto
      diverso in un oggetto locale o in un
      oggetto remoto
        	   public void copia(int src[], int dest[]) {
        	   	 for(int i=0; i<src.length; i++)
        	   	 	 dest[i]=src[i];
        	   }

    ✦ Infatti:
     ‣ in un oggetto locale, copia un array in un altro
       array (passaggio per riferimento)
     ‣ in un oggetto remoto, non ha nessun effetto
       (passaggio per valore)
7
RMI e SSL
    ✦ Per rendere sicura la comunicazione con
      un oggetto remoto è possibile usare
      socket SSL/TLS invece dei semplici socket
      TCP
    ✦ Per cambiare il tipo di socket usato per la
      connessione i passi sono:
     •   definire una factory per i server socket e una
         factory per i client socket
     •   specificare le factory da usare nel costruttore
         della classe di implementazione dell’oggetto
         remoto
8
RMIServerSocketFactory

    ✦ L’interfaccia RMIServerSocketFactory (del
      package java.rmi.server) rappresenta una
      factory da usare per creare i server
      socket associati a un oggetto remoto
    ✦ Le implementazioni devono definire il
      metodo:
     •   ServerSocket createServerSocket(int port)
                                    throws IOException



9
RMIServerSocketFactory
      ✦ Ad esempio, per creare socket SSL:

 import   java.io.*;
 import   java.net.*;
 import   javax.net.*;
 import   javax.net.ssl.*;
 import   java.rmi.server.*;

 public class RMISSLServerSocketFactory implements RMIServerSocketFactory {
 	 public ServerSocket createServerSocket(int port) throws IOException {
 	 	 ServerSocketFactory factory=SSLServerSocketFactory.getDefault();
 	 	 return factory.createServerSocket(port);
 	 }
 }




10
RMIClientSocketFactory
     ✦ Interfaccia usata dal client per la
       creazione del socket per connettersi
       all’oggetto, usando il metodo
      •   Socket createSocket(String host, int port)
                                   throws IOException
     ✦ L’istanza dell’implementazione viene
       definita dall’applicazione server e
       trasmessa al client quando richiede la
       connessione all’oggetto
      •   perciò l’implementazione deve anche essere
          Serializable
11
RMIClientSocketFactory
      ✦ Ad esempio, per creare socket SSL:

 import   java.io.*;
 import   java.net.*;
 import   javax.net.*;
 import   javax.net.ssl.*;
 import   java.rmi.server.*;

 public class RMISSLClientSocketFactory implements RMIClientSocketFactory, Serializable {
 	 public Socket createSocket(String host, int port) throws IOException {
 	 	 SocketFactory factory=SSLSocketFactory.getDefault();
 	 	 return factory.createSocket(host, port);
 	 }
 }




12
Uso delle factory
     ✦ Occorre passare al costruttore di
       UnicastRemoteObject la
       RMIClientSocketFactory e la
       RMIServerSocketFactory
      •   per questo occorre richiamare dal costruttore
          della classe di implementazione il costruttore:
              UnicastRemoteObject(int port,
                       RMIClientSocketFactory csf,
                       RMIServerSocketFactory ssf)
                            throws RemoteException


13
Uso delle factory
 import java.rmi.*;
      ✦ Ad esempio, per l’oggetto calcolatrice:
 import java.rmi.server.*;



 public class CalculatorImpl extends UnicastRemoteObject implements Calculator {
 	 public CalculatorImpl(RMIClientSocketFactory clientFactory,
                          RMIServerSocketFactory serverFactory) throws RemoteException {
 	 	 super(0, clientFactory, serverFactory);
 	 }
 	 public double add(double a, double b) {
 	 	 return a+b;
 	 }
 	 public double divide(double a, double b) {
 	 	 return a/b;
 	 }
 	 public double multiply(double a, double b) {
 	 	 return a*b;
 	 }
 	 public double subtract(double a, double b) {
 	 	 return a-b;
 	 }
 }


14
Modifiche al server
         ✦ Il server deve creare le factory definire le
           system properties per accedere al key
           store:
     import java.net.*;
     import java.rmi.*;
     import java.rmi.server.*;

     public class CalculatorServer {
     	 public static void main(String args[]) throws RemoteException, MalformedURLException {
     	 	 System.setProperty("javax.net.ssl.keyStore", "keystore.jks");
     	 	 System.setProperty("javax.net.ssl.keyStorePassword", "pippobaudo");
     	 	 RMIClientSocketFactory clientFactory=new RMISSLClientSocketFactory();
     	 	 RMIServerSocketFactory serverFactory=new RMISSLServerSocketFactory();
     	 	 Calculator calc=new CalculatorImpl(clientFactory, serverFactory);
     	 	 Naming.rebind("calc", calc);
     	 }
     }


15
Modifiche al client
         ✦ Il client deve soltanto definire le system
           properties per accedere al trust store:
     import java.net.*;
     import java.rmi.*;

     public class CalculatorClient {
     	 public static void main(String args[])
                         throws RemoteException, MalformedURLException, NotBoundException {
     	 	 System.setProperty("javax.net.ssl.trustStore", "truststore.jks");
     	 	 System.setProperty("javax.net.ssl.trustStorePassword", "pippobaudo");
     	 	 Calculator calc=(Calculator)Naming.lookup("rmi://localhost/calc");
     	 	 System.out.println("9 per 9 fa "+calc.multiply(9,9));
     	 }

     }




16
Modifiche al client
     ✦ Note
      •   è possibile che tra gli oggetti di uno stesso server
          alcuni usino socket SSL e altri socket normali
      •   il client non deve decidere quale tipo di socket
          usare per ciascun oggetto: il server provvede a
          passargli la factory appropriata
      •   il meccanismo delle factory può essere usato
          anche per usare altri meccanismi di
          comunicazione
          ‣   es. HTTP tunneling per le reti dotate di firewall



17

Mais conteúdo relacionado

Mais procurados

[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
[ITA] Introduzione ai web services: SOAP, WSDL, UDDI[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
[ITA] Introduzione ai web services: SOAP, WSDL, UDDIMarco Brambilla
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaMauro Servienti
 
Drupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e DrupalDrupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e DrupalDrupalDay
 
Simple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingSimple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingFrancesca1980
 
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxProgettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxGiovanni Cappellini
 
C# Chat for Windows: Network infrastructure + file sharing + clipboard sharin...
C# Chat for Windows: Network infrastructure + file sharing + clipboard sharin...C# Chat for Windows: Network infrastructure + file sharing + clipboard sharin...
C# Chat for Windows: Network infrastructure + file sharing + clipboard sharin...Francesco Corazza
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicinodavide ficano
 
Progetto su iPhone - Seminario di Reti Wireless
Progetto su iPhone - Seminario di Reti WirelessProgetto su iPhone - Seminario di Reti Wireless
Progetto su iPhone - Seminario di Reti WirelessSilvio Daminato
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Eugenio Minardi
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Wellnet srl
 

Mais procurados (20)

Corso Java 2 - AVANZATO
Corso Java 2 - AVANZATOCorso Java 2 - AVANZATO
Corso Java 2 - AVANZATO
 
Corso di servlet jsp e pattern
Corso di servlet jsp e patternCorso di servlet jsp e pattern
Corso di servlet jsp e pattern
 
[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
[ITA] Introduzione ai web services: SOAP, WSDL, UDDI[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
[ITA] Introduzione ai web services: SOAP, WSDL, UDDI
 
Corso Javascript
Corso JavascriptCorso Javascript
Corso Javascript
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteria
 
Drupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e DrupalDrupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e Drupal
 
Corso web services
Corso web servicesCorso web services
Corso web services
 
Portlet JSR168/286
Portlet JSR168/286Portlet JSR168/286
Portlet JSR168/286
 
Simple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingSimple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computing
 
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxProgettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
 
C# Chat for Windows: Network infrastructure + file sharing + clipboard sharin...
C# Chat for Windows: Network infrastructure + file sharing + clipboard sharin...C# Chat for Windows: Network infrastructure + file sharing + clipboard sharin...
C# Chat for Windows: Network infrastructure + file sharing + clipboard sharin...
 
Corso UML
Corso UMLCorso UML
Corso UML
 
Tutorial su Java RMI
Tutorial su Java RMITutorial su Java RMI
Tutorial su Java RMI
 
Javascript
JavascriptJavascript
Javascript
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicino
 
Progetto su iPhone - Seminario di Reti Wireless
Progetto su iPhone - Seminario di Reti WirelessProgetto su iPhone - Seminario di Reti Wireless
Progetto su iPhone - Seminario di Reti Wireless
 
Ajax - Presente e futuro delle applicazioni web
Ajax - Presente e futuro delle applicazioni webAjax - Presente e futuro delle applicazioni web
Ajax - Presente e futuro delle applicazioni web
 
m-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Netm-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Net
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 

Semelhante a Lezione 7: Remote Method Invocation e SSL

Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con ScalaFranco Lombardo
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012Crismer La Pignola
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, javaMatteo Baccan
 
Autenticazione delle api con jwt e symfony (Italian)
Autenticazione delle api con jwt e symfony (Italian)Autenticazione delle api con jwt e symfony (Italian)
Autenticazione delle api con jwt e symfony (Italian)Marco Albarelli
 
Installing Apache tomcat with Netbeans
Installing Apache tomcat with NetbeansInstalling Apache tomcat with Netbeans
Installing Apache tomcat with NetbeansDavide Nardone
 
Alla scoperta di gRPC
Alla scoperta di gRPCAlla scoperta di gRPC
Alla scoperta di gRPCAndrea Dottor
 
Lezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPLezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPAndrea Della Corte
 
Seam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano CiccazzoSeam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano CiccazzoJava User Group Roma
 
April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5JBug Italy
 

Semelhante a Lezione 7: Remote Method Invocation e SSL (20)

Java lezione 14
Java lezione 14Java lezione 14
Java lezione 14
 
Hexagonal architecture ita
Hexagonal architecture itaHexagonal architecture ita
Hexagonal architecture ita
 
Yagwto
YagwtoYagwto
Yagwto
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
 
Lezione 3: Connessioni TCP
Lezione 3: Connessioni TCPLezione 3: Connessioni TCP
Lezione 3: Connessioni TCP
 
#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)
 
App Engine + Python
App Engine + PythonApp Engine + Python
App Engine + Python
 
J huery
J hueryJ huery
J huery
 
Applicazioni native in java
Applicazioni native in javaApplicazioni native in java
Applicazioni native in java
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012
 
Php mysql3
Php mysql3Php mysql3
Php mysql3
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, java
 
Autenticazione delle api con jwt e symfony (Italian)
Autenticazione delle api con jwt e symfony (Italian)Autenticazione delle api con jwt e symfony (Italian)
Autenticazione delle api con jwt e symfony (Italian)
 
Installing Apache tomcat with Netbeans
Installing Apache tomcat with NetbeansInstalling Apache tomcat with Netbeans
Installing Apache tomcat with Netbeans
 
Alla scoperta di gRPC
Alla scoperta di gRPCAlla scoperta di gRPC
Alla scoperta di gRPC
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
Lezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPLezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDP
 
Seam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano CiccazzoSeam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano Ciccazzo
 
April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 

Mais de Andrea Della Corte

Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliLezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliLezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliLezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliAndrea Della Corte
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliAndrea Della Corte
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliAndrea Della Corte
 
Lezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionLezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionAndrea Della Corte
 
Lezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingLezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingAndrea Della Corte
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingAndrea Della Corte
 

Mais de Andrea Della Corte (14)

Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern Comportamentali
 
Lezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliLezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern Comportamentali
 
Lezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliLezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern Comportamentali
 
Lezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliLezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern Strutturali
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern Strutturali
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern Creazionali
 
Lezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionLezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e Subversion
 
Lezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingLezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme Programming
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme Programming
 
Lezione 1: I metodi agili
Lezione 1: I metodi agiliLezione 1: I metodi agili
Lezione 1: I metodi agili
 
Lezione 1: I/O in Java
Lezione 1: I/O in JavaLezione 1: I/O in Java
Lezione 1: I/O in Java
 
Lezione 2: I thread
Lezione 2: I threadLezione 2: I thread
Lezione 2: I thread
 
Tutorial Matlab 2009
Tutorial Matlab 2009Tutorial Matlab 2009
Tutorial Matlab 2009
 
Introduzione ai CRM
Introduzione ai CRMIntroduzione ai CRM
Introduzione ai CRM
 

Último

XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaStefano Lariccia
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaStefano Lariccia
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaPierLuigi Albini
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiorevaleriodinoia35
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieVincenzoPantalena1
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaRafael Figueredo
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativovaleriodinoia35
 
Storia dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxStoria dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxOrianaOcchino
 
lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldivaleriodinoia35
 

Último (9)

XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza cultura
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiore
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medie
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativo
 
Storia dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxStoria dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptx
 
lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldi
 

Lezione 7: Remote Method Invocation e SSL

  • 1. Lezione 7: Remote Method Invocation e SSL Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno 1
  • 2. Outline ✦ Esecuzione del programma ✦ RMI e SSL 2
  • 3. Esecuzione del programma ✦ Prima di lanciare il server occorre far partire il programma rmiregistry • il programma deve partire dalla directory in cui si trovano i file .class 3
  • 4. Passaggio dei parametri ✦ Nella chiamata a un metodo di un oggetto locale, Java usa i seguenti meccanismi per il passaggio dei parametri e del valore di ritorno: • per i tipi atomici il passaggio è per valore • per tutti gli altri tipi, il passaggio è per riferimento 4
  • 5. Passaggio dei parametri ✦ Nel caso di oggetti remoti, le regole cambiano: • per i tipi atomici il passaggio è per valore • per gli oggetti che implementano un’interfaccia remota, il passaggio è per riferimento (remoto) • per i tipi serializzabili che non implementano un’interfaccia remota il passaggio è per valore • per tutti gli altri tipi, non è possibile utilizzarli come parametro o valore di ritorno di un metodo remoto 5
  • 6. Passaggio dei parametri ✦ Conseguenze • il comportamento di un metodo può cambiare a seconda se l’oggetto è locale oppure remoto • il passaggio per valore di un oggetto può avere un impatto significativo sulle prestazioni, dal momento che comporta la trasmissione su rete di una versione serializzata dell’oggetto e di tutti gli oggetti ad esso collegati! • il server deve avere accesso ai .class delle classi effettive dei parametri passati per valore ‣ non è sempre banale, per il polimorfismo 6
  • 7. Passaggio dei parametri ✦ Esempio di codice che ha un effetto diverso in un oggetto locale o in un oggetto remoto public void copia(int src[], int dest[]) { for(int i=0; i<src.length; i++) dest[i]=src[i]; } ✦ Infatti: ‣ in un oggetto locale, copia un array in un altro array (passaggio per riferimento) ‣ in un oggetto remoto, non ha nessun effetto (passaggio per valore) 7
  • 8. RMI e SSL ✦ Per rendere sicura la comunicazione con un oggetto remoto è possibile usare socket SSL/TLS invece dei semplici socket TCP ✦ Per cambiare il tipo di socket usato per la connessione i passi sono: • definire una factory per i server socket e una factory per i client socket • specificare le factory da usare nel costruttore della classe di implementazione dell’oggetto remoto 8
  • 9. RMIServerSocketFactory ✦ L’interfaccia RMIServerSocketFactory (del package java.rmi.server) rappresenta una factory da usare per creare i server socket associati a un oggetto remoto ✦ Le implementazioni devono definire il metodo: • ServerSocket createServerSocket(int port) throws IOException 9
  • 10. RMIServerSocketFactory ✦ Ad esempio, per creare socket SSL: import java.io.*; import java.net.*; import javax.net.*; import javax.net.ssl.*; import java.rmi.server.*; public class RMISSLServerSocketFactory implements RMIServerSocketFactory { public ServerSocket createServerSocket(int port) throws IOException { ServerSocketFactory factory=SSLServerSocketFactory.getDefault(); return factory.createServerSocket(port); } } 10
  • 11. RMIClientSocketFactory ✦ Interfaccia usata dal client per la creazione del socket per connettersi all’oggetto, usando il metodo • Socket createSocket(String host, int port) throws IOException ✦ L’istanza dell’implementazione viene definita dall’applicazione server e trasmessa al client quando richiede la connessione all’oggetto • perciò l’implementazione deve anche essere Serializable 11
  • 12. RMIClientSocketFactory ✦ Ad esempio, per creare socket SSL: import java.io.*; import java.net.*; import javax.net.*; import javax.net.ssl.*; import java.rmi.server.*; public class RMISSLClientSocketFactory implements RMIClientSocketFactory, Serializable { public Socket createSocket(String host, int port) throws IOException { SocketFactory factory=SSLSocketFactory.getDefault(); return factory.createSocket(host, port); } } 12
  • 13. Uso delle factory ✦ Occorre passare al costruttore di UnicastRemoteObject la RMIClientSocketFactory e la RMIServerSocketFactory • per questo occorre richiamare dal costruttore della classe di implementazione il costruttore: UnicastRemoteObject(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException 13
  • 14. Uso delle factory import java.rmi.*; ✦ Ad esempio, per l’oggetto calcolatrice: import java.rmi.server.*; public class CalculatorImpl extends UnicastRemoteObject implements Calculator { public CalculatorImpl(RMIClientSocketFactory clientFactory, RMIServerSocketFactory serverFactory) throws RemoteException { super(0, clientFactory, serverFactory); } public double add(double a, double b) { return a+b; } public double divide(double a, double b) { return a/b; } public double multiply(double a, double b) { return a*b; } public double subtract(double a, double b) { return a-b; } } 14
  • 15. Modifiche al server ✦ Il server deve creare le factory definire le system properties per accedere al key store: import java.net.*; import java.rmi.*; import java.rmi.server.*; public class CalculatorServer { public static void main(String args[]) throws RemoteException, MalformedURLException { System.setProperty("javax.net.ssl.keyStore", "keystore.jks"); System.setProperty("javax.net.ssl.keyStorePassword", "pippobaudo"); RMIClientSocketFactory clientFactory=new RMISSLClientSocketFactory(); RMIServerSocketFactory serverFactory=new RMISSLServerSocketFactory(); Calculator calc=new CalculatorImpl(clientFactory, serverFactory); Naming.rebind("calc", calc); } } 15
  • 16. Modifiche al client ✦ Il client deve soltanto definire le system properties per accedere al trust store: import java.net.*; import java.rmi.*; public class CalculatorClient { public static void main(String args[]) throws RemoteException, MalformedURLException, NotBoundException { System.setProperty("javax.net.ssl.trustStore", "truststore.jks"); System.setProperty("javax.net.ssl.trustStorePassword", "pippobaudo"); Calculator calc=(Calculator)Naming.lookup("rmi://localhost/calc"); System.out.println("9 per 9 fa "+calc.multiply(9,9)); } } 16
  • 17. Modifiche al client ✦ Note • è possibile che tra gli oggetti di uno stesso server alcuni usino socket SSL e altri socket normali • il client non deve decidere quale tipo di socket usare per ciascun oggetto: il server provvede a passargli la factory appropriata • il meccanismo delle factory può essere usato anche per usare altri meccanismi di comunicazione ‣ es. HTTP tunneling per le reti dotate di firewall 17