SOCKS కనెక్షన్ మరియు TLS కనెక్షన్ వేర్వేరు పనులు చేస్తాయి. మొదట SOCKS ద్వారా గమ్యస్థానానికి బైట్ స్ట్రీమ్ పొందండి. తర్వాత ఆ స్ట్రీమ్ పై TLS ప్రారంభించి, ప్రాక్సీ కాకుండా గమ్యస్థాన వెబ్‌సైట్‌ను గుర్తించండి.

HTTPS శైలి TLS ఎండ్‌పాయింట్ కోసం ఏర్పాటు ఇలా ఉండవచ్చు:

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

అనుమతించిన పబ్లిక్-ప్రాక్సీ మార్గంలోని పబ్లిక్ HTTPS లక్ష్యానికి SOCKS5 ప్రాక్సీ జాబితా ProxyAddr మరియు ProxyPort కోసం అభ్యర్థులను అందిస్తుంది. ఈ భాగం రవాణా పొరలను ఏర్పాటు చేస్తుంది; అప్లికేషన్ ఇప్పటికీ గమ్యస్థానం ఆశించే ప్రోటోకాల్‌ను పంపాలి మరియు పూర్తయిన తర్వాత సాకెట్‌ను మూసివేయాలి.

ఉద్దేశించిన పీర్ పేరును ఉంచండి

ప్రాక్సీ ఎండ్‌పాయింట్ మొదటి కనెక్షన్‌కు చెందుతుంది. TLS SNI మరియు హోస్ట్‌నేమ్ ధృవీకరణ example.com కు సంబంధించినవి. ఆ దశలో ప్రాక్సీ హోస్ట్‌నేమ్‌ను ఉపయోగించడం తప్పు గుర్తింపును అడగవచ్చు లేదా ధృవీకరించవచ్చు.

ట్రస్ట్-స్టోర్ కాన్ఫిగరేషన్ మరో స్వతంత్ర అవసరం. డయాగ్నస్టిక్ ఉదాహరణ నుండి కాపీ చేసిన అన్నింటినీ నమ్మే కాల్‌బ్యాక్‌కు బదులుగా అప్లికేషన్ ఉద్దేశించిన CA కాన్ఫిగరేషన్‌ను ఉపయోగించండి.

SOCKS దశ విఫలమైతే TLS పరామితులను మార్చడం దాన్ని సరిచేయదు. SOCKS విజయవంతమై TLS విఫలమైతే ధృవపత్రం మరియు హోస్ట్‌నేమ్ లోపాన్ని సాక్ష్యంగా ఉంచండి, సాధారణ ప్రాక్సీ వైఫల్యంగా పరిగణించవద్దు.

మాడ్యూల్ పేర్లు కూడా ముఖ్యం: IO::Socket::Socks మరియు IO::Socket::SSL వేర్వేరు కన్‌స్ట్రక్టర్లు మరియు అప్‌గ్రేడ్ ప్రవర్తనను అందిస్తాయి. ప్రాక్సీని చేరిన మాత్రమే ముడి TCP సాకెట్ ఇంకా SOCKS గమ్యస్థాన చర్చను పూర్తి చేయలేదు.

సంబంధిత వ్యాసాలు