Злучэнне 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.

Падобныя артыкулы