Proxy server : serveur délégué, serveur de délégation.

Besoin

Déléguer les communications réseau à un serveur intermédiaire.

Analyse

On distingue plusieurs types de proxys :

  • Web (HTTP)
  • FTP
  • SOCKS : de moins en moins utilisée de par la démocratisation de SOCKS qui est aujourd'hui implémenté dans de nombreux clients réseaux (navigateurs notamment), l'un des avantages de ce protocole est de pouvoir être exploité de manière transparente pour l'utilisateur.

Implémentation

HTTP

Depuis Java 1.1, il est possible de configurer l'utilisation d'un proxy pour les requêtes HTTP.

La classe abstraite java.net.HttpURLConnection dispose en effet d'une méthode usingProxy() indiquant si la connection passe par un proxy HTTP, et la classe privée sun.net.www.http.HttpClient sait gérer

Il faut pour cela effectuer une configuration via les propriétés système Java http.proxySet=true http.proxyHost=myProxy et http.proxyPort=myPort.

FTP

Depuis Java 1.1, il est possible de configurer l'utilisation d'un proxy pour les requêtes FTP.

Il faut pour cela effectuer une configuration via les propriétés système Java ftpProxyHost et ftpProxyPort.

SOCKS

l'implémentation par défaut des sockets (classe non publique java.net.PlainSocketImpl) supporte le protocole SOCKS version 4, et peut être paramétrée pour contacter un serveur SOCKS en fixant la valeur de la propriété Java socksProxyHost, et éventuellement socksProxyPort si le port de ce serveur est différent de 1080 (le port SOCKS par défaut). La propriété user.name sera également utilisée dans ce protocole.

Cette implémentation par défaut peut aussi être remplacée par une autre (des sockets SOCKS, des sockets compressant leurs données...)

  • grâce à une fabrique de sockets (classe dérivant de java.net.SocketFactory et fournissant une spécialisation de java.net.SocketImpl). Cet possibilité est cependant limitée, dans la mesure où une seule fabrique peut-être utilisée à un moment donné.
  • en dérivant les classes java.net.Socket et java.net.ServerSocket à partir de Java 1.1, où ces classes sont devenues dérivables (elles ne sont plus finales, seules certaines méthodes le sont pour des raisons de sécurité). Cette possibilité peut malgré tout être combinée à l'utilisation de la fabrique de sockets (des sockets spécialisées pourront souhaiter conserver le support des proxys d'une fabriques par exemple).

Exemples

  • SOCKS
    • SOCKSCap (SOCKS Capabilities) : disponible sur Win32, il permet d'exploiter SOCKS sans changer le code ni paramétrer ses logiciels (navigateurs par exemple) qui ne connaissent pas SOCKS à l'origine. Il suffit de soumettre l'application à exécuter à SocksCap, qui se charge de remplacer la pile TCP-IP vue par l'application cliente. En fait, la pile TCP-IP de SocksCap convertit de manière transparente les appels de l'application cliente en appels SOCKS, adressés au serveur SOCKS local (dont l'adresse et le port sont à configurer dans SocksCap).