Implementing a simple RMI Application over the Internet (using and comparing HTTP tunneling, RMI...

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

Transcript of Implementing a simple RMI Application over the Internet (using and comparing HTTP tunneling, RMI...

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

Implementing a simple Implementing a simple RMI Application over the RMI Application over the

Internet Internet (using and comparing HTTP tunneling, RMI Proxy)(using and comparing HTTP tunneling, RMI Proxy)

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

Plan de l ’exposéPlan de l ’exposé

IntroductionIntroduction ProblématiqueProblématique HTTP tunnelingHTTP tunneling

• Comment RMI « tunnelle » des messagesComment RMI « tunnelle » 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• Naming ServicesNaming Services• L’implémentation d’un servlet pour le HTTP TunnelingL’implémentation d’un servlet pour le HTTP Tunneling• Modifications à apporter au code afin d’utiliser le HTTP Modifications à apporter au code afin d’utiliser le HTTP

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

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

Plan de l ’exposé (2)Plan de l ’exposé (2) RMI ProxyRMI Proxy

• Les objectifsLes objectifs• Les caractérisitiquesLes caracté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 TunnelingLes différences entre RMI Proxy et HTTP Tunneling

ConclusionConclusion

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

IntroductionIntroduction

RMI (Remote Method Invocation) RMI (Remote Method 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 firewall entre les deux parties Aucun problème s’il n’y a aucun firewall entre les deux parties

communiquantescommuniquantes

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

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 firewall.distante est le firewall. Firewalls interdisent souvent l’accès Firewalls 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 tunneling, RMI Proxy ou encore d’autres techniques de tunneling, RMI Proxy ou encore d’autres peuvent être utilisées.peuvent être utilisées.

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

HTTP TunnelingHTTP Tunneling Principe de basePrincipe de base

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

Évite les firewalls Évite les firewalls en utilisant le port HTTP (80), celui-ci n’est en général pas boqué en utilisant le port HTTP (80), celui-ci n’est en général pas boqué par le firewall et le firewall ne peut pas prendre de décisions en par le firewall et le firewall 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 (marshalling layer) qui Le client utilise une couche supplémentaire (marshalling 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 demarshalling code), laquelle transforme supplémentaire (layer of demarshalling 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 (using and comparing HTTP tunneling, RMI Proxy)

HTTP Tunneling (2)HTTP Tunneling (2)

Le HTTP tunneling est divisé en trois Le HTTP tunneling est divisé en trois parties :parties :

Le Client Le Client Envoie une requête au serveur webEnvoie une requête au serveur web

Le servletLe servletTransmet la requête à la socket du serveur RMI en Transmet la requête à la socket 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 (using and comparing HTTP tunneling, RMI Proxy)

HTTP Tunneling (3)HTTP Tunneling (3)

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

Comment RMI « tunnelle » des Comment RMI « tunnelle » des messagesmessages

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

web » retournéeweb » retournée. . RMI utilise son propre mode de RMI utilise son propre mode de

socket (socket (RMIHttpToCGISocketFactory()RMIHttpToCGISocketFactory()) quand ) quand des connections sont créées. des connections sont créées.

Ces sockets tentent d’utiliser HTTP Ces sockets tentent d’utiliser HTTP tunneling si auparavant elles ont tunneling 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 (using and comparing HTTP tunneling, RMI Proxy)

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 Remote Method Invocation) directe (Java Remote Method 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 socket vers le port sur connexion par socket 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 (using and comparing HTTP tunneling, RMI Proxy)

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 firewall comme un serveur proxy (demandant Utilise le firewall comme un serveur proxy (demandant au firewall de transmettre la requête au port approprié au firewall de transmettre la requête au port approprié du serveur). Le firewall transmettra la requête comme du serveur). Le firewall transmettra la requête comme une requête HTTP (le firewall ne va pas traduire la une requête HTTP (le firewall 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 /cgi-/cgi-bin/java-rmi.cgi.bin/java-rmi.cgi. Cet URL signifie que la requête doit être Cet URL signifie que la requête doit être transmise vers un programme qui interprète les 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’un de ces points a son sens, la connexion Chaqu’un de ces points a son sens, la connexion est établie selon les privilèges que le firewall est établie selon les privilèges que le firewall accorde.accorde.

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

Naming ServicesNaming Services

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 Tunneling.flexibilité au HTTP Tunneling.

Pour ce faire nous devons écrire un servlet Pour ce faire nous devons écrire un servlet qui effectue la redirection de la requête qui effectue la redirection de la requête RMI vers le serveur RMI, ensuite le serveur RMI vers le serveur RMI, ensuite le serveur web est configuré pour envoyer toutes les web est configuré pour envoyer toutes les requêtes avec l’URL approprié. requêtes avec l’URL approprié.

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

Naming Services (2)Naming Services (2)

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

L’implémentation d’un servlet pour L’implémentation d’un servlet pour le HTTP Tunnelingle HTTP Tunneling

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 Microsystems, Inc. Développa était RMI, que Sun Microsystems, Inc. Développa était un script CGI (un script CGI (java-rmi.cgijava-rmi.cgi))

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 /cgi-bin/java-rmi.cgi ?forward=[port number]/cgi-bin/java-rmi.cgi ?forward=[port number]

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 servlet qui fournit les mêmes Sun créa ensuite un servlet 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 (using and comparing HTTP tunneling, RMI Proxy)

Le code du servletLe code du servlet

Deux classes principales Deux classes principales SimplifiedServletHandler et ServletForwardCommandSimplifiedServletHandler et ServletForwardCommand

SimplifiedServletHandlerSimplifiedServletHandlerCette classe étend HTTPServlet. Elles reçoit les requêtes et Cette classe étend HTTPServlet. 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 Rmi interpréter un HTTP POST et renvoyer ceci au serveur Rmi qui tourne sur la même machine.qui tourne sur la même machine.

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

Le code du servlet (2)Le code du servlet (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’URL et présence du port, la requête est ensuite transmise l’URL et présence du port, la requête est ensuite transmise à la méthode statique à la méthode statique execute()execute()

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 (using and comparing HTTP tunneling, RMI Proxy)

Le code du servlet (3)Le code du servlet (3)

Explication d’une partie du code de Explication d’une partie du code de ServletForwardCommandServletForwardCommand

on utilise des sockets pour transmettre le corps du message HTTP on utilise des sockets pour transmettre le corps du message HTTP au serveur RMI et ensuite des simples « pipes » que le serveur RMI au serveur RMI et ensuite des simples « pipes » que le serveur RMI pour retourner des sortis de type HttpServletResponse (response). pour retourner des sortis de type HttpServletResponse (response).

ServletForwardCommand transmet le message sans décoder les ServletForwardCommand transmet le message sans décoder les données ou comprendre le messagedonnées ou comprendre le message

• socketOut = new

DataOutputStream(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 (using and comparing HTTP tunneling, RMI Proxy)

Modifications à apporter au code Modifications à apporter au code afin d’utiliser le HTTP Tunnelingafin d’utiliser le HTTP Tunneling

La socket RMI par défaut tentera automatiquement La socket RMI par défaut tentera automatiquement d’utiliser le HTTP tunneling quand les autres connexions d’utiliser le HTTP tunneling 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 tunneling.tunneling.RMISocketFactory.setSocketFactory(new sun.rmi.transport.proxy.RMIHttpTOCGISocketFactory()) ;RMISocketFactory.setSocketFactory(new sun.rmi.transport.proxy.RMIHttpTOCGISocketFactory()) ;

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

Configuration du fichier policyConfiguration du fichier policy Chaque servlet est obligatoirement exécutée sous Chaque servlet 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 policiy du client et du serveur les permissions policiy du client et du serveur les permissions suivantes doivent être ajoutées :suivantes doivent être ajoutées :

• permission java.net.SocketPermission "*:1024-65535","connect,accept";permission java.net.SocketPermission "*:1024-65535","connect,accept";• permission java.net.SocketPermission "*:80", "connect";permission java.net.SocketPermission "*:80", "connect";

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

• permission java.lang.RuntimePermission "setFactory";permission java.lang.RuntimePermission "setFactory";

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

Exemple de requête RMIExemple de requête RMI

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

Seconde techniqueSeconde technique

RMI ProxyRMI Proxy

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

Les objectifsLes objectifs Eliminer 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 firewall qui ne supporte une application firewall qui ne supporte uniquement le protocole RMI/JRMP.uniquement le protocole RMI/JRMP.

Réduction des overhead comparé au HTTP Réduction des overhead comparé au HTTP tunneling lors du passage à travers un firewall.tunneling lors du passage à travers un firewall.

Permettre un accès contrôlé des appels du coté Permettre un accès contrôlé des appels du coté client derrière un firewall.client derrière un firewall.

Préserver toutes les propriétés de RMIPréserver toutes les propriétés de RMI Requé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 RMI Reprendre 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 (using and comparing HTTP tunneling, RMI Proxy)

Les caractéristiquesLes caractéristiques RMI 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 firewall en approuvant les clients et les serveurs firewall 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 non-JRMPBloquer l’accès aux protocoles non-JRMP• Contrôler les écritures vers la RMI Proxy Registry selon Contrôler les écritures vers la RMI Proxy Registry 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 codebase RMI, dans les deux directionsdu codebase RMI, dans les deux directions

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

Le contrôle d’accèsLe contrôle d’accès Il est fournit par les fichiers Java policy, lesquels Il est fournit par les fichiers Java policy, lesquels

contrôle la communication à travers les firewalls.contrôle la communication à travers les firewalls. 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 firewall et ou le nom du client voulant passer le firewall et de l’action qu’il veut effectuer. Classe de l’action qu’il veut effectuer. Classe spécialisée : « FirewallPermission »spécialisée : « FirewallPermission »

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• Bind, rebind ou unbind certain nomBind, rebind ou unbind certain nom• L’exécution de certaines méthodes distantesL’exécution de certaines méthodes distantes• Chercher certains noms dans la proxy registry Chercher certains noms dans la proxy registry

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

L’architectureL’architecture Composants importants :Composants importants :

• Le programme RMI Proxy, lequel s’exécute dans les Le programme RMI Proxy, lequel s’exécute dans les machines proxy désignées.machines proxy désignées.

• La classe ProxyNaming, une classe Naming modifiée, La classe ProxyNaming, une classe Naming modifiée, appelée par les clients et serveurs RMI.appelée par les clients et serveurs RMI.

Sous-composantsSous-composants• La proxy registryLa proxy registry

RMI registry normale qui est soumise aux règles de RMI registry 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 RMI né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 (using and comparing HTTP tunneling, RMI Proxy)

Fonctionnement de RMI ProxyFonctionnement de RMI Proxy Pour le client RMI, une Pour le client RMI, une

opération « lookup » sur un opération « lookup » sur un objet distant doit être dirigée objet distant doit être dirigée vers le serveur proxy.vers le serveur proxy.

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

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

Les proxies RMI servent Les proxies 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 (using and comparing HTTP tunneling, RMI Proxy)

RMI Proxy (2)RMI Proxy (2) Le RMI proxy Registry Le RMI proxy Registry

et les composants et les composants serveur sont installés serveur sont installés en association avec en association avec chaque firewall qui chaque firewall 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 proxy associé.le RMI proxy associé.

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

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

Le client est derrière plusieurs firewall -> délègue le lookup au Le client est derrière plusieurs firewall -> délègue le lookup au proxy final coté client (grace à la propriété rmi.proxyHost) puis proxy final coté client (grace à la propriété rmi.proxyHost) puis un stub est obtenu.un stub est obtenu.

Le serveur exécute un bind dans la chaîne de registry des proxy Le serveur exécute un bind dans la chaîne de registry des proxy en déléguant le bind. Il est donc lié à la registry locale et aux en déléguant le bind. Il est donc lié à la registry locale et aux registry de toute la chaîne des proxyregistry de toute la chaîne des proxy

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

Limitations du RMI ProxyLimitations du RMI Proxy ActivationActivation

• L’implémentation actuelle réécrit les stubs activables comme L’implémentation actuelle réécrit les stubs activables comme des stubs unicast normauxdes stubs unicast normaux

Stubs cachésStubs cachés• N’effectue pas d’arrangement proxying pour les stubs cachés N’effectue pas d’arrangement proxying pour les stubs cachés

(Stubs à l’intérieur de MarshalledObjects)(Stubs à l’intérieur de MarshalledObjects) Socket FactoriesSocket Factories

• Socket factories ne sont actuellement pas supportéesSocket factories ne sont actuellement pas supportées GetClientHostGetClientHost

• RmoteServer.getClientHost retourne l’InetAddress du RMI RmoteServer.getClientHost retourne l’InetAddress du RMI Proxy le plus proche et non le vrai client RMIProxy le plus proche et non le vrai client RMI

RMI/IIOP (RMI/IIOP (Internet Inter-Orb Protocol)Internet Inter-Orb Protocol)• Ne supporte pas les stubs RMI/IIOPNe supporte pas les stubs RMI/IIOP

Stubs distants indirectesStubs distants indirectes• Petite modification nécessaire dans la classe Petite modification nécessaire dans la classe

sun.rmi.MarshalOutputStream pour traiter les stubs distants sun.rmi.MarshalOutputStream pour traiter les stubs distants indirectesindirectes

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

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 com.rmiproxy.ProxyNaming com.rmiproxy.ProxyNaming doit doit être utilisée à la place de la classe être utilisée à la place de la classe java.rmi.Namingjava.rmi.Naming..

Exemple de code :Exemple de code :ProxyNaming.bind(« rmi://localhost/ » + RemoteEcho.class.getName()) ;ProxyNaming.bind(« rmi://localhost/ » + RemoteEcho.class.getName()) ;

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.rmi.Naming par la classe remplace la classe java.rmi.Naming par la classe com.rmiproxy.ProxyNaming. com.rmiproxy.ProxyNaming.

Exemple de code :Exemple de code :RemoteEcho echoObject = RemoteEcho echoObject = (RemoteEcho)ProxyNaming.lookup(« rmi://rmi.server.com/ »(RemoteEcho)ProxyNaming.lookup(« rmi://rmi.server.com/ »+RemoteEcho.class.getName()) ;+RemoteEcho.class.getName()) ;

Définir les propriétés du système rmi.proxyHostDéfinir les propriétés du système rmi.proxyHost Exemple :

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

Configurer le fichier policy du client et du serveur.Configurer le fichier policy du client et du serveur. Installer ProxyBoot.jar, ProxyMain.jar et RMIProxy.policy sur Installer ProxyBoot.jar, ProxyMain.jar et RMIProxy.policy sur

chaque machine proxy.chaque machine proxy.

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

Les différences entre RMI Proxy et Les différences entre RMI Proxy et HTTP TunnelingHTTP Tunneling

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 (using and comparing HTTP tunneling, RMI Proxy)

ConclusionConclusion

Le RMI Proxy est certainement une méthode Le RMI Proxy est certainement une méthode bien meilleur que le HTTP tunneling, car elle bien meilleur que le HTTP tunneling, 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 (using and comparing HTTP tunneling, RMI Proxy)

QUESTION?QUESTION?