SwordArMor

Utiliser socat pour contourner les limiations SSL d’un navigateur moderne

Depuis quelque temps, les navigateurs bloquent les requêtes SSL/TLS utilisant des versions de protocoles et suites cryptographiques jugées trop faibles.

Cependant, on peut avoir besoin de se connecter à de vieux équipements qui eux ne supportent que ces vielles versions ; en l’occurrence, un PDU. En théorie, ils supportent aussi les connexions en clair, sauf que des fois non…

C’est là que socat vient à la rescousse. En effet, il est parfaitement capable de négocier une version SSL arbitraire d’un côté et de ressortir ça en clair de l’autre.

while :; do socat TCP-LISTEN:8080,fork OPENSSL:172.20.44.171:443,method=SSL23,cipher=RC4-MD5,verify=0; sleep 1; done

Avec cette ligne, toutes les requêtes reçues en clair sur le port 8080 seront renvoyées en SSLv3 sur 172.20.44.171:443.

  • TCP-LISTEN:8080 écoute sur le port 8080 sans chiffrement
  • fork crée un processus enfant pour chaque connexion, ce qui évite de devoir relancer socat à chaque fois qu’une connexion est fermée
  • OPENSSL:172.20.44.171:443 se connecte en SSL sur l’IP 172.20.44.171 et le port 443
  • method=SSL23 négocie les protocoles SSLv2 et SSLv3
  • cipher=RC4-MD5 utilise le cipher RC4-MD5
  • verify=0 évite de vérifier la CA
  • sleep 1 sert à pour facilement interrompre la boucle avec ^C
  • while :; do […]; done permet de ne pas relancer la commande sans cesse
  • .

Maintenant pourquoi SSLv3 et RC4-MD5 ? Simplement parce que c’est ma référence d’algorithme pourri, j’étais donc à peu près sûr que ça allait marcher sur cet équipement.