La connexion SOCKS et la connexion TLS n'ont pas le même rôle. Obtenez d'abord un flux d'octets vers la destination via SOCKS. Démarrez ensuite TLS par-dessus ce flux, en identifiant le site de destination et non le proxy.

Pour un point de terminaison TLS de type HTTPS, l'agencement peut être :

use IO::Socket::Socks;
use IO::Socket::SSL;

my $target = 'example.com';
my $socket = IO::Socket::Socks->new(
    SocksVersion => 5,
    ProxyAddr => '127.0.0.1',
    ProxyPort => 1080,
    ConnectAddr => $target,
    ConnectPort => 443,
) or die $!;

IO::Socket::SSL->start_SSL(
    $socket,
    SSL_hostname => $target,
    SSL_verifycn_name => $target,
    SSL_verifycn_scheme => 'http',
    SSL_verify_mode => SSL_VERIFY_PEER,
) or die IO::Socket::SSL::errstr();

Pour une cible HTTPS publique sur une route de proxy public autorisée, la liste de proxys SOCKS5 propose des candidats pour ProxyAddr et ProxyPort. L'extrait met en place les couches de transport ; l'application doit encore envoyer le protocole attendu par la destination et fermer le socket une fois terminée.

Conservez le nom de pair prévu

Le point de terminaison du proxy appartient à la première connexion. Le SNI de TLS et la vérification du nom d'hôte concernent example.com. Utiliser le nom d'hôte du proxy à cette étape peut demander ou vérifier une identité erronée.

La configuration du magasin de confiance est une autre exigence indépendante. Utilisez la configuration d'autorité de certification prévue par l'application plutôt qu'une fonction de rappel qui fait confiance à tout, copiée d'un exemple de diagnostic.

Si l'étape SOCKS échoue, modifier les paramètres TLS n'y remédiera pas. Si SOCKS réussit et que TLS échoue, conservez l'erreur de certificat et de nom d'hôte comme preuve au lieu de la traiter comme une panne générique du proxy.

Les noms des modules comptent aussi : IO::Socket::Socks et IO::Socket::SSL exposent des constructeurs et un comportement de mise à niveau différents. Un socket TCP brut qui a seulement atteint le proxy n'a pas encore terminé la négociation de destination SOCKS.

Articles similaires