Tambahkan TLS setelah Perl membuka koneksi SOCKS
Lapisi IO::Socket::SSL di atas koneksi IO::Socket::Socks dan verifikasi nama host tujuan.
Koneksi SOCKS dan koneksi TLS memiliki tugas berbeda. Pertama dapatkan aliran byte ke tujuan melalui SOCKS. Lalu mulai TLS di atas aliran itu, dengan mengidentifikasi situs web tujuan, bukan proxy.
Untuk titik akhir TLS bergaya HTTPS, susunannya dapat berupa:
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();
Untuk target HTTPS publik pada rute proxy publik yang diizinkan, daftar proxy SOCKS5 menawarkan kandidat untuk ProxyAddr dan ProxyPort. Fragmen ini menyiapkan lapisan transport; aplikasi tetap harus mengirim protokol yang diharapkan tujuan dan menutup soket setelah selesai.
Pertahankan nama peer yang dimaksud
Titik akhir proxy milik koneksi pertama. SNI TLS dan verifikasi nama host berkaitan dengan example.com. Memakai nama host proxy pada tahap itu dapat meminta atau memverifikasi identitas yang salah.
Konfigurasi penyimpanan kepercayaan adalah persyaratan mandiri lainnya. Gunakan konfigurasi CA yang dimaksudkan aplikasi, bukan callback yang memercayai segalanya, yang disalin dari contoh diagnostik.
Jika langkah SOCKS gagal, mengubah parameter TLS tidak akan memperbaikinya. Jika SOCKS berhasil dan TLS gagal, simpan kesalahan sertifikat dan nama host sebagai bukti alih-alih memperlakukannya sebagai gangguan proxy umum.
Nama modul juga penting: IO::Socket::Socks dan IO::Socket::SSL menawarkan konstruktor dan perilaku peningkatan yang berbeda. Soket TCP mentah yang baru mencapai proxy belum menyelesaikan negosiasi tujuan SOCKS.