Magkaiba ang gawain ng koneksyong SOCKS at ng koneksyong TLS. Kunin muna ang byte stream patungo sa patutunguhan sa pamamagitan ng SOCKS. Pagkatapos ay simulan ang TLS sa ibabaw ng stream na iyon, na tinutukoy ang patutunguhang website at hindi ang proxy.

Para sa TLS endpoint na HTTPS ang estilo, maaaring ganito ang ayos:

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();

Para sa pampublikong target na HTTPS sa pinapayagang rutang pampublikong proxy, listahan ng proxy na SOCKS5 ay nag-aalok ng mga kandidato para sa ProxyAddr at ProxyPort. Itinatayo ng bahaging ito ang mga antas ng transportasyon; kailangan pa ring ipadala ng aplikasyon ang protokol na inaasahan ng patutunguhan at isara ang socket kapag tapos na.

Panatilihin ang nilalayong pangalan ng kapares

Ang endpoint ng proxy ay kabilang sa unang koneksyon. Ang TLS SNI at pagpapatunay ng hostname ay tungkol sa example.com. Ang paggamit ng hostname ng proxy sa yugtong iyon ay maaaring humiling o magpatunay ng maling pagkakakilanlan.

Ang configuration ng trust store ay isa pang malayang pangangailangan. Gamitin ang nilalayong configuration ng CA ng aplikasyon sa halip na callback na nagtitiwala sa lahat, na kinopya mula sa diagnostic na halimbawa.

Kung mabigo ang hakbang na SOCKS, hindi ito aayusin ng pagbabago ng mga parameter ng TLS. Kung magtagumpay ang SOCKS at mabigo ang TLS, itago ang error ng sertipiko at hostname bilang ebidensya sa halip na ituring itong pangkalahatang pagkaabala ng proxy.

Mahalaga rin ang mga pangalan ng module: ang IO::Socket::Socks at IO::Socket::SSL ay may magkaibang constructor at pag-uugali sa pag-upgrade. Ang raw TCP socket na nakarating lamang sa proxy ay hindi pa nakumpleto ang negosasyon ng patutunguhang SOCKS.

Kaugnay na mga artikulo