implementing a simple rmi application over the internet...

33
Implementing Implementing a simple a simple RMI Application RMI Application over over the the Internet Internet ( ( using using and and comparing comparing HTTP HTTP tunneling tunneling , RMI Proxy) , RMI Proxy)

Upload: vuonghanh

Post on 10-Sep-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

ImplementingImplementing a simple a simple RMI Application RMI Application overover thethe

Internet Internet ((usingusing and and comparingcomparing HTTP HTTP tunnelingtunneling, RMI Proxy), RMI Proxy)

Page 2: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

Plan de lPlan de l ’exposé’exposé

IntroductionIntroductionProblématiqueProblématiqueHTTP HTTP tunnelingtunneling•• Comment RMI «Comment RMI « tunnelletunnelle » des messages» des messages•• Stratégie utilisée pour une invocation de méthode sur un Stratégie utilisée pour une invocation de méthode sur un

serveurserveur•• NamingNaming ServicesServices•• L’implémentation d’un L’implémentation d’un servletservlet pour le HTTP pour le HTTP TunnelingTunneling•• Modifications à apporter au code afin d’utiliser le HTTP Modifications à apporter au code afin d’utiliser le HTTP

TunnelingTunneling•• Configuration du fichier Configuration du fichier policypolicy•• Exemple de requête RMIExemple de requête RMI

Page 3: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

Plan de lPlan de l ’exposé (2)’exposé (2)RMI ProxyRMI Proxy•• Les objectifsLes objectifs•• Les Les caractérisitiquescaractérisitiques•• Le contrôle d’accèsLe contrôle d’accès•• L’architectureL’architecture•• Fonctionnement de RMI ProxyFonctionnement de RMI Proxy•• L’API côté client et serveurL’API côté client et serveur•• Limitations du RMI ProxyLimitations du RMI Proxy•• Les modifications à apportées au client et au serveurLes modifications à apportées au client et au serveur•• Les différences entre RMI Proxy et HTTP Les différences entre RMI Proxy et HTTP TunnelingTunneling

ConclusionConclusion

Page 4: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

IntroductionIntroduction

RMI (RMI (RemoteRemote MethodMethod Invocation) Invocation) •• est un système distribué est un système distribué •• une ou plusieurs applications peuvent s’exécuter sur une ou une ou plusieurs applications peuvent s’exécuter sur une ou

plusieurs machines plusieurs machines •• Aucun problème s’il n’y a aucun Aucun problème s’il n’y a aucun firewallfirewall entre les deux parties entre les deux parties

communiquantescommuniquantes

Page 5: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

ProblématiqueProblématique

Le problème principal Le problème principal lorsqu’un client veut effectuer un appel RMI sur une machine lorsqu’un client veut effectuer un appel RMI sur une machine

distante est le distante est le firewallfirewall..

FirewallsFirewalls interdisent souvent l’accès interdisent souvent l’accès à certains ports spécialisés comme à certains ports spécialisés comme ceux qu’on désire utiliser lors d’un ceux qu’on désire utiliser lors d’un appel RMI.appel RMI.SolutionSolutiontechniques de techniques de tunnelingtunneling, RMI Proxy ou encore d’autres , RMI Proxy ou encore d’autres peuvent être utilisées.peuvent être utilisées.

Page 6: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

HTTP HTTP TunnelingTunneling

Principe de basePrincipe de baseUtiliser comme protocole de communication des appelles http à Utiliser comme protocole de communication des appelles http à travers le Webtravers le Web

Évite les Évite les firewallsfirewallsen utilisant le port HTTP (80), celuien utilisant le port HTTP (80), celui--ci n’est en général pas ci n’est en général pas boquéboquépar le par le firewallfirewall et le et le firewallfirewall ne peut pas prendre de décisions en ne peut pas prendre de décisions en fonction du contenu des paquets.fonction du contenu des paquets.

PrincipePrincipeLe client utilise une couche supplémentaire (Le client utilise une couche supplémentaire (marshallingmarshalling layer) qui layer) qui encode la requête RMI du client en une requête HTTP valide.encode la requête RMI du client en une requête HTTP valide.

Le serveur de l’autre coté comprend aussi une couche Le serveur de l’autre coté comprend aussi une couche supplémentaire (layer of supplémentaire (layer of demarshallingdemarshalling code), laquelle transforme code), laquelle transforme une requête HTTP en une requête correspondant à celle attendue une requête HTTP en une requête correspondant à celle attendue par le serveur (dans ce cas un requête RMI). par le serveur (dans ce cas un requête RMI).

Page 7: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

HTTP HTTP TunnelingTunneling (2)(2)Le HTTP Le HTTP tunnelingtunneling est divisé en trois est divisé en trois partiesparties ::

Le Client Le Client Envoie une requête au serveur Envoie une requête au serveur webweb

Le Le servletservletTransmet la requête à la Transmet la requête à la socketsocket du serveur RMI en du serveur RMI en préservant la structure HTTP qui a été envoyée par le clientpréservant la structure HTTP qui a été envoyée par le client

Le serveurLe serveurTransforme automatiquement l’envoi HTTP en une Transforme automatiquement l’envoi HTTP en une commande JRMP commande JRMP

Page 8: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

HTTP HTTP TunnelingTunneling (3)(3)

Page 9: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

Comment RMI «Comment RMI « tunnelletunnelle » des » des messagesmessages

But du mécanisme de But du mécanisme de RMI’sRMI’s HTTP HTTP tunnelingtunneling : : encode un appel de méthode à distance encode un appel de méthode à distance à la façon dà la façon d ’une requête POST et ensuite décode la «’une requête POST et ensuite décode la « page page

webweb » retournée» retournée. . RMI utilise son propre mode de RMI utilise son propre mode de socketsocket ((RMIHttpToCGISocketFactoryRMIHttpToCGISocketFactory()()) quand ) quand des connections sont créées. des connections sont créées. Ces Ces socketssockets tentent d’utiliser HTTP tentent d’utiliser HTTP tunnelingtunneling si auparavant elles ont si auparavant elles ont reçu une erreur du serveur. reçu une erreur du serveur.

Page 10: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

Stratégie utilisée pour une invocation de Stratégie utilisée pour une invocation de méthode sur un serveurméthode sur un serveur

Tentent d’établir une connexion JRMP Tentent d’établir une connexion JRMP (Java (Java RemoteRemote MethodMethod Invocation) directe Invocation) directe vers le serveur.vers le serveur.

établir une connexion HTTP directe avec établir une connexion HTTP directe avec le serveur. Ainsi elles créent une le serveur. Ainsi elles créent une connexion par connexion par socketsocket vers le port sur vers le port sur lequel le serveur est en train d’écouter et lequel le serveur est en train d’écouter et ensuite communique en encapsulant les ensuite communique en encapsulant les méthodes demandées dans des requêtes méthodes demandées dans des requêtes HTTP.HTTP.

Page 11: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

Stratégie utilisée pour une invocation Stratégie utilisée pour une invocation de méthode sur un serveur (2)de méthode sur un serveur (2)

•• Utilise le Utilise le firewallfirewall comme un serveur comme un serveur proxyproxy (demandant (demandant au au firewallfirewall de transmettre la requête au port approprié de transmettre la requête au port approprié du serveur). Le du serveur). Le firewallfirewall transmettra la requête comme transmettra la requête comme une requête HTTP (le une requête HTTP (le firewallfirewall ne va pas traduire la ne va pas traduire la requête en appel RMI).requête en appel RMI).

•• Se connecte sur le port 80 de la machine serveur et lui Se connecte sur le port 80 de la machine serveur et lui envoie la requête selon un URL commençant avec envoie la requête selon un URL commençant avec //cgicgi--binbin//javajava--rmirmi..cgicgi.. Cet URL signifie que la requête doit Cet URL signifie que la requête doit être transmise vers un programme qui interprète les être transmise vers un programme qui interprète les requêtes HTTP et qui la transmet, comme une requête requêtes HTTP et qui la transmet, comme une requête HTTP, vers le port approprié du serveur.HTTP, vers le port approprié du serveur.

Chaqu’unChaqu’un de ces points a son sens, la connexion de ces points a son sens, la connexion est établie selon les privilèges que le est établie selon les privilèges que le firewallfirewallaccorde.accorde.

Page 12: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

NamingNaming ServicesServices

La machine serveur dans la quatrième La machine serveur dans la quatrième option est une abstraction, elle n’a pas option est une abstraction, elle n’a pas besoin d’être sur la même machine que besoin d’être sur la même machine que l’objet serveur RMI. Permet donc plus de l’objet serveur RMI. Permet donc plus de flexibilité au HTTP flexibilité au HTTP TunnelingTunneling..Pour ce faire nous devons écrire un Pour ce faire nous devons écrire un servletservletqui effectue la redirection de la requête qui effectue la redirection de la requête RMI vers le serveur RMI, ensuite le RMI vers le serveur RMI, ensuite le serveur serveur webweb est configuré pour envoyer est configuré pour envoyer toutes les requêtes avec l’toutes les requêtes avec l’URLURL approprié. approprié.

Page 13: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

NamingNaming Services (2)Services (2)

Page 14: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

L’implémentation d’un L’implémentation d’un servletservlet pour pour le HTTP le HTTP TunnelingTunneling

La première implémentation, qui permet de La première implémentation, qui permet de transmettre l’invocation de méthodes au serveur transmettre l’invocation de méthodes au serveur RMI, que Sun RMI, que Sun MicrosystemsMicrosystems, , IncInc. Développa était . Développa était un script CGI (un script CGI (javajava--rmirmi..cgicgi))

Chaque invocation distante de méthodes est envoyée Chaque invocation distante de méthodes est envoyée comme une requête HTTP POSTcomme une requête HTTP POST

L’URL complet utilisé est de la forme L’URL complet utilisé est de la forme //cgicgi--binbin//javajava--rmirmi..cgicgi ??forwardforward=[port =[port numbernumber]]

Le corps du POST contient toutes les données de la Le corps du POST contient toutes les données de la requête distante comme un objet sérialisé qui est requête distante comme un objet sérialisé qui est ensuite convertit en une chaîne de caractères ASCII.ensuite convertit en une chaîne de caractères ASCII.

Sun créa ensuite un Sun créa ensuite un servletservlet qui fournit les mêmes qui fournit les mêmes fonctionnalités que le script CGI.fonctionnalités que le script CGI.

Page 15: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

Le code du Le code du servletservlet

Deux classes principales Deux classes principales SimplifiedServletHandlerSimplifiedServletHandler et et ServletForwardCommandServletForwardCommand

SimplifiedServletHandlerSimplifiedServletHandlerCette classe étend Cette classe étend HTTPServletHTTPServlet. Elles reçoit les requêtes et . Elles reçoit les requêtes et effectue un validation préliminaire.effectue un validation préliminaire.

ServletForwardCommandServletForwardCommandC’est une liste de méthodes statiques qui sait comment C’est une liste de méthodes statiques qui sait comment interpréter un HTTP POST et renvoyer ceci au serveur interpréter un HTTP POST et renvoyer ceci au serveur RmiRmiqui tourne sur la même machine.qui tourne sur la même machine.

Page 16: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

Le code du Le code du servletservlet (2)(2)

Explication d’une partie de code de Explication d’une partie de code de SimplifiedServletHandlerSimplifiedServletHandler•• Des testes sont effectués afin de contrôlé la validité de Des testes sont effectués afin de contrôlé la validité de

l’l’URLURL et présence du port, la requête est ensuite et présence du port, la requête est ensuite transmise à la méthode statique transmise à la méthode statique executeexecute()()

if (command.equalsIgnoreCase("forward")) {try { LoggingServletForwardCommand.execute(req, res, param);

} catch (ServletClientException e) {returnClientError(res, "client error: " + e.getMessage());e.printStackTrace();

} catch (ServletServerException e) {returnServerError(res, "internal server error: " + e.getMessage());e.printStackTrace();

}} else {

returnClientError(res, "invalid command: " + command);}

Page 17: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

Le code du Le code du servletservlet (3)(3)Explication d’une partie du code de Explication d’une partie du code de ServletForwardCommandServletForwardCommandon utilise des on utilise des socketssockets pour transmettre le corps du message HTTP pour transmettre le corps du message HTTP au serveur RMI et ensuite des simples «au serveur RMI et ensuite des simples « pipespipes » que le serveur » que le serveur RMI pour retourner des sortis de type RMI pour retourner des sortis de type HttpServletResponseHttpServletResponse((responseresponse). ). ServletForwardCommandServletForwardCommand transmet le message sans décoder les transmet le message sans décoder les données ou comprendre le messagedonnées ou comprendre le message

• socketOut = newDataOutputStream(connectionToLocalServer.getOutputStream());

socketOut.writeBytes("POST / HTTP/1.0\r\n");socketOut.writeBytes("Content-length: " + request.getContentLength() +

"\r\n\r\n");socketOut.write(buffer);socketOut.flush();

• OutputStream out = response.getOutputStream();out.write(buffer);out.flush();

Page 18: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

Modifications à apporter au code Modifications à apporter au code afin d’utiliser le HTTP afin d’utiliser le HTTP TunnelingTunneling

La La socketsocket RMI par défaut tentera automatiquement RMI par défaut tentera automatiquement d’utiliser le HTTP d’utiliser le HTTP tunnelingtunneling quand les autres connexions quand les autres connexions auront échouées.auront échouées.

On ne change ni le code du serveur ni le code du On ne change ni le code du serveur ni le code du client, on ajoute simplement un ligne dans le client, on ajoute simplement un ligne dans le code du client afin qu’il puisse utiliser le HTTP code du client afin qu’il puisse utiliser le HTTP tunnelingtunneling..RMISocketFactoryRMISocketFactory..setSocketFactorysetSocketFactory(new (new sunsun..rmirmi.transport..transport.proxyproxy..RMIHttpTOCGISocketFactoryRMIHttpTOCGISocketFactory())()) ;;

Page 19: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

Configuration du fichier Configuration du fichier policypolicyChaque Chaque servletservlet est obligatoirement exécutée sous est obligatoirement exécutée sous le contrôle d’un gestionnaire de sécurité.le contrôle d’un gestionnaire de sécurité.Les politiques de sécurité appliquées par la JVM Les politiques de sécurité appliquées par la JVM ne permettent pas du téléchargement de code ne permettent pas du téléchargement de code sans permission explicite. Donc dans le fichier sans permission explicite. Donc dans le fichier policiypoliciy du client et du serveur les permissions du client et du serveur les permissions suivantes doivent être ajoutées :suivantes doivent être ajoutées :

•• permission java.permission java.net.SocketPermissionnet.SocketPermission "*:1024"*:1024--65535","65535","connectconnect,,acceptaccept";";•• permission java.permission java.net.SocketPermissionnet.SocketPermission "*:80", ""*:80", "connectconnect";";

Chez le client il y a encore une permission de Chez le client il y a encore une permission de plus affin que celuiplus affin que celui--ci puisse utiliser la ci puisse utiliser la «« RMISocketFactoryRMISocketFactory » :» :

•• permission java.permission java.lang.RuntimePermissionlang.RuntimePermission ""setFactorysetFactory";";

Page 20: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

Exemple de requête RMIExemple de requête RMI

Page 21: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

Seconde techniqueSeconde technique

RMI ProxyRMI Proxy

Page 22: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

Les objectifsLes objectifsEliminer les problèmes de sécurités de RMI à Eliminer les problèmes de sécurités de RMI à travers HTTP pour l’administrateur réseau, via travers HTTP pour l’administrateur réseau, via une application une application firewallfirewall qui ne supporte qui ne supporte uniquement le protocole RMI/JRMP.uniquement le protocole RMI/JRMP.Réduction des Réduction des overheadoverhead comparé au HTTP comparé au HTTP tunnelingtunneling lors du passage à travers un lors du passage à travers un firewallfirewall..Permettre un accès contrôlé des appels du coté Permettre un accès contrôlé des appels du coté client derrière un client derrière un firewallfirewall..Préserver toutes les propriétés de RMIPréserver toutes les propriétés de RMIRequérir un minimum de modifications de code Requérir un minimum de modifications de code chez le client et le serveur RMIchez le client et le serveur RMIReprendre le maximum d’avantages existants Reprendre le maximum d’avantages existants dans les classes java.dans les classes java.

Page 23: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

Les caractéristiquesLes caractéristiquesRMI Proxy est une application Java et une API RMI Proxy est une application Java et une API permettant le contrôle de la pénétration dans un permettant le contrôle de la pénétration dans un firewallfirewall en approuvant les clients et les serveurs en approuvant les clients et les serveurs RMI.RMI.RMI Proxy est capable de:RMI Proxy est capable de:•• Bloquer l’accès aux protocoles nonBloquer l’accès aux protocoles non--JRMPJRMP•• Contrôler les écritures vers la RMI Proxy Contrôler les écritures vers la RMI Proxy RegistryRegistry selon selon

l’identification de l’hôte clientl’identification de l’hôte client•• Permettre ou refuser l’accès et l’exécution de méthodes Permettre ou refuser l’accès et l’exécution de méthodes

distantes au client RMI, selon l’identificateur de l’hôte distantes au client RMI, selon l’identificateur de l’hôte client.client.

•• Permettre ou refuser le transfert de code par le service Permettre ou refuser le transfert de code par le service du du codebasecodebase RMI, dans les deux directionsRMI, dans les deux directions

Page 24: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

Le contrôle d’accèsLe contrôle d’accèsIl est fournit par les fichiers Java Il est fournit par les fichiers Java policypolicy, lesquels , lesquels contrôle la communication à travers les contrôle la communication à travers les firewallsfirewalls..Le contrôle d’accès s’effectue selon l’adresse IP Le contrôle d’accès s’effectue selon l’adresse IP ou le nom du client voulant passer le ou le nom du client voulant passer le firewallfirewall et et de l’action qu’il veut effectuer. Classe spécialisée de l’action qu’il veut effectuer. Classe spécialisée : «: « FirewallPermissionFirewallPermission »»Le contrôle est capable d’être contre les actions Le contrôle est capable d’être contre les actions suivantes :suivantes :•• L’accès à certain objetL’accès à certain objet•• BindBind, , rebindrebind ou ou unbindunbind certain nomcertain nom•• L’exécution de certaines méthodes distantesL’exécution de certaines méthodes distantes•• Chercher certains noms dans la Chercher certains noms dans la proxyproxy registryregistry

Page 25: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

L’architectureL’architectureComposants importants :Composants importants :•• Le programme RMI Proxy, lequel s’exécute dans les Le programme RMI Proxy, lequel s’exécute dans les

machines machines proxyproxy désignées.désignées.•• La classe La classe ProxyNamingProxyNaming, une classe , une classe NamingNaming modifiée, modifiée,

appelée par les clients et serveurs RMI.appelée par les clients et serveurs RMI.

SousSous--composantscomposants•• La La proxyproxy registryregistry

RMI RMI registryregistry normale qui est soumise aux règles de normale qui est soumise aux règles de contrôles d’accès fournis par l’implémentation du serveur contrôles d’accès fournis par l’implémentation du serveur RMIProxyRMIProxy

•• Un protocole RMIUn protocole RMInégocie entre les flux descendants du serveur RMI et les négocie entre les flux descendants du serveur RMI et les flux montants du client RMI, effectuant la validation du flux montants du client RMI, effectuant la validation du protocole et le contrôle d’accès dans le processusprotocole et le contrôle d’accès dans le processus

Page 26: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

Fonctionnement de RMI ProxyFonctionnement de RMI ProxyPour le client RMI, une Pour le client RMI, une opération «opération « lookuplookup » sur un » sur un objet distant doit être dirigée objet distant doit être dirigée vers le serveur vers le serveur proxyproxy..

Si le client est aussi luiSi le client est aussi lui--même même derrière un derrière un firewallfirewall, le , le «« lookuplookup » est délégué à son » est délégué à son RMI Proxy.RMI Proxy.

La partie extérieur du La partie extérieur du proxyproxydu client est capable de du client est capable de communiquer par RMI avec la communiquer par RMI avec la partie extérieur du partie extérieur du proxyproxyserveur.serveur.

Les Les proxiesproxies RMI servent RMI servent d’intermédiaires entre les d’intermédiaires entre les entrés vers le serveur et les entrés vers le serveur et les sorties du client. sorties du client.

Page 27: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

RMI Proxy (2)RMI Proxy (2)Le RMI Le RMI proxyproxy RegistryRegistryet les composants et les composants serveur sont installés serveur sont installés en association avec en association avec chaque chaque firewallfirewall qui qui existe entre le client existe entre le client RMI et le serveur RMI.RMI et le serveur RMI.

Chacun doit ouvrir un Chacun doit ouvrir un port au trafique RMI, port au trafique RMI, lequel est ensuite lequel est ensuite manipulé d’un manipulé d’un manière sécurisée par manière sécurisée par le RMI le RMI proxyproxy associé.associé.

Page 28: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

L’API côté client et serveurL’API côté client et serveur

Le client est derrière plusieurs Le client est derrière plusieurs firewallfirewall --> délègue le > délègue le lookuplookup au au proxyproxy final coté client (final coté client (gracegrace à la propriété à la propriété rmirmi..proxyHostproxyHost) puis ) puis un un stubstub est obtenu.est obtenu.Le serveur exécute un Le serveur exécute un bindbind dans la chaîne de dans la chaîne de registryregistry des des proxyproxyen déléguant le en déléguant le bindbind. Il est donc lié à la . Il est donc lié à la registryregistry locale et aux locale et aux registryregistry de toute la chaîne des de toute la chaîne des proxyproxy

Page 29: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

Limitations du RMI ProxyLimitations du RMI ProxyActivationActivation•• L’implémentation actuelle réécrit les L’implémentation actuelle réécrit les stubsstubs activables comme activables comme

des des stubsstubs unicastunicast normauxnormauxStubsStubs cachéscachés•• N’effectue pas d’arrangement N’effectue pas d’arrangement proxyingproxying pour les pour les stubsstubs cachés cachés

((StubsStubs à l’intérieur de à l’intérieur de MarshalledObjectsMarshalledObjects))SocketSocket FactoriesFactories•• SocketSocket factoriesfactories ne sont actuellement pas supportéesne sont actuellement pas supportées

GetClientHostGetClientHost•• RmoteServerRmoteServer..getClientHostgetClientHost retourne l’retourne l’InetAddressInetAddress du RMI du RMI

Proxy le plus proche et non le vrai client RMIProxy le plus proche et non le vrai client RMIRMI/IIOP (RMI/IIOP (Internet Internet InterInter--OrbOrb ProtocolProtocol))•• Ne supporte pas les Ne supporte pas les stubsstubs RMI/IIOPRMI/IIOP

StubsStubs distants indirectesdistants indirectes•• Petite modification nécessaire dans la classe Petite modification nécessaire dans la classe

sunsun..rmirmi..MarshalOutputStreamMarshalOutputStream pour traiter les pour traiter les stubsstubs distants distants indirectesindirectes

Page 30: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

Les modifications à apportées au Les modifications à apportées au client et au serveurclient et au serveur

Du coté serveur la classe Du coté serveur la classe comcom..rmiproxyrmiproxy..ProxyNamingProxyNaming doit doit être utilisée à la place de la classe être utilisée à la place de la classe java.java.rmirmi..NamingNaming..

Exemple de codeExemple de code ::ProxyNamingProxyNaming..bindbind(«(« rmirmi://://localhostlocalhost// » + » + RemoteEchoRemoteEcho.class..class.getNamegetName())()) ;;

Du coté client le même principe doit être utilisé on Du coté client le même principe doit être utilisé on remplace la classe java.remplace la classe java.rmi.Namingrmi.Naming par la classe par la classe com.rmiproxy.ProxyNaming.com.rmiproxy.ProxyNaming.

Exemple de codeExemple de code ::RemoteEchoRemoteEcho echoObjectechoObject = = ((RemoteEchoRemoteEcho))ProxyNamingProxyNaming..lookuplookup(«(« rmirmi://://rmirmi..serverserver..comcom// »»++RemoteEchoRemoteEcho.class..class.getNamegetName())()) ;;

Définir les propriétés du système Définir les propriétés du système rmirmi..proxyHostproxyHost

Exemple : Rmi.proxyHost=rmi://proxy.clientlan0.client.com

Configurer le fichier Configurer le fichier policypolicy du client et du serveur.du client et du serveur.Installer Installer ProxyBootProxyBoot.jar, .jar, ProxyMainProxyMain.jar et .jar et RMIProxyRMIProxy..policypolicysur chaque machine sur chaque machine proxyproxy..

Page 31: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

Les différences entre RMI Proxy et Les différences entre RMI Proxy et HTTP HTTP TunnelingTunneling

Connexion ne se referme pas après chaque requête.

Inefficacité de la connexion, il ne peut pas créer un connexion et la laisser ouverte pour pouvoir la réutiliser, il doit créer une nouvelle socket pour chaque requête qu’il effectue.

Fonctionne avec tout type de firewall.Il ne fonctionne pas à travers tous les types de firewall.

Les requêtes sont des requêtes RMI sans information supplémentaire.

Ces performances sont faibles.Il encode beaucoup d’informations dans chaque message de requête. Il doit créer une nouvelle socket pour chaque requête qu’il effectue.

Plus robuste au changement du firewall.Il n’est pas très fiable. Si on modifie le firewall il est possible que le tunneling ne fonctionne plus.

RMI ProxyHTTP tunneling

Page 32: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

ConclusionConclusion

Le RMI Proxy est certainement une méthode Le RMI Proxy est certainement une méthode bien meilleur que le HTTP bien meilleur que le HTTP tunnelingtunneling, car elle , car elle ne comporte que des avantages sur cette ne comporte que des avantages sur cette dernière. dernière.

Page 33: Implementing a simple RMI Application over the Internet ...diuf.unifr.ch/drupal/sites/diuf.unifr.ch.drupal.softeng/files/... · RMI vers le serveur RMI, ensuite le serveur web est

QUESTION?QUESTION?