Astuce Java 42: écrivez des applications Java qui fonctionnent avec des pare-feu proxy

Presque chaque entreprise se soucie de protéger son réseau interne contre les pirates et les voleurs. Une mesure de sécurité courante consiste à déconnecter complètement le réseau d'entreprise d'Internet. Si les méchants ne peuvent se connecter à aucune de vos machines, ils ne peuvent pas les pirater. L'effet secondaire malheureux de cette tactique est que les utilisateurs internes ne peuvent pas accéder aux serveurs Internet externes, comme Yahoo ou JavaWorld.. Pour résoudre ce problème, les administrateurs réseau installent souvent quelque chose appelé «serveur proxy». Essentiellement, un proxy est un service qui se situe entre Internet et le réseau interne et gère les connexions entre les deux mondes. Les proxies aident à réduire les menaces de sécurité extérieures tout en permettant aux utilisateurs internes d'accéder aux services Internet. Bien que Java facilite l'écriture de clients Internet, ces clients sont inutiles à moins qu'ils ne puissent dépasser votre proxy. Heureusement, Java facilite le travail avec des proxys - si vous connaissez les mots magiques, c'est.

Le secret pour combiner Java et les proxies réside dans l'activation de certaines propriétés système dans l'environnement d'exécution Java. Ces propriétés semblent non documentées et sont chuchotées entre les programmeurs dans le cadre du folklore Java. Afin de travailler avec un proxy, votre application Java doit spécifier des informations sur le proxy lui-même ainsi que des informations utilisateur à des fins d'authentification. Dans votre programme, avant de commencer à travailler avec des protocoles Internet, vous devrez ajouter les lignes suivantes:

System.getProperties (). Put ("proxySet", "true"); System.getProperties (). Put ("proxyHost", "myProxyMachineName"); System.getProperties (). Put ("proxyPort", "85");

La première ligne ci-dessus indique à Java que vous utiliserez un proxy pour vos connexions, la deuxième ligne spécifie la machine sur laquelle vit le proxy et la troisième ligne indique sur quel port le proxy écoute. Certains proxys exigent qu'un utilisateur saisisse un nom d'utilisateur et un mot de passe avant de pouvoir accéder à Internet. Vous avez probablement rencontré ce problème si vous utilisez un navigateur Web derrière un pare-feu. Voici comment effectuer l'authentification:

Connexion URLConnection = url.openConnection (); String password = "nom d'utilisateur: mot de passe"; String encodedPassword = base64Encode (mot de passe); connection.setRequestProperty ("Proxy-Authorization", encodedPassword);

L'idée derrière le fragment de code ci-dessus est que vous devez ajuster votre en-tête HTTP pour envoyer vos informations utilisateur. Ceci est réalisé avec l' setRequestProperty()appel. Cette méthode vous permet de manipuler les en-têtes HTTP avant l'envoi de la requête. HTTP requiert que le nom d'utilisateur et le mot de passe soient encodés en base64. Heureusement, il existe quelques API du domaine public qui effectueront l'encodage pour vous (voir la section Ressources).

Comme vous pouvez le voir, il n'y a pas grand-chose à ajouter à la prise en charge du proxy à votre application Java. Compte tenu de ce que vous savez maintenant et d'un peu de recherche (vous devrez découvrir comment votre proxy gère le protocole qui vous intéresse et comment gérer l'authentification des utilisateurs), vous pouvez implémenter votre proxy avec d'autres protocoles.

Proxying FTP

Scott D.Taylor a envoyé l'incantation magique pour traiter le proxy du protocole FTP:

defaultProperties.put ("ftpProxySet", "true"); defaultProperties.put ("ftpProxyHost", "nom-d'hôte-proxy"); defaultProperties.put ("ftpProxyPort", "85");

Vous pouvez ensuite accéder aux URL des fichiers en utilisant le protocole "ftp" via quelque chose comme:

URL url = nouvelle URL ("ftp://ftp.netscape.com/pub/navigator/3.04/windows/readme.txt"); 

Si quelqu'un a des exemples d'utilisation d'un proxy avec d'autres protocoles Internet, je serais ravi de les voir.

Remarque: l'exemple de code (Example.java) a été testé uniquement avec JDK 1.1.4.

Ron Kurr travaille en tant qu'ingénieur logiciel chez Cabletron Systems depuis huit ans, utilisant C ++, Unix et NT. Depuis deux ans, il se consacre aux technologies Java et Internet.

En savoir plus sur ce sujet

  • java.lang.System //www.javasoft.com/products/jdk/1.1/docs/api/java.lang.System.html
  • java.net.URLConnection //www.javasoft.com/products/jdk/1.1/docs/api/java.net.URLConnection.html
  • API client HTTP //www.innovation.ch/java/HTTPClient/
  • Systèmes Cabletron //www.cabletron.com/
  • CsProxy (un serveur proxy gratuit) //www.cabletron.com/csproxy/
  • RFC pertinentes //www.cabletron.com/csproxy/handbook/rfc/

Cette histoire, «Astuce Java 42: Ecrire des applications Java fonctionnant avec des pare-feu proxy» a été publiée à l'origine par JavaWorld.