SOCKS-ühendusel ja TLS-ühendusel on erinevad ülesanded. Hankige esmalt baidivool sihtkohta SOCKS-i kaudu. Seejärel käivitage TLS selle voolu peal, tuvastades sihtkoha veebisaidi, mitte puhverserveri.

HTTPS-tüüpi TLS-lõpp-punkti jaoks võib paigutus olla järgmine:

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();

Lubatud avaliku puhverserveri marsruudil asuva avaliku HTTPS-sihtmärgi jaoks pakub SOCKS5 puhverserverite loend kandidaate ProxyAddr ja ProxyPort jaoks. See lõik loob transpordikihid; rakendus peab ikkagi saatma sihtkoha oodatava protokolli ja sulgema sokli, kui on valmis.

Säilitage kavandatud partneri nimi

Puhverserveri lõpp-punkt kuulub esimese ühenduse juurde. TLS SNI ja hostinime kontroll puudutavad example.com. Puhverserveri hostinime kasutamine selles etapis võib nõuda või kontrollida vale identiteeti.

Usaldushoidla konfiguratsioon on veel üks sõltumatu nõue. Kasutage rakenduse kavandatud CA-konfiguratsiooni, mitte kõike usaldavat tagasikutset, mis on kopeeritud diagnostilisest näitest.

Kui SOCKS-i samm ebaõnnestub, ei paranda TLS-i parameetrite muutmine seda. Kui SOCKS õnnestub ja TLS ebaõnnestub, hoidke sertifikaadi ja hostinime viga tõendina alles, selle asemel et käsitleda seda üldise puhverserveri katkestusena.

Ka moodulite nimed loevad: IO::Socket::Socks ja IO::Socket::SSL pakuvad erinevaid konstruktoreid ja uuenduskäitumist. Too TCP-sokkel, mis jõudis ainult puhverserverini, ei ole veel SOCKS-i sihtkoha läbirääkimist lõpetanud.

Seotud artiklid