Lisää TLS sen jälkeen, kun Perl on avannut SOCKS-yhteyden
Aseta IO::Socket::SSL IO::Socket::Socks-yhteyden päälle ja varmista kohdekohteen isäntänimi.
SOCKS-yhteydellä ja TLS-yhteydellä on eri tehtävät. Hanki ensin tavuvirta kohteeseen SOCKSin kautta. Käynnistä sitten TLS kyseisen virran päällä ja tunnista kohdesivusto välityspalvelimen sijaan.
HTTPS-tyyppiselle TLS-päätepisteelle järjestely voi olla:
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();
Sallitulla julkisen välityspalvelimen reitillä olevalle julkiselle HTTPS-kohteelle SOCKS5-välityspalvelinluettelo tarjoaa ehdokkaita ProxyAddr- ja ProxyPort-arvoille. Katkelma pystyttää siirtokerrokset; sovelluksen on silti lähetettävä protokolla, jota kohde odottaa, ja suljettava socket, kun se on valmis.
Säilytä aiottu vastapuolen nimi
Välityspalvelimen päätepiste kuuluu ensimmäiseen yhteyteen. TLS SNI ja isäntänimen varmennus koskevat example.com. Välityspalvelimen isäntänimen käyttäminen siinä vaiheessa voi pyytää tai varmistaa väärän identiteetin.
Luottamusvaraston määritys on toinen itsenäinen vaatimus. Käytä sovelluksen aiottua CA-määritystä sen sijaan, että kopioisit diagnostisesta esimerkistä callbackin, joka luottaa kaikkeen.
Jos SOCKS-vaihe epäonnistuu, TLS-parametrien muuttaminen ei korjaa sitä. Jos SOCKS onnistuu ja TLS epäonnistuu, säilytä varmenne- ja isäntänimivirhe todisteena sen sijaan, että kohtelisit sitä yleisenä välityspalvelimen katkona.
Myös moduulien nimillä on väliä: IO::Socket::Socks ja IO::Socket::SSL tarjoavat erilaiset konstruktorit ja päivityskäyttäytymisen. Raaka TCP-socket, joka vain saavutti välityspalvelimen, ei ole vielä suorittanut SOCKS-kohteen neuvottelua.