SOCKS üzərindən Java TLS üçün təyinatın kimliyindən istifadə edin
Əvvəlcə SOCKS ilə qoşulun, sonra SSLSocket-i saytın host adı və açıq HTTPS son nöqtə yoxlamaları ilə qatlayın.
SOCKS son nöqtəsi sizi sayta çatdırır. Həmin bağlantıdakı TLS həmkarı saytın özüdür, ona görə təyinatın host adını qatlanmış socket fabrikinə ötürün:
String destination = "example.com";
int destinationPort = 443;
Proxy proxy = new Proxy(
Proxy.Type.SOCKS,
new InetSocketAddress("127.0.0.1", 1080)
);
try (Socket transport = new Socket(proxy)) {
transport.connect(
InetSocketAddress.createUnresolved(destination, destinationPort),
5000
);
SSLSocketFactory factory =
(SSLSocketFactory) SSLSocketFactory.getDefault();
try (SSLSocket tls = (SSLSocket) factory.createSocket(
transport, destination, destinationPort, true)) {
SSLParameters parameters = tls.getSSLParameters();
parameters.setEndpointIdentificationAlgorithm("HTTPS");
tls.setSSLParameters(parameters);
tls.setSoTimeout(15000);
tls.startHandshake();
// Send the application's HTTPS request through tls.
}
}Bu fraqment standart Java şəbəkə və TLS idxallarını, mövcud standart etimad konfiqurasiyasını və proxy etimadnaməsi tələb etməyən SOCKS bağlantısını fərz edir. O, əl sıxmanı yerinə yetirir; tətbiq hələ də serverin gözlədiyi formatda HTTP sorğusu göndərməlidir. İcazə verilən ictimai marşrutlarda ictimai HTTPS hədəfləri üçün SOCKS proxy siyahısı namizəd son nöqtələr təklif edir; serverin versiyasını və host adı dəstəyini bu Java socket yoluna uyğunlaşdırın.
Nümunədəki iki kimliyi oxuyun
127.0.0.1:1080 proxy son nöqtəsidir və bu Java prosesindən əlçatandır. destination və destinationPort saytı müəyyən edir. createUnresolved həmin host adını müştəridə erkən həll etmək əvəzinə SOCKS yolu üçün saxlayır.
Qatlanmış createSocket təyinatın kimliyini qəbul edir. setEndpointIdentificationAlgorithm("HTTPS") onun host adı yoxlamalarını açıq şəkildə tələb edir. Xam SSLSocket-in sertifikat zənciri etimadı host adı yoxlamasının aktiv olduğunu təkbaşına sübut etmir. Uyğunsuzluğu boğmaq üçün proxy adını və ya loopback-i əvəz etmək səhv son nöqtəni təsdiqləyə bilər.
Etimadı və təmizliyi öz mərhələlərində saxlayın
Standart fabrik JVM-in konfiqurasiya edilmiş etimad quruluşundan istifadə edir. Xüsusi tələbləri olan tətbiq əvəzində düzgün işə salınmış SSLContext fabrikindən istifadə edə bilər. Bu seçim SOCKS marşrutundan ayrıdır; hər sertifikatı qəbul edən etimad meneceri səhv həmkar adını düzəltmir.
SOCKS rəddi TLS-dən əvvəl baş verir; etibarsız sertifikat və ya səhv host adı TLS zamanı uğursuz olur; sonra HTTP xətası gələ bilər. Proxy girişi tunel sorğusuna icazə verir, içindəki saytı təsdiqləmir.
Qatlanmış socket-i avtomatik bağlama aktiv ikən bağlamaq onun nəqliyyatını bağlayır. Xarici resurs əhatəsi də normal tamamlanmadan əvvəl qatlama və ya əl sıxma uğursuz olarsa həmin nəqliyyatı bağlayır.