Ìsopọ̀ SOCKS àti ìsopọ̀ TLS ní iṣẹ́ ọ̀tọ̀ọ̀tọ̀. Lákọ̀ọ́kọ́ gba ìṣàn byte kan sí ibi tí o ń lọ nípasẹ̀ SOCKS. Lẹ́yìn náà bẹ̀rẹ̀ TLS lórí ìṣàn yẹn, kí o sì dámọ̀ ojúlé wẹ́ẹ̀bù ibi tí o ń lọ, kì í ṣe proxy.

Fún ibi ìparí TLS irú HTTPS, ìṣètò lè jẹ́ báyìí:

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

Fún àfojúsùn HTTPS gbogbogbò lórí ipa ọ̀nà proxy gbogbogbò tí a gbà láàyè, àkójọ proxy SOCKS5 ń pèsè àwọn olùdíje fún ProxyAddr àti ProxyPort. Ẹ̀ka yìí ń gbé àwọn ìpele gbígbé kalẹ̀; ohun èlò náà ṣì ní láti fi ìlànà tí ibi tí o ń lọ ń retí ránṣẹ́ kí ó sì ti socket mọ́ nígbà tí ó bá parí.

Pa orúkọ ẹlẹgbẹ́ tí a ní lọ́kàn mọ́

Ibi ìparí proxy jẹ́ ti ìsopọ̀ àkọ́kọ́. TLS SNI àti ìṣàyẹ̀wò orúkọ agbàlejò kan example.com. Lílo orúkọ agbàlejò proxy ní ìpele yẹn lè béèrè tàbí ṣàyẹ̀wò ìdánimọ̀ tí kò tọ́.

Ìṣètò ibi ìpamọ́ ìgbẹ́kẹ̀lé jẹ́ ìbéèrè mìíràn tí ó dá. Lo ìṣètò CA tí ohun èlò náà ní lọ́kàn dípò callback tí ó gbẹ́kẹ̀lé ohun gbogbo, tí a dà kọ láti àpẹẹrẹ àyẹ̀wò.

Tí ìpele SOCKS bá kùnà, yíyí àwọn àlẹ̀mọ́ TLS padà kò ní tún un ṣe. Tí SOCKS bá ṣàṣeyọrí tí TLS sì kùnà, pa àṣìṣe ẹ̀rí-ìfọwọ́sí àti orúkọ agbàlejò mọ́ gẹ́gẹ́ bí ẹ̀rí dípò kí o kà á sí ìdíwọ́ proxy gbogbogbò.

Orúkọ àwọn mọ́dùùlù náà ṣe pàtàkì: IO::Socket::Socks àti IO::Socket::SSL ń pèsè àwọn olùkọ́ àti ìhùwàsí ìgbéga ọ̀tọ̀ọ̀tọ̀. Socket TCP àìsèrọ́ tí ó ṣẹ̀ṣẹ̀ dé proxy kò tíì parí ìdúnàdúrà ibi tí o ń lọ ti SOCKS.

Àwọn àpilẹ̀kọ tó jọra