Perl ने SOCKS कनेक्शन उघडल्यानंतर TLS जोडा
IO::Socket::SSL ला IO::Socket::Socks कनेक्शनवर ठेवा आणि गंतव्याचे होस्टनेम पडताळा.
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 गंतव्य वाटाघाटी पूर्ण करू शकलेला नाही.