Добавете 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 дестинацията.