SOCKS orqali Java TLS uchun manzilning identifikatoridan foydalaning
Avval SOCKS orqali ulanib, so'ngra SSLSocket'ni sayt xost nomi va aniq HTTPS so'nggi nuqta tekshiruvlari bilan qatlamlang.
SOCKS so'nggi nuqtasi sizni saytga olib boradi. O'sha ulanish ichidagi TLS hamkori saytning o'zi, shuning uchun manzil xost nomini qatlamli socket fabrikasiga bering:
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 parcha standart Java tarmoq va TLS importlarini, mavjud standart ishonch konfiguratsiyasini va proksi hisob ma'lumotlarini talab qilmaydigan SOCKS ulanishini nazarda tutadi. U qo'l siqishni bajaradi; dastur baribir server kutgan formatda HTTP so'rovini yuborishi kerak. Ruxsat etilgan ommaviy yo'nalishlardagi ommaviy HTTPS maqsadlari uchun SOCKS proksi ro'yxati nomzod so'nggi nuqtalarni taklif qiladi; server versiyasi va xost nomi qo'llab-quvvatlashini ushbu Java socket yo'nalishiga moslashtiring.
Misoldagi ikkita identifikatorni o'qing
127.0.0.1:1080 proksi so'nggi nuqtasi bo'lib, ushbu Java jarayonidan yetib borish mumkin. destination va destinationPort saytni aniqlaydi. createUnresolved o'sha xost nomini mijoza oldindan hal qilish o'rniga SOCKS yo'nalishi uchun saqlaydi.
Qatlamli createSocket manzil identifikatorini qabul qiladi. setEndpointIdentificationAlgorithm("HTTPS") uning xost nomi tekshiruvlarini aniq talab qiladi. Xom SSLSocket sertifikat zanjiri ishonchi xost nomi tekshiruvi yoqilganini o'z-o'zidan isbotlamaydi. Nomuvofiqlikni bosish uchun proksi nomini yoki loopback'ni almashtirish noto'g'ri so'nggi nuqtani autentifikatsiya qilishi mumkin.
Ishonch va tozalashni o'z bosqichlarida saqlang
Standart fabrika JVM ning sozlangan ishonch tartibidan foydalanadi. Xususiy talablari bo'lgan dastur buning o'rniga o'zining to'g'ri ishga tushirilgan SSLContext fabrikasidan foydalanishi mumkin. Bu tanlov SOCKS yo'nalishidan alohida; har bir sertifikatni qabul qiladigan ishonch menejeri noto'g'ri hamkor nomini tuzatmaydi.
SOCKS rad etilishi TLS dan oldin sodir bo'ladi; ishonchsiz sertifikat yoki noto'g'ri xost nomi TLS vaqtida muvaffaqiyatsizlikka uchraydi; keyin HTTP xatosi kelishi mumkin. Proksiga kirish tunnel so'rovini avtorizatsiya qiladi, ichidagi saytni autentifikatsiya qilmaydi.
Qatlamli socketni avtomatik yopish yoqilgan holda yopish uning transportini yopadi. Tashqi resurs doirasi ham odatdagi yakunlanishdan oldin o'rash yoki qo'l siqish muvaffaqiyatsiz bo'lsa, o'sha transportni yopadi.