Дадайце TLS пасля таго, як Perl адкрыў злучэнне SOCKS
Накладзіце IO::Socket::SSL на злучэнне IO::Socket::Socks і праверце імя хоста прызначэння.
Злучэнне SOCKS і злучэнне TLS выконваюць розныя задачы. Спачатку атрымайце байтавы паток да прызначэння праз SOCKS. Затым запусціце TLS паверх гэтага патоку, вызначаючы мэтавы сайт, а не проксі.
Для TLS-канцавой кропкі тыпу HTTPS схема можа быць такой:
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, прадугледжаную прыкладаннем, а не callback, што давярае ўсяму, скапіяваны з дыягнастычнага прыкладу.
Калі крок SOCKS не ўдаўся, змена параметраў TLS гэтага не выправіць. Калі SOCKS паспяховы, а TLS не, захавайце памылку сертыфіката і імя хоста як доказ, замест таго каб лічыць гэта звычайным збоем проксі.
Імёны модуляў таксама важныя: IO::Socket::Socks і IO::Socket::SSL прапануюць розныя канструктары і паводзіны абнаўлення. Сыры TCP-сокет, які толькі дасягнуў проксі, яшчэ не завяршыў перамовы аб прызначэнні SOCKS.