Додајте 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 конфигурацију апликације уместо повратног позива који верује свему, копираног из дијагностичког примера.
Ако SOCKS корак не успе, промена TLS параметара то неће поправити. Ако SOCKS успе, а TLS не успе, сачувајте грешку сертификата и имена хоста као доказ уместо да је третирате као општи прекид проксија.
Имена модула су такође важна: IO::Socket::Socks и IO::Socket::SSL нуде различите конструкторе и понашање надоградње. Сирови TCP сокет који је само стигао до проксија још није завршио SOCKS преговарање одредишта.