Adăugați TLS după ce Perl a deschis conexiunea SOCKS
Suprapuneți IO::Socket::SSL peste o conexiune IO::Socket::Socks și verificați numele de gazdă al destinației.
Conexiunea SOCKS și conexiunea TLS au sarcini diferite. Mai întâi obțineți un flux de octeți către destinație prin SOCKS. Apoi porniți TLS peste acel flux, identificând site-ul de destinație, nu proxy-ul.
Pentru un punct final TLS de tip HTTPS, aranjamentul poate fi:
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();
Pentru o țintă HTTPS publică pe o rută de proxy public permisă, lista de proxy SOCKS5 oferă candidați pentru ProxyAddr și ProxyPort. Fragmentul stabilește straturile de transport; aplicația trebuie încă să trimită protocolul așteptat de destinație și să închidă socketul la final.
Păstrați numele de partener dorit
Punctul final al proxy-ului aparține primei conexiuni. SNI-ul TLS și verificarea numelui de gazdă privesc example.com. Utilizarea numelui de gazdă al proxy-ului în acea etapă poate solicita sau verifica o identitate greșită.
Configurarea depozitului de încredere este o altă cerință independentă. Folosiți configurația CA dorită a aplicației în locul unui callback care are încredere în tot, copiat dintr-un exemplu de diagnosticare.
Dacă pasul SOCKS eșuează, modificarea parametrilor TLS nu va remedia problema. Dacă SOCKS reușește și TLS eșuează, păstrați eroarea de certificat și de nume de gazdă ca dovadă în loc să o tratați ca pe o cădere generică a proxy-ului.
Numele modulelor contează și ele: IO::Socket::Socks și IO::Socket::SSL expun constructori și comportamente de actualizare diferite. Un socket TCP brut care a ajuns doar la proxy nu a finalizat încă negocierea destinației SOCKS.