Commons Net-এর FTPSClient-এর জন্য SOCKS পথ
সার্ভারের হোস্টনেম, প্যাসিভ ডেটা সংযোগ ও TLS যাচাই অক্ষুণ্ণ রেখে FTPS-এর জন্য Commons Net-এর সকেট-প্রক্সি ইন্টারফেস ব্যবহার করুন।
SOCKS মধ্যস্থকারী উপলব্ধ থাকলে Commons Net-এর FTPSClient উত্তরাধিকারসূত্রে পাওয়া সকেট-প্রক্সি ইন্টারফেস ব্যবহার করতে পারে। FTPS সার্ভারকেই সংযোগের গন্তব্য রাখুন:
var client = new org.apache.commons.net.ftp.FTPSClient(false);
client.setProxy(new java.net.Proxy(
java.net.Proxy.Type.SOCKS,
new java.net.InetSocketAddress("proxy.example", 1080)));
client.setTrustManager(null);
client.setEndpointCheckingEnabled(true);
client.setConnectTimeout(10000);
client.connect("ftps.example", 21);
এটি একটি সুস্পষ্ট FTPS সংযোগ শুরু করে। অ্যাপ্লিকেশন এখনও লগইন, ডেটা-সুরক্ষা আলোচনা, স্থানান্তর পরিচালনা ও সংযোগ বিচ্ছিন্ন করার দায়িত্বে থাকে। null trust-manager সেটিং Commons Net-এর শুধু তারিখভিত্তিক সার্টিফিকেট যাচাইয়ের বদলে JVM-এর ডিফল্ট trust manager নির্বাচন করে। উদ্দিষ্ট trust store ও সার্ভারের সার্টিফিকেট হোস্টনেম ব্যবহার করুন।
প্যাসিভ স্থানান্তরে বর্তমান FTPSClient বাস্তবায়ন তার ডেটা সকেটও কনফিগার করা প্রক্সির মাধ্যমে তৈরি করে, তারপর TLS স্তর যোগ করে। লগইনের পরে প্যাসিভ মোড ব্যবহার করুন এবং সাধারণ FTPS API-এর মাধ্যমে প্রয়োজনীয় সুরক্ষিত ডেটা চ্যানেল আলোচনা করুন। সফল কন্ট্রোল সংযোগ সেই কাজ সম্পন্ন করে না; প্যাসিভ ডেটা সংযোগ একটি আলাদা পথ হিসেবেই থাকে।
কোডটি অতিরিক্ত অ্যাকাউন্ট ছাড়া একটি SOCKS পরিষেবা ধরে নেয়। প্রমাণীকরণ সমর্থনের জন্য নির্বাচিত Java রানটাইম ও স্থাপনার আলাদা পর্যালোচনা দরকার।
এটি FTPHTTPClient-এর HTTP CONNECT ইন্টারফেস নয়। ওই সহোদর HTTP টানেলের উপর সাধারণ FTP পরিচালনা করে; এর পোর্ট বদলালে FTPS যোগ হয় না। নেটওয়ার্ক যদি কেবল HTTP প্রক্সি অনুমোদন করে, তবে কন্ট্রোল ও ডেটা—উভয় পথে CONNECT সমর্থন করে এমন FTPS বাস্তবায়ন বা রক্ষণাবেক্ষণ করা অভিযোজন বেছে নিন।
ক্লায়েন্টের জীবনচক্র ধরে প্রক্সি কনফিগারেশন ধরে রাখুন এবং পুনরায় ব্যবহৃত ইনস্ট্যান্স পুনঃসংযোগের আগে তা পর্যালোচনা করুন: FTPS সংযোগ বিচ্ছিন্নতা সকেট ফ্যাক্টরিগুলো রিসেট করে। পথটি সফল দেখাতে সার্টিফিকেট যাচাইয়ের বদলে trust-all manager বসাবেন না।