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 ਮੰਜ਼ਿਲ ਗੱਲਬਾਤ ਪੂਰੀ ਨਹੀਂ ਕਰ ਸਕਿਆ।

ਸੰਬੰਧਿਤ ਲੇਖ