SOCKet-and-Secure : prise sécurisée.
Motivation
Protocole de proxy pour les environnements client/serveur.
Principes
SOCKS définit le dialogue entre :
- un client SOCKS (une application implémentant l'API SOCKS, un navigateur par exemple)
- un serveur SOCKS (un proxy), implémenté au niveau de la couche Application (au-dessus de la couche Transport, et
donc au-dessus de TCP).
Deux versions de SOCKS sont principalement utilisées
- SOCKS V4, qui fournit les fonctions de base de requête/réponse, mais uniquement sur TCP-IP. n1Avant SOCKS V4.3, le client
SOCKS doit résoudre les adresses IP. À partir de SOCKS V4.3, un client
SOCKS peut fournir des adresses IP non résolues au serveur SOCKS.
- SOCKS V5, qui supporte les proxy UDP et ajoute une fonctionalité d'authentification selon diverses
méthodes. Bien que ce soit souvent le cas (NEC par exemple), il n'est pas garanti que les implémentations de SOCKS
V5 supportent SOCKS V4.
Java 2 n'implémente que SOCKS V4, et ne supporte donc pas (à
moins de l'implémenter soi-même) les proxy UDP et l'authentification via SOCKS. Un client Java devra résoudre les
adresses IP avant de les transmettre à un serveur SOCKS si ce serveur contient une version de SOCKS inférieure à
SOCKS 4.3.
Tous les serveurs SOCKS ne supportent pas la traversée de plusieurs serveurs socksifiés (un serveur SOCKS doit
lui-même émettre une requête SOCKS, etc.). Ce cas de figure est généralement supporté par les implémentations de
serveurs SOCKS supérieures à 4.3 (rsockd). SOCKS V5 supporte toujours cette fonctionnalité.
Notes
- Ne pas confondre un serveur SOCKS avec un proxy
HTTP. Le serveur SOCKS attend des requêtes dans le protocole SOCKS et
non HTTP : si l'on spécifie l'adresse d'un
serveur SOCKS comme proxy HTTP (dans un navigateur, dans le JPI,
etc.), on pourra observer des erreurs telles que
Incompatible version
number: 71
, parce que 71 est le code ASCII
de la lettre G
, première lettre de la commande HTTP GET
,
ou 80 (P
) pour une requête POST
, etc.
- Mettre un serveur
applicatif derrière un serveur SOCKS est possible, mais implique
que les clients de ce serveur applicatif
(navigateurs par exemple) soient au courant de l'existence du serveur SOCKS
(qu'ils contactent le serveur SOCKS sur son port et via le protocole SOCKS,
et non directement le serveur applicatif).
- Des clients ping ou traceroute ne pourront pas non
plus traverser un serveur SOCKS, dans la mesure où ces utilitaires
utilisent ICMP, et non pas un des protocoles sur lequels
SOCKS est basé, à savoir TCP-IP et UDP.
- SOCKS V5 est un standard de l'IETF (RFC 1928).
Exemples
Il existe diverses implémentations de SOCKS, dont :
- des extensions de WinSock
- des pîles TCP-IP socksifiées