একটি সার্ভারে সুরক্ষিত সংযোগ ব্যবহার করে এমন সফ্টওয়্যার তৈরি করা প্রতিটি বিকাশকারীর কাছে থাকা একটি দক্ষতা হওয়া উচিত। এমনকি যদি আপনি একটি নির্দিষ্ট উত্পাদন পরিবেশে SSL সক্ষম না করা বেছে নেন, তবে আপনি যে সার্ভারের সাথে কাজ করেন তার সাথে সংযোগগুলি কীভাবে সুরক্ষিত করবেন তা আপনার জানা উচিত। এই পোস্টটি আমাদের জাভা অনুরাগীদের জন্য পাইথনে রেডিস এন্টারপ্রাইজ ক্লাউডে সুরক্ষিত সংযোগ সক্ষম করার প্রতিশ্রুত ফলো আপ।
এই পোস্টটি SSL ব্যবহার করে Redis এন্টারপ্রাইজ ক্লাউড এবং একটি জাভা ক্লায়েন্ট প্রোগ্রামের মধ্যে এনক্রিপ্ট করা সংযোগ চালু, পরীক্ষা এবং কনফিগার করার একটি সহজ প্রক্রিয়ার মধ্য দিয়ে চলে। জাভা প্রোগ্রামগুলির জন্য SSL সক্ষম করার বিভ্রান্তিকর অংশগুলির মধ্যে একটি হল সার্টিফিকেট এবং কীগুলিকে জাভা বোঝে এমন একটি ফর্ম্যাটে রূপান্তর করা। এটি একটি জাভা-শুধু পদ্ধতি যা আমাদের প্রক্রিয়ার পরীক্ষা এবং কনফিগারেশন ধাপগুলির মধ্যে লুকিয়ে থাকতে হবে৷
টুলসেট
এই টুলগুলি ধরুন, যাতে আপনি Redis-এ SSL সক্ষম করার জন্য সেই টিকিটটি বন্ধ করতে পারেন:
- Redis Enterprise Cloud অ্যাকাউন্ট
- OpenSSL
- Java SE JDK
- জেডিস
আপনাকে ব্যাশ শেল ইনস্টল করতে হবে যাতে আপনি একটি ছোট স্ক্রিপ্ট চালাতে পারেন যা আমরা প্রদান করি। যদি আপনার অপারেটিং সিস্টেমে স্ট্যান্ডার্ড ইনস্টলের অংশ হিসাবে ব্যাশ অন্তর্ভুক্ত না করে, তাহলে আপনাকে এটি ইনস্টল করতে হবে বা আমাদের স্ক্রিপ্টকে আপনার পছন্দের শেলে অনুবাদ করতে হবে।
SSL ব্যবহার করতে, আপনার Redis Enterprise ক্লাউড সাবস্ক্রিপশনে SSL বৈশিষ্ট্য সক্রিয় থাকতে হবে। যদি আপনার অ্যাকাউন্টটি ইতিমধ্যে SSL-এর জন্য সক্ষম না থাকে, তাহলে আপনাকে এটি সক্ষম করতে Redis সহায়তা দলের সাথে যোগাযোগ করতে হবে। আপনি আপনার অ্যাকাউন্ট ড্যাশবোর্ডের প্রধান মেনুতে সহায়তা দলের সাথে যোগাযোগ করার জন্য একটি লিঙ্ক পাবেন। SSL সেট আপ করার জন্য ডকুমেন্টেশন রেডিস এন্টারপ্রাইজ ক্লাউড অপারেশনস এবং অ্যাডমিনিস্ট্রেশন গাইডে পাওয়া যাবে।
SSL বনাম TLS
শুধু একটি অনুস্মারক:আমাদের পাইথন পোস্টের মতো, আমরা "SSL" বা "TLS"-সুরক্ষিত সংযোগগুলি উল্লেখ করতে "SSL" সংক্ষিপ্ত নাম ব্যবহার করার অনানুষ্ঠানিক নিয়ম অনুসরণ করতে যাচ্ছি। যদিও Redis Enterprise ক্লাউড বর্তমানে (জুন 2018) সংযোগগুলি সুরক্ষিত করতে TLS প্রোটোকলের সংস্করণ 1.2 ব্যবহার করে, Redis Enterprise Cloud এবং Jedis উভয়ই "SSL" ব্যবহার করে, তাই আমরা এটি অনুসরণ করতে যাচ্ছি।
এক এবং দুই ধাপ
প্রথম দুটি ধাপ একটি পাইথন ক্লায়েন্টের জন্য SSL সেট আপ করতে ব্যবহৃত ধাপগুলির সাথে অভিন্ন। এখানে সবকিছু পুনরাবৃত্তি করার পরিবর্তে, আমরা আপনাকে আমাদের পাইথন পোস্টে উল্লেখ করতে যাচ্ছি। যে কোন ভাষায় SSL এর সাথে কাজ করার জন্য সেই পোস্টে প্রচুর দরকারী তথ্য রয়েছে। আমি সুপারিশ করছি যে আপনি চালিয়ে যাওয়ার আগে ধাপ 3 পর্যন্ত সবকিছু পড়েন৷
ধাপ 2 এর পরে প্রক্রিয়াটি জাভার জন্য আলাদা হতে শুরু করে, তাই আমরা Redis এন্টারপ্রাইজ ক্লাউড থেকে ডাউনলোড করা শংসাপত্র ফাইলগুলিকে একটি ফর্ম্যাটে রূপান্তর করতে এখানে একটি ধাপ 2.5 সন্নিবেশ করতে যাচ্ছি যা JavaSE এর সাথে ভাল কাজ করে৷
ধাপ 2.5:শংসাপত্রগুলিকে রূপান্তরিত করা
JavaSE-এর একটি আদর্শ অংশ হিসেবে, Oracle জাভা ক্রিপ্টোগ্রাফি আর্কিটেকচার (JCA) সহ বিভিন্ন ধরনের নিরাপত্তা পরিষেবা প্রদান করে। JCA জাভা অ্যাপ্লিকেশানগুলির জন্য API-এর একটি সেট সংজ্ঞায়িত করে যাতে প্লাগ-ইন প্রদানকারীদের দ্বারা প্রয়োগ করা হয় এমন সুরক্ষা পরিষেবাগুলি শুরু করা যায়৷ অ্যাপ্লিকেশানগুলি যেকোন উপলব্ধ প্রদানকারী ব্যবহার করার জন্য বিনামূল্যে (যারা প্রায়শই স্ট্যান্ডার্ড API এর বাইরে অতিরিক্ত পরিষেবা প্রদান করে), তবে বেশিরভাগ অ্যাপ্লিকেশনগুলি JDK এর সাথে পাঠানো ডিফল্ট প্রদানকারী ব্যবহার করে৷
ডিফল্ট প্রদানকারী ব্যবহার করার চ্যালেঞ্জ হল যে তারা PEM ফর্ম্যাটকে সমর্থন করে না যা সাধারণত লিনাক্স SSL লাইব্রেরির সাথে শংসাপত্র এবং কীগুলি সংরক্ষণ করতে ব্যবহৃত হয়। JCA-তে, শংসাপত্রের উপাদানগুলি পাসওয়ার্ড-সুরক্ষিত কীস্টোর সংগ্রহস্থলে সংরক্ষণ করা হয়। জাভা অ্যাপ্লিকেশনগুলিতে, দুটি সংগ্রহস্থল ব্যবহার করা সাধারণ:একটিকে ডকুমেন্টেশনে একটি কীস্টোর হিসাবে উল্লেখ করা হয় এবং অন্যটিকে একটি ট্রাস্টস্টোর হিসাবে উল্লেখ করা হয়। কীস্টোরটি ক্লায়েন্ট সফ্টওয়্যারের জন্য শংসাপত্র এবং ব্যক্তিগত কী সংরক্ষণ করতে ব্যবহৃত হয় এবং ট্রাস্টস্টোরটি শংসাপত্র কর্তৃপক্ষের কাছ থেকে বিশ্বস্ত শংসাপত্রগুলি সংরক্ষণ করতে ব্যবহৃত হয়। পিইএম ফরম্যাটটি রেডিস এন্টারপ্রাইজ ক্লাউড ব্যবহার করে, তাই আমরা আপনার পিইএম ফাইলগুলিকে আপনার জাভা ক্লায়েন্ট প্রোগ্রামগুলির জন্য ব্যবহারযোগ্য ট্রাস্টস্টোর এবং কীস্টোরে রূপান্তর করার জন্য প্রয়োজনীয় সমস্ত কমান্ড কার্যকর করার জন্য OpenSSL এবং Java Keytool ব্যবহার করে একটি স্ক্রিপ্ট তৈরি করেছি৷
নিম্নলিখিত স্ক্রিপ্ট, transmogrify.sh, সেই ডিরেক্টরি থেকে চালানো উচিত যেখানে আপনি আপনার redis_credentials.zip আনপ্যাক করেছেন৷ একটি ট্রাস্টস্টোর (redis_truststore.p12) তৈরি করতে স্ক্রিপ্টটি Redis সার্টিফিকেট অথরিটি সার্টিফিকেট (redis_ca.pem) ব্যবহার করে এবং একটি কীস্টোর তৈরি করতে ক্লায়েন্ট সার্টিফিকেট (redis_user.crt) এবং সংশ্লিষ্ট প্রাইভেট কী (redis_user_private.key) ব্যবহার করে (redisclient_keystore.p12) . ক্লায়েন্ট কীস্টোরটি পাসওয়ার্ড সুরক্ষিত থাকলেও, আপনার কীস্টোরের নিরাপত্তা নিশ্চিত করার জন্য আপনাকে এখনও পদক্ষেপ নিতে হবে। কীস্টোর এবং ট্রাস্টস্টোর উভয়ই একটি নির্দিষ্ট রেডিস ডাটাবেসের সাথে সংযোগকারী প্রতিটি ক্লায়েন্টের কাছে বিতরণ করা প্রয়োজন, তাই আপনি আবার এই ফাইলগুলিকে আপনার শংসাপত্র ব্যবস্থাপনা সিস্টেমে একীভূত করতে চাইবেন৷
JDK9-এর আগের জাভা সংস্করণগুলি মালিকানা জাভা কীস্টোর (JKS) বিন্যাসের পক্ষে ছিল, কিন্তু JDK9 দিয়ে শুরু করে, জাভা ডিফল্ট শিল্পের মান PKCS12 বিন্যাসে। এই স্ক্রিপ্টটি PKCS12 ফরম্যাট স্টোর তৈরি করে, কিন্তু আপনি যদি স্ক্রিপ্টটি পরিবর্তন করতে পারেন, তাহলে স্টোর টাইপ বিকল্প এবং ফাইল এক্সটেনশন পরিবর্তন করে JKS ফরম্যাট ব্যবহার করুন।
ধাপ 3:আপনার ক্লায়েন্ট কোডে SSL কনফিগার করুন
আপনার জাভা ক্লায়েন্টে SSL সক্রিয় করার চূড়ান্ত পদক্ষেপ হল একটি SSL সংযোগ স্থাপন করতে ক্লায়েন্ট কোড পরিবর্তন করা। আমাদের নমুনা কোড আমাদের রেডিস এন্টারপ্রাইজ ক্লাউড ইন্সট্যান্সের সাথে একটি সুরক্ষিত সংযোগ স্থাপন করবে, তারপর Redis PING কমান্ড পাঠাবে। আমাদের সংশোধিত কোডটি এরকম দেখাচ্ছে:
আপনি লক্ষ্য করবেন, কোডের কোথাও আমরা কীস্টোর বা ট্রাস্টস্টোর উল্লেখ করি না যা আমরা ধাপ 2.5-এ আমাদের জাভা প্রোগ্রামের জন্য তৈরি করেছি। JCA প্রদানকারীদের ডিফল্ট আচরণ সার্ভারকে প্রমাণীকরণ করে; আমাদের শুধু আমাদের কী এবং সার্টিফিকেট তথ্য প্রদান করতে হবে। এটি JCA প্রদানকারীদের দ্বারা পড়া সিস্টেম বৈশিষ্ট্যগুলির সাথে করা যেতে পারে। আপনার IDE অ্যাপ্লিকেশন কনফিগারেশন বা java কমান্ড লাইনে নিম্নলিখিত প্যারামিটার যোগ করুন:
আপনার সিস্টেম থেকে উপযুক্ত অবস্থান এবং পাসওয়ার্ড ব্যবহার করার জন্য তাদের পরিবর্তন করা।
কীস্টোর বৈশিষ্ট্য:
- javax.net.ssl.keyStoreType=PKCS12
- javax.net.ssl.keyStore=/Users/tague/dev/ssl-testj/redisclient_keyStore.p12
- javax.net.ssl.keyStorePassword=redis
ট্রান্সমোগ্রিফাই স্ক্রিপ্ট দ্বারা তৈরি কীস্টোরের জন্য প্রকার (ওরফে বিন্যাস), অবস্থান এবং পাসওয়ার্ড উল্লেখ করুন। একইভাবে, ট্রাস্টস্টোর বৈশিষ্ট্য:
- javax.net.ssl.trustStoreType=PKCS12
- javax.net.ssl.trustStore=/Users/tague/dev/ssl-testj/redis_truststore.p12
- javax.net.ssl.trustStorePassword=redis
ট্রাস্টস্টোরের ধরন, অবস্থান এবং পাসওয়ার্ড উল্লেখ করুন। চূড়ান্ত সম্পত্তি javax.net.debug=ssl:handshake হল একটি ঐচ্ছিক সম্পত্তি যা ডিবাগিং তথ্য সক্রিয় করতে ব্যবহৃত হয়।
SSL ব্যবহার করার জন্য জেডিস কনফিগার করা বিশেষভাবে কঠিন নয়, তবে আপনি যদি PEM শংসাপত্রগুলিকে জাভা কী এবং ট্রাস্টস্টোরে রূপান্তর করার প্রয়োজনীয় পদক্ষেপগুলির সাথে অপরিচিত না হন তবে এটি প্রথমে বন্ধ হয়ে যেতে পারে৷
আশা করি, এই পোস্টটি আমাদের জাভা অনুরাগীদের Redis এন্টারপ্রাইজ ক্লাউডের সাথে একটি সুরক্ষিত সংযোগ স্থাপনের জন্য একই মৃদু পরিচয় দিয়েছে যা আমরা পাইথন বিকাশকারীদের দিয়েছিলাম। আমি আপনাকে নিরাপত্তা সম্পর্কে একটি চূড়ান্ত অনুস্মারক দিয়ে যেতে চাই:বেশিরভাগ সংস্থার পাসওয়ার্ড এবং ব্যক্তিগত কীগুলি পরিচালনা করার জন্য নির্দিষ্ট নীতি এবং পদ্ধতি রয়েছে৷ আপনি তাদের নির্দেশিকা অনুসরণ করছেন তা নিশ্চিত করতে অনুগ্রহ করে আপনার অপারেশন এবং নিরাপত্তা টিমের সাথে চেক করুন।