Python Proxy HTTPS

Inscrit
26 Février 2016
Messages
82
Reactions
0
#1
Bonjour à tous,

Je suis actuellement entrain de développer un proxy d'un site utilisant le protocole HTTPS. Le problème avec ces sites là c'est qu'il y a des certificats de sécurité et j’avoue ne pas trop savoir quoi envoyer au client..

Merci de votre aide !
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#2
Aucune information, impossible de t'aider.
 
Inscrit
21 Octobre 2016
Messages
2
Reactions
0
#3
Bonjour @Valwex ,

Pour commencer, il faudrait éclaircir ce que tu cherche à faire, et peut-être ce qu'est un proxy.

Un proxy va écouter sur un port (rôle serveur) et se connecter à un serveur (rôle client).
Lorsqu'un client se connecte et envoi des paquets au proxy, le proxy les transmet au serveur, et vice-versa...

Ça, c'est le fonctionnement d'un proxy. Au final, que tu fasse du HTTP/HTTPS/TELNET/SSH/SMTP ou n'importe quel protocole réseau, le proxy fonctionnera pareil: il ne fait que transmettre les paquets.

Par définition, TLS (ou SSL, qui tend à disparaître car vulnérable) sert à deux choses:
  • Chiffrer les paquets
  • Garantir l'authenticité du serveur
Le chiffrement est assuré par divers casses-têtes cryptographiques pour aboutir à quelque-chose qu'on assimile souvent à un "tunnel": A moins d'être à une des deux extrémités du tunnel, il est "impossible" (rien n'est impossible en cryptographie) de connaitre les informations qui circulent dans ce tunnel.

L'implémentation d'un "un proxy d'un site utilisant le protocole HTTPS" peut être de deux types:
  • Invisible (et aveugle): Le proxy fait transiter les paquets TCP entre client et serveur. Le contenu des paquets TCP étant chiffré par un "tunnel" TLS entre le client et le serveur, le proxy est incapable de savoir ce qu'il y a à l’intérieur. C'est donc un simple proxy TCP (dont tu trouvera des exemples sur ce forum).
  • Man in the middle: Le proxy devient lui-même un point de terminaison TLS (une sortie du tunnel), fait la jonction entre deux tunnels chiffrés (client <-> proxy et proxy <--> serveur) et peut donc intercepter les données. Dans ce cas, il faut que le proxy puisse présenter au client un certificat x509 généré par une autorité de certification "maison", mais surtout que le client reconnaisse cette autorité de certification!
En effet, l'authenticité du serveur est assurée par un certificat x509 signé par une autorité de certification reconnue par ton navigateur et/ou système d'exploitation (exemple: Firefox a son propre magasin de certificats, Chrome se réfère à celui du système d'exploitation, Windows par exemple. Parmi les plus connues, on peut citer Symantec, Verisign, Global Sign).

Un serveur ne peut présenter ce certificat à un client que s'il possède la clé privée de ce certificat. Seul le propriétaire du certificat possède cette clé, et il a tout intérêt à la sécuriser...

Vu que le proxy TCP est déjà pas mal présenté sur ce forum, j'imagine que tu cherche à réaliser un proxy MITM. Dans ce cas je te recommande d'étudier le fonctionnement de HTTPS, en particulier les "infrastructures à clé publique" (ou PKI: Public Key Infrastructure).

Cependant, garde à l'esprit que HTTPS sert à garantir à un visiteur qu'il s'adresse bien au serveur auquel il croit s'adresser, donc pour faire du déchiffrement avec l'aide d'un proxy, il faudra que le client sache qu'il s'adresse au proxy, ou alors il faudra posséder la clé privée du serveur.

PS: La "clé privée" est un "mot de passe" de - la plupart du temps - 2048 bits, soit un nombre à 637 chiffres en décimal!
 
Inscrit
26 Février 2016
Messages
82
Reactions
0
#4
Bonjour @Valwex ,

Pour commencer, il faudrait éclaircir ce que tu cherche à faire, et peut-être ce qu'est un proxy.

Un proxy va écouter sur un port (rôle serveur) et se connecter à un serveur (rôle client).
Lorsqu'un client se connecte et envoi des paquets au proxy, le proxy les transmet au serveur, et vice-versa...

Ça, c'est le fonctionnement d'un proxy. Au final, que tu fasse du HTTP/HTTPS/TELNET/SSH/SMTP ou n'importe quel protocole réseau, le proxy fonctionnera pareil: il ne fait que transmettre les paquets.

Par définition, TLS (ou SSL, qui tend à disparaître car vulnérable) sert à deux choses:
  • Chiffrer les paquets
  • Garantir l'authenticité du serveur
Le chiffrement est assuré par divers casses-têtes cryptographiques pour aboutir à quelque-chose qu'on assimile souvent à un "tunnel": A moins d'être à une des deux extrémités du tunnel, il est "impossible" (rien n'est impossible en cryptographie) de connaitre les informations qui circulent dans ce tunnel.

L'implémentation d'un "un proxy d'un site utilisant le protocole HTTPS" peut être de deux types:
  • Invisible (et aveugle): Le proxy fait transiter les paquets TCP entre client et serveur. Le contenu des paquets TCP étant chiffré par un "tunnel" TLS entre le client et le serveur, le proxy est incapable de savoir ce qu'il y a à l’intérieur. C'est donc un simple proxy TCP (dont tu trouvera des exemples sur ce forum).
  • Man in the middle: Le proxy devient lui-même un point de terminaison TLS (une sortie du tunnel), fait la jonction entre deux tunnels chiffrés (client <-> proxy et proxy <--> serveur) et peut donc intercepter les données. Dans ce cas, il faut que le proxy puisse présenter au client un certificat x509 généré par une autorité de certification "maison", mais surtout que le client reconnaisse cette autorité de certification!
En effet, l'authenticité du serveur est assurée par un certificat x509 signé par une autorité de certification reconnue par ton navigateur et/ou système d'exploitation (exemple: Firefox a son propre magasin de certificats, Chrome se réfère à celui du système d'exploitation, Windows par exemple. Parmi les plus connues, on peut citer Symantec, Verisign, Global Sign).

Un serveur ne peut présenter ce certificat à un client que s'il possède la clé privée de ce certificat. Seul le propriétaire du certificat possède cette clé, et il a tout intérêt à la sécuriser...

Vu que le proxy TCP est déjà pas mal présenté sur ce forum, j'imagine que tu cherche à réaliser un proxy MITM. Dans ce cas je te recommande d'étudier le fonctionnement de HTTPS, en particulier les "infrastructures à clé publique" (ou PKI: Public Key Infrastructure).

Cependant, garde à l'esprit que HTTPS sert à garantir à un visiteur qu'il s'adresse bien au serveur auquel il croit s'adresser, donc pour faire du déchiffrement avec l'aide d'un proxy, il faudra que le client sache qu'il s'adresse au proxy, ou alors il faudra posséder la clé privée du serveur.

PS: La "clé privée" est un "mot de passe" de - la plupart du temps - 2048 bits, soit un nombre à 637 chiffres en décimal!
Merci à toi pour tes explications, je sais effectivement ce que c'est qu'un proxy et tout ce qui en suit (J'en ai déjà développé) mais étant donné que j'avais jamais fait de proxy web de préférence pour le protocole HTTPS, je me sentait un peu perdu.
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#5
A part de la documentation facilement trouvable sur internet, je vois mal comment on peut t'aider...
 
Haut Bas