Dodajte TLS nakon što je Perl otvorio SOCKS vezu
Postavite IO::Socket::SSL preko IO::Socket::Socks veze i proverite ime hosta odredišta.
SOCKS veza i TLS veza imaju različite zadatke. Prvo pribavite tok bajtova do odredišta kroz SOCKS. Zatim pokrenite TLS preko tog toka, identifikujući odredišni sajt, a ne proksi.
Za TLS krajnju tačku tipa HTTPS raspored može biti:
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();
Za javni HTTPS cilj na dozvoljenoj ruti javnog proksija lista SOCKS5 proksija nudi kandidate za ProxyAddr i ProxyPort. Isječak uspostavlja transportne slojeve; aplikacija ipak mora poslati protokol koji odredište očekuje i zatvoriti socket kada završi.
Zadržite nameravano ime partnera
Krajnja tačka proksija pripada prvoj vezi. TLS SNI i provera imena hosta odnose se na example.com. Korišćenje imena hosta proksija u toj fazi može zatražiti ili proveriti pogrešan identitet.
Konfiguracija skladišta poverenja je još jedan nezavisan zahtev. Koristite nameravanu CA konfiguraciju aplikacije umesto povratnog poziva koji veruje svemu, kopiranog iz dijagnostičkog primera.
Ako SOCKS korak ne uspe, promena TLS parametara to neće popraviti. Ako SOCKS uspe, a TLS ne uspe, sačuvajte grešku sertifikata i imena hosta kao dokaz umesto da je tretirate kao opšti prekid proksija.
Imena modula su takođe važna: IO::Socket::Socks i IO::Socket::SSL nude različite konstruktore i ponašanje nadogradnje. Sirovi TCP socket koji je samo stigao do proksija još nije dovršio SOCKS pregovaranje odredišta.