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 максат сүйлөшүүсүн али бүтө элек.