ପର୍ଲ 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 ଲକ୍ଷ୍ୟ ବୁଝାମଣା ସମ୍ପୂର୍ଣ୍ଣ କରିନାହିଁ।