TLS hinzufügen, nachdem Perl die SOCKS-Verbindung geöffnet hat
Legen Sie IO::Socket::SSL über eine IO::Socket::Socks-Verbindung und prüfen Sie den Zielhostnamen.
Die SOCKS-Verbindung und die TLS-Verbindung haben unterschiedliche Aufgaben. Holen Sie zuerst einen Bytestrom zum Ziel über SOCKS. Starten Sie dann TLS über diesem Strom und identifizieren Sie die Zielwebsite statt des Proxys.
Für einen TLS-Endpunkt im HTTPS-Stil kann der Aufbau so aussehen:
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ür ein öffentliches HTTPS-Ziel auf einer erlaubten Public-Proxy-Route bietet die SOCKS5-Proxy-Liste Kandidaten für ProxyAddr und ProxyPort. Das Fragment legt die Transportschichten an; die Anwendung muss weiterhin das vom Ziel erwartete Protokoll senden und den Socket am Ende schließen.
Den beabsichtigten Peer-Namen beibehalten
Der Proxy-Endpunkt gehört zur ersten Verbindung. TLS-SNI und Hostnamenprüfung betreffen example.com. Der Proxy-Hostname an dieser Stelle kann eine falsche Identität anfordern oder prüfen.
Die Konfiguration des Trust-Stores ist eine weitere unabhängige Anforderung. Verwenden Sie die vorgesehene CA-Konfiguration der Anwendung statt eines Callbacks, der allem vertraut und aus einem Diagnosebeispiel kopiert wurde.
Wenn der SOCKS-Schritt fehlschlägt, behebt eine Änderung der TLS-Parameter das nicht. Wenn SOCKS gelingt und TLS fehlschlägt, bewahren Sie den Zertifikats- und Hostnamenfehler als Beleg auf, statt ihn als allgemeinen Proxy-Ausfall zu behandeln.
Auch die Modulnamen zählen: IO::Socket::Socks und IO::Socket::SSL bieten unterschiedliche Konstruktoren und Upgrade-Verhalten. Ein roher TCP-Socket, der nur den Proxy erreicht hat, hat die SOCKS-Zielaushandlung noch nicht abgeschlossen.