Aggiungere TLS dopo che Perl ha aperto la connessione SOCKS
Sovrapponete IO::Socket::SSL a una connessione IO::Socket::Socks e verificate il nome host di destinazione.
La connessione SOCKS e la connessione TLS hanno compiti diversi. Prima ottenete un flusso di byte verso la destinazione tramite SOCKS. Poi avviate TLS su quel flusso, identificando il sito di destinazione anziché il proxy.
Per un endpoint TLS in stile HTTPS, la disposizione può essere:
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();
Per una destinazione HTTPS pubblica su un percorso proxy pubblico consentito, la lista di proxy SOCKS5 offre candidati per ProxyAddr e ProxyPort. Il frammento imposta i livelli di trasporto; l'applicazione deve comunque inviare il protocollo atteso dalla destinazione e chiudere il socket al termine.
Mantenete il nome del peer previsto
L'endpoint del proxy appartiene alla prima connessione. SNI di TLS e verifica del nome host riguardano example.com. Usare il nome host del proxy in quella fase può richiedere o verificare un'identità errata.
La configurazione dell'archivio di fiducia è un altro requisito indipendente. Usate la configurazione CA prevista dall'applicazione invece di una callback che si fida di tutto, copiata da un esempio diagnostico.
Se il passaggio SOCKS fallisce, modificare i parametri TLS non lo risolverà. Se SOCKS riesce e TLS fallisce, conservate l'errore di certificato e nome host come prova invece di trattarlo come un guasto generico del proxy.
Anche i nomi dei moduli contano: IO::Socket::Socks e IO::Socket::SSL espongono costruttori e comportamento di aggiornamento diversi. Un socket TCP grezzo che ha solo raggiunto il proxy non ha ancora completato la negoziazione della destinazione SOCKS.