Perl SOCKS қосылымын ашқаннан кейін TLS қосу
IO::Socket::SSL-ді IO::Socket::Socks қосылымының үстіне қойып, мақсаттың хост атауын тексеріңіз.
SOCKS қосылымы мен TLS қосылымының міндеттері әртүрлі. Алдымен SOCKS арқылы мақсатқа байт ағынын алыңыз. Содан кейін сол ағын үстінде TLS-ті бастап, проксиді емес, мақсат сайтты анықтаңыз.
HTTPS түріндегі TLS соңғы нүктесі үшін орналасу былай болуы мүмкін:
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-ға қатысты. Сол кезеңде проксидің хост атауын пайдалану қате сәйкестікті сұрауы немесе тексеруі мүмкін.
Сенім қоймасының конфигурациясы тағы бір тәуелсіз талап. Диагностикалық мысалдан көшірілген бәріне сенетін callback орнына қолданбаның көзделген CA конфигурациясын пайдаланыңыз.
Егер SOCKS қадамы сәтсіз болса, TLS параметрлерін өзгерту оны түзетпейді. Егер SOCKS сәтті болып, TLS сәтсіз болса, сертификат пен хост атауының қатесін дәлел ретінде сақтаңыз, оны жалпы прокси ақауы деп қарастырмаңыз.
Модуль атаулары да маңызды: IO::Socket::Socks мен IO::Socket::SSL әртүрлі конструкторлар мен жаңарту мінез-құлқын ұсынады. Тек проксиге жеткен шикі TCP сокет әлі SOCKS мақсат келіссөзін аяқтаған жоқ.