Bæta TLS við eftir að Perl hefur opnað SOCKS-tenginguna
Leggið IO::Socket::SSL yfir IO::Socket::Socks-tengingu og staðfestið hýsilnafn áfangastaðarins.
SOCKS-tengingin og TLS-tengingin gegna ólíkum hlutverkum. Fáið fyrst bætastreymi til áfangastaðarins í gegnum SOCKS. Byrjið síðan TLS yfir það streymi og auðkennið áfangavefinn en ekki milliþjóninn.
Fyrir TLS-endapunkt af HTTPS-gerð getur fyrirkomulagið verið:
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();
Fyrir opinbert HTTPS-mark á leyfðri leið opinbers milliþjóns býður SOCKS5-milliþjónalistinn upp á kandídata fyrir ProxyAddr og ProxyPort. Brotið byggir upp flutningslögin; forritið verður samt að senda það samskiptareglur sem áfangastaðurinn býst við og loka sokknum þegar því er lokið.
Haldið tilætluðu jafningjanafni
Endapunktur milliþjónsins tilheyrir fyrstu tengingunni. TLS SNI og hýsilnafnsstaðfesting varða example.com. Að nota hýsilnafn milliþjónsins á því stigi getur óskað eftir eða staðfest rangt auðkenni.
Stilling traustageymslunnar er önnur sjálfstæð krafa. Notið tilætlaða CA-stillingu forritsins í stað afturkalls sem treystir öllu, afritaðs úr greiningardæmi.
Ef SOCKS-skrefið mistekst lagar breyting á TLS-færibreytum það ekki. Ef SOCKS tekst og TLS mistekst, varðveitið villuna í skírteini og hýsilnafni sem sönnun í stað þess að meðhöndla hana sem almennt milliþjónsstopp.
Nöfn eininganna skipta líka máli: IO::Socket::Socks og IO::Socket::SSL bjóða upp á ólíka smiði og uppfærsluhegðun. Hrár TCP-sokkur sem náði aðeins til milliþjónsins hefur ekki lokið SOCKS-áfangasamningum enn.