SOCKS-এ Java TLS-এর জন্য গন্তব্যের পরিচয় ব্যবহার করুন
প্রথমে SOCKS দিয়ে সংযোগ করুন, তারপর ওয়েবসাইটের হোস্টনেম ও স্পষ্ট HTTPS এন্ডপয়েন্ট পরীক্ষাসহ SSLSocket স্তর করুন।
SOCKS এন্ডপয়েন্ট আপনাকে ওয়েবসাইটে পৌঁছে দেয়। সেই সংযোগের ভিতরের TLS পিয়ার হলো ওয়েবসাইট নিজেই, তাই গন্তব্যের হোস্টনেম স্তরযুক্ত সকেট ফ্যাক্টরিতে দিন:
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.
}
}এই ফ্র্যাগমেন্টটি মানক Java নেটওয়ার্কিং ও TLS ইমপোর্ট, একটি বিদ্যমান ডিফল্ট ট্রাস্ট কনফিগারেশন এবং প্রক্সি ক্রেডেনশিয়াল না-দরকারি SOCKS সংযোগ ধরে নেয়। এটি হ্যান্ডশেক সম্পন্ন করে; অ্যাপ্লিকেশনকে এখনও সার্ভারের প্রত্যাশিত বিন্যাসে একটি HTTP অনুরোধ পাঠাতে হবে। অনুমোদিত পাবলিক রুটে পাবলিক HTTPS লক্ষ্যের জন্য SOCKS প্রক্সি তালিকা প্রার্থী এন্ডপয়েন্ট দেয়; সার্ভারের সংস্করণ ও হোস্টনেম সমর্থন এই Java সকেট পথের সঙ্গে মিলিয়ে নিন।
উদাহরণে দুটি পরিচয় পড়ুন
127.0.0.1:1080 হলো প্রক্সি এন্ডপয়েন্ট, এই Java প্রসেস থেকে পৌঁছানো যায়। destination ও destinationPort ওয়েবসাইট চিহ্নিত করে। createUnresolved ক্লায়েন্টে আগেভাগে রিজলভ না করে SOCKS পথের জন্য সেই হোস্টনেম রাখে।
স্তরযুক্ত createSocket গন্তব্যের পরিচয় গ্রহণ করে। setEndpointIdentificationAlgorithm("HTTPS") স্পষ্টভাবে তার হোস্টনেম পরীক্ষা চায়। একটি কাঁচা SSLSocket-এর সার্টিফিকেট-চেইন ট্রাস্ট নিজেই প্রমাণ করে না যে হোস্টনেম যাচাই সক্রিয়। অমিল চাপা দিতে প্রক্সির নাম বা loopback বদলালে ভুল এন্ডপয়েন্ট প্রমাণিত হতে পারে।
ট্রাস্ট ও পরিষ্কার করা নিজ নিজ ধাপে রাখুন
ডিফল্ট ফ্যাক্টরি JVM-এর কনফিগার করা ট্রাস্ট ব্যবস্থা ব্যবহার করে। ব্যক্তিগত প্রয়োজন থাকা অ্যাপ্লিকেশন এর বদলে যথাযথভাবে আরম্ভ করা SSLContext ফ্যাক্টরি ব্যবহার করতে পারে। সেই বাছাই SOCKS পথ থেকে আলাদা; প্রতিটি সার্টিফিকেট গ্রহণ করা ট্রাস্ট ম্যানেজার ভুল পিয়ার নাম ঠিক করে না।
SOCKS প্রত্যাখ্যান TLS-এর আগে ঘটে; অবিশ্বস্ত সার্টিফিকেট বা ভুল হোস্টনেম TLS-এর সময় ব্যর্থ হয়; এরপর HTTP ত্রুটি আসতে পারে। প্রক্সি লগইন টানেল অনুরোধ অনুমোদন করে, ভিতরের ওয়েবসাইট প্রমাণ করে না।
স্বয়ংক্রিয়-বন্ধ সক্রিয় রেখে স্তরযুক্ত সকেট বন্ধ করলে তার পরিবহন বন্ধ হয়। বাইরের রিসোর্স স্কোপও সেই পরিবহন বন্ধ করে যদি সাধারণ সমাপ্তির আগে মোড়ানো বা হ্যান্ডশেক ব্যর্থ হয়।