অবশেষে সমস্ত সমস্যা সমাধান করতে পরিচালিত, তাই আমি আমার নিজের প্রশ্নের উত্তর দেব। এই আমার সেটিংস / ফাইলগুলি যা আমার বিশেষ সমস্যা (গুলি) সমাধান করার জন্য আমি ব্যবহার করেছি;
ক্লায়েন্টের কীস্টোর একটি হল PKCS # 12 এর বিন্যাস ফাইল
- ক্লায়েন্টের সর্বজনীন শংসাপত্র (স্ব-স্বাক্ষরিত সিএ স্বাক্ষরিত এই উদাহরণে)
- ক্লায়েন্টের ব্যক্তিগত কী
এটি উত্পন্ন করার জন্য আমি ওপেনএসএসএল-এর pkcs12
কমান্ড ব্যবহার করেছি , উদাহরণস্বরূপ;
openssl pkcs12 -export -in client.crt -inkey client.key -out client.p12 -name "Whatever"
টিপ: নিশ্চিত করুন যে আপনি সর্বশেষ ওপেনএসএসএল পেয়েছেন, সংস্করণ 0.9.8 ঘন্টা নয় , কারণ এটি এমন কোনও বাগ দ্বারা ভুগছে যা আপনাকে পিকেসিএস # 12 ফাইলগুলি সঠিকভাবে তৈরি করতে দেয় না allow
এই পিকেসিএস # 12 ফাইলটি সার্ভারের কাছে ক্লায়েন্ট শংসাপত্র উপস্থাপন করার জন্য জাভা ক্লায়েন্ট ব্যবহার করবে যখন সার্ভারটি ক্লায়েন্টকে স্পষ্ট করে প্রমাণীকরণের জন্য অনুরোধ করেছিল। ক্লায়েন্ট শংসাপত্র প্রমাণীকরণের প্রোটোকলটি কীভাবে কাজ করে (আমাদের এখানে ক্লায়েন্টের ব্যক্তিগত কী কী প্রয়োজন তাও ব্যাখ্যা করে) এর একটি সংক্ষিপ্তসার জন্য টিপিএসে উইকিপিডিয়া নিবন্ধটি দেখুন ।
ক্লায়েন্টের truststore সোজা এগিয়ে JKS বিন্যাস ফাইল রুট বা মধ্যবর্তী CA সার্টিফিকেট । এই সিএ শংসাপত্রগুলি আপনাকে নির্ধারণ করবে যে আপনাকে কোন শেষ পয়েন্টের সাথে যোগাযোগের অনুমতি দেওয়া হবে, এক্ষেত্রে এটি আপনার ক্লায়েন্টকে যে কোনও সার্ভারের সাথে কোনও শংসাপত্র উপস্থাপন করবে যা ট্রাষ্টস্টোরের সিএর একটিতে স্বাক্ষরিত হয়েছিল certificate
এটি উত্পন্ন করতে আপনি আদর্শ জাভা কীটোল ব্যবহার করতে পারেন, উদাহরণস্বরূপ;
keytool -genkey -dname "cn=CLIENT" -alias truststorekey -keyalg RSA -keystore ./client-truststore.jks -keypass whatever -storepass whatever
keytool -import -keystore ./client-truststore.jks -file myca.crt -alias myca
এই ট্রাস্টস্টোরটি ব্যবহার করে, আপনার ক্লায়েন্ট সিএ দ্বারা স্বাক্ষরিত একটি শংসাপত্র উপস্থাপনকারী সমস্ত সার্ভারের সাথে একটি সম্পূর্ণ এসএসএল হ্যান্ডশেক করার চেষ্টা করবে myca.crt
।
উপরের ফাইলগুলি কেবলমাত্র ক্লায়েন্টের জন্য। আপনি যখন একটি সার্ভারও সেট আপ করতে চান, তখন সার্ভারটির নিজস্ব কী- এবং ট্রাস্টস্টোর ফাইল দরকার। জাভা ক্লায়েন্ট এবং সার্ভার (টমক্যাট ব্যবহার) উভয়ের জন্য পুরোপুরি কার্যকর উদাহরণ স্থাপনের জন্য দুর্দান্ত একটি পদচারণা এই ওয়েবসাইটে পাওয়া যাবে ।
সংস্করণ / মন্তব্য / টিপস
- ক্লায়েন্ট শংসাপত্র প্রমাণীকরণ কেবল সার্ভার দ্বারা প্রয়োগ করা যেতে পারে।
- ( গুরুত্বপূর্ণ! ) সার্ভার যখন ক্লায়েন্ট শংসাপত্রের (টিএলএস হ্যান্ডশেকের অংশ হিসাবে) অনুরোধ করে তখন এটি শংসাপত্রের অনুরোধের অংশ হিসাবে বিশ্বস্ত সিএর একটি তালিকাও সরবরাহ করে। প্রমাণীকরণের জন্য আপনি যে ক্লায়েন্ট শংসাপত্র উপস্থাপন করতে চান তা হ'ল এই সিএর একটিতে স্বাক্ষরিত নয় , তখন এটি মোটেও উপস্থাপিত হবে না (আমার মতে, এটি একটি অদ্ভুত আচরণ, তবে আমি নিশ্চিত যে এর কোনও কারণ আছে)। এটি আমার সমস্যার মূল কারণ ছিল, কারণ আমার স্ব-স্বাক্ষরিত ক্লায়েন্ট শংসাপত্রটি গ্রহণ করার জন্য অন্য পক্ষটি তাদের সার্ভারটি সঠিকভাবে কনফিগার করেনি এবং আমরা ধরে নিয়েছিলাম যে অনুরোধে ক্লায়েন্ট শংসাপত্রটি সঠিকভাবে সরবরাহ না করার কারণে সমস্যাটি আমার শেষ পর্যায়ে রয়েছে।
- ওয়্যারশার্ক পান। এটিতে দুর্দান্ত এসএসএল / এইচটিটিপিএস প্যাকেট বিশ্লেষণ রয়েছে এবং এটি ডিবাগিং এবং সমস্যাটি খুঁজে পেতে একটি দুর্দান্ত সহায়তা করবে। এটি অনুরূপ
-Djavax.net.debug=ssl
জাভা এসএসএল ডিবাগ আউটপুট নিয়ে অস্বস্তিকর না হলে তবে এটি আরও কাঠামোগত এবং (তর্কযোগ্যভাবে) ব্যাখ্যা করা সহজ।
অ্যাপাচি httpclient লাইব্রেরি ব্যবহার করা পুরোপুরি সম্ভব। আপনি যদি httpclient ব্যবহার করতে চান তবে গন্তব্য URL টি এইচটিটিপিএস সমতুল্য দিয়ে প্রতিস্থাপন করুন এবং নিম্নলিখিত জেভিএম যুক্তি যুক্ত করুন (যে কোনও লাইব্রেরি আপনি এইচটিটিপি / এইচটিটিপিএসের মাধ্যমে ডেটা প্রেরণ / গ্রহণ করতে চান তা নির্বিশেষে) :
-Djavax.net.debug=ssl
-Djavax.net.ssl.keyStoreType=pkcs12
-Djavax.net.ssl.keyStore=client.p12
-Djavax.net.ssl.keyStorePassword=whatever
-Djavax.net.ssl.trustStoreType=jks
-Djavax.net.ssl.trustStore=client-truststore.jks
-Djavax.net.ssl.trustStorePassword=whatever