Perl SOCKS bağlantısını açdıqdan sonra TLS əlavə edin
IO::Socket::SSL-i IO::Socket::Socks bağlantısının üzərinə qoyun və təyinat host adını yoxlayın.
SOCKS bağlantısı və TLS bağlantısı fərqli işlər görür. Əvvəlcə SOCKS vasitəsilə təyinata bayt axını əldə edin. Sonra həmin axının üzərində TLS başladın və proxy deyil, təyinat veb saytını müəyyən edin.
HTTPS tipli TLS son nöqtəsi üçün quruluş belə ola bilər:
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();
İcazə verilmiş ictimai proxy marşrutunda ictimai HTTPS hədəfi üçün SOCKS5 proxy siyahısı ProxyAddr və ProxyPort üçün namizədlər təqdim edir. Bu fraqment nəqliyyat qatlarını qurur; tətbiq hələ də təyinatın gözlədiyi protokolu göndərməli və bitirdikdə soketi bağlamalıdır.
Nəzərdə tutulan peer adını saxlayın
Proxy son nöqtəsi birinci bağlantıya aiddir. TLS SNI və host adı yoxlaması isə example.com ilə bağlıdır. O mərhələdə proxy host adından istifadə yanlış kimliyi tələb edə və ya yoxlaya bilər.
Etibarlılıq anbarının konfiqurasiyası başqa müstəqil tələbdir. Diaqnostik nümunədən kopyalanmış hər şeyə etibar edən callback əvəzinə tətbiqin nəzərdə tutduğu CA konfiqurasiyasından istifadə edin.
SOCKS mərhələsi uğursuz olarsa, TLS parametrlərini dəyişmək bunu düzəltməyəcək. SOCKS uğurlu, TLS uğursuz olarsa, sertifikat və host adı xətasını sübut kimi saxlayın, onu adi proxy kəsintisi kimi qəbul etməyin.
Modul adları da vacibdir: IO::Socket::Socks və IO::Socket::SSL fərqli konstruktorlar və yüksəltmə davranışı təqdim edir. Sadəcə proxy-yə çatan xam TCP soketi hələ SOCKS təyinat danışıqlarını tamamlamayıb.