Muunganisho wa SOCKS na muunganisho wa TLS una kazi tofauti. Kwanza pata mtiririko wa baiti kuelekea lengo kupitia SOCKS. Kisha anza TLS juu ya mtiririko huo, ukitambua tovuti lengwa badala ya proksi.

Kwa kituo cha mwisho cha TLS cha mtindo wa HTTPS, mpangilio unaweza kuwa:

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

Kwa lengo la HTTPS la umma kwenye njia ya proksi ya umma inayoruhusiwa, orodha ya proksi za SOCKS5 inatoa wagombea wa ProxyAddr na ProxyPort. Kipande hiki huweka tabaka za usafirishaji; programu bado lazima itume itifaki inayotarajiwa na lengo na kufunga soketi ikimaliza.

Hifadhi jina la mwenzi lililokusudiwa

Kituo cha mwisho cha proksi ni cha muunganisho wa kwanza. TLS SNI na uthibitishaji wa jina la mwenyeji vinahusu example.com. Kutumia jina la mwenyeji wa proksi katika hatua hiyo kunaweza kuomba au kuthibitisha utambulisho usio sahihi.

Usanidi wa hazina ya uaminifu ni hitaji lingine huru. Tumia usanidi wa CA unaokusudiwa na programu badala ya callback inayoamini kila kitu, iliyonakiliwa kutoka kwa mfano wa uchunguzi.

Ikiwa hatua ya SOCKS itashindikana, kubadilisha vigezo vya TLS hakutarekebisha. Ikiwa SOCKS itafanikiwa na TLS ikashindikana, hifadhi hitilafu ya cheti na jina la mwenyeji kama ushahidi badala ya kuichukulia kama hitilafu ya jumla ya proksi.

Majina ya moduli pia ni muhimu: IO::Socket::Socks na IO::Socket::SSL hutoa wajenzi na tabia za uboreshaji tofauti. Soketi mbichi ya TCP iliyofika tu kwa proksi bado haijakamilisha majadiliano ya lengo la SOCKS.

Makala zinazohusiana