হ্যান্ডশেক ব্যর্থতা বিভিন্ন কারণে ঘটতে পারে:
- ক্লায়েন্ট এবং সার্ভার দ্বারা ব্যবহারে বেমানান সাইফার স্যুট। এটির জন্য ক্লায়েন্টকে সার্ভার দ্বারা সমর্থিত একটি সাইফার স্যুট (বা সক্ষম) ব্যবহার করতে হবে।
- এসএসএলের বেমানান সংস্করণ ব্যবহারে রয়েছে (সার্ভারটি কেবলমাত্র টিএলএস ভি 1 গ্রহণ করতে পারে, যখন ক্লায়েন্টটি কেবল এসএসএল ভি 3 ব্যবহারে সক্ষম)। আবার, ক্লায়েন্টকে নিশ্চিত করতে হবে যে এটি SSL / TLS প্রোটোকলের একটি সামঞ্জস্যপূর্ণ সংস্করণ ব্যবহার করে।
- সার্ভার শংসাপত্রের জন্য অসম্পূর্ণ বিশ্বাসের পথ; সার্ভারের শংসাপত্রটি সম্ভবত ক্লায়েন্টের দ্বারা বিশ্বাসযোগ্য নয়। এটি সাধারণত আরও ভার্বোজের ত্রুটির ফলস্বরূপ ঘটে তবে এটি বেশ সম্ভব। সাধারণত ফিক্সটি হ'ল ক্লায়েন্টের বিশ্বাসের দোকানে সার্ভারের সিএ শংসাপত্রটি আমদানি করা।
- শংসাপত্রটি একটি অন্য ডোমেনের জন্য জারি করা হয়। আবার, এর ফলে আরও ভার্জোজ মেসেজ আসত, তবে কারণটি যদি হয় তবে আমি এখানে ঠিক করবো। এই ক্ষেত্রে সমাধানটি সঠিক শংসাপত্রটি ব্যবহার করার জন্য সার্ভারটি পাবেন (এটি আপনার বলে মনে হয় না)।
যেহেতু, অন্তর্নিহিত ব্যর্থতাটি পিনপয়েন্ট করা যায় না -Djavax.net.debug=all
, তাই এসএসএল সংযোগটি ডিবাগিং প্রতিষ্ঠিত করতে পতাকাটি স্যুইচ করা ভাল better ডিবাগটি চালু হওয়ার সাথে সাথে, আপনি হ্যান্ডশেকটিতে কী ক্রিয়াকলাপ ব্যর্থ হয়েছে তা নির্ধারণ করতে পারেন।
হালনাগাদ
এখন উপলভ্য বিশদগুলির উপর ভিত্তি করে, এটি প্রদর্শিত হচ্ছে যে সার্ভারে জারি করা শংসাপত্রের মধ্যে একটি অসম্পূর্ণ শংসাপত্রের বিশ্বাসের পথ এবং একটি মূল সিএ কারণে সমস্যা দেখা দিয়েছে বেশিরভাগ ক্ষেত্রে, এটি কারণ হ'ল রুটের সিএর শংসাপত্রটি ট্রাস্ট স্টোরে অনুপস্থিত থাকে এবং এটি এমন পরিস্থিতির দিকে পরিচালিত করে যেখানে শংসাপত্রের বিশ্বাসের পথটি থাকতে পারে না; শংসাপত্রটি ক্লায়েন্ট দ্বারা মূলত অবিশ্বস্ত। ব্রাউজারগুলি একটি সতর্কতা উপস্থাপন করতে পারে যাতে ব্যবহারকারীরা এটিকে উপেক্ষা করতে পারে, তবে এসএসএল ক্লায়েন্টদের ক্ষেত্রেও এটি একই নয় (যেমন এইচটিটিপিআরএল সংযোগ বিভাগ , বা অ্যাপাচি এইচটিপিপি কম্পোনেন্ট ক্লায়েন্টের মতো কোনও এইচটিটিপি ক্লায়েন্ট লাইব্রেরি )।
বেশিরভাগ ক্লায়েন্ট / গ্রন্থাগারগুলি শংসাপত্রের বৈধতার জন্য জেভিএম দ্বারা ব্যবহৃত ট্রাস্ট স্টোরের উপর নির্ভর করবে। বেশিরভাগ ক্ষেত্রে, cacerts
এটি JRE_HOME / lib / সুরক্ষা ডিরেক্টরিতে ফাইল হবে । যদি জেভিএম সিস্টেমের সম্পত্তি ব্যবহার করে ট্রাস্ট স্টোরের অবস্থান নির্দিষ্ট করা থাকে javax.net.ssl.trustStore
, তবে সেই পথে স্টোরটি সাধারণত ক্লায়েন্ট লাইব্রেরি দ্বারা ব্যবহৃত হয়। যদি আপনার সন্দেহ হয় তবে আপনার Merchant
ক্লাসটি একবার দেখুন এবং সংযোগটি তৈরি করতে এটি যে শ্রেণি / গ্রন্থাগারটি ব্যবহার করছে তা সন্ধান করুন।
এই বিশ্বাসের স্টোরটিতে সিএ প্রদানকারী সার্ভারের শংসাপত্র যুক্ত করা সমস্যার সমাধান করা উচিত। আপনি এই উদ্দেশ্যে সরঞ্জাম পাওয়ার বিষয়ে সম্পর্কিত প্রশ্নের সাথে আমার উত্তরটি উল্লেখ করতে পারেন , তবে জাভা কীটল ইউটিলিটি এই উদ্দেশ্যে যথেষ্ট।
সতর্কতা : ট্রাস্ট স্টোরটি মূলত আপনার বিশ্বাস করা সমস্ত সিএর তালিকা। যদি আপনি এমন কোনও শংসাপত্র স্থাপন করেন যা কোনও সিএর সাথে সম্পর্কিত নয় যা আপনি বিশ্বাস করেন না, তবে সেই সত্তার দ্বারা প্রদত্ত শংসাপত্র প্রাপ্ত সাইটগুলিতে এসএসএল / টিএলএস সংযোগগুলি ব্যক্তিগত কী উপলব্ধ থাকলে ডিক্রিপ্ট করা যেতে পারে।
আপডেট # 2: জেএসএসই ট্রেসের আউটপুট বোঝা
জেভিএম দ্বারা ব্যবহৃত কীস্টোর এবং ট্রাস্টস্টোরগুলি সাধারণত একেবারে নীচের মতো শুরুতে তালিকাভুক্ত হয়:
keyStore is :
keyStore type is : jks
keyStore provider is :
init keystore
init keymanager of type SunX509
trustStore is: C:\Java\jdk1.6.0_21\jre\lib\security\cacerts
trustStore type is : jks
trustStore provider is :
যদি ভুল ট্রস্টস্টোর ব্যবহার করা হয়, তবে আপনাকে সার্ভারের শংসাপত্রটি ডানদিক থেকে আবার আমদানি করতে হবে, বা তালিকাভুক্তটি ব্যবহার করার জন্য সার্ভারটি পুনরায় কনফিগার করতে হবে (যদি আপনার একাধিক জেভিএম থাকে তবে প্রস্তাবিত নয়) এবং এগুলি সমস্তই আলাদা আলাদা জন্য ব্যবহৃত হয় চাহিদা).
বিশ্বাসের শংসাপত্রের তালিকায় প্রয়োজনীয় শংসাপত্র রয়েছে কিনা তা আপনি যদি যাচাই করতে চান তবে তার জন্য এখানে একটি বিভাগ রয়েছে যা শুরু হয়:
adding as trusted cert:
Subject: CN=blah, O=blah, C=blah
Issuer: CN=biggerblah, O=biggerblah, C=biggerblah
Algorithm: RSA; Serial number: yadda
Valid from SomeDate until SomeDate
সার্ভারের সিএ সাবজেক্ট কিনা তা আপনাকে দেখতে হবে।
হ্যান্ডশেক প্রক্রিয়াটিতে কয়েকটি স্বতন্ত্র এন্ট্রি থাকবে (এগুলি বিস্তারিতভাবে জানার জন্য আপনাকে এসএসএল জানা দরকার, তবে বর্তমান সমস্যাটি ডিবাগ করার উদ্দেশ্যে, সার্ভারহেলোতে সাধারণত একটি হ্যান্ডশেক_ফিলার রিপোর্ট করা যথেষ্ট হবে)
1. ক্লায়েন্টহেলো
সংযোগ শুরুর সময় এন্ট্রিগুলির একটি সিরিজ জানানো হবে। এসএসএল / টিএলএস সংযোগ সেটআপে ক্লায়েন্ট কর্তৃক প্রেরিত প্রথম বার্তাটি হ'ল ক্লায়েন্টহেলো বার্তা, সাধারণত লগগুলিতে এই হিসাবে রিপোর্ট করা হয়:
*** ClientHello, TLSv1
RandomCookie: GMT: 1291302508 bytes = { some byte array }
Session ID: {}
Cipher Suites: [SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA]
Compression Methods: { 0 }
***
ব্যবহৃত সাইফার স্যুটগুলি নোট করুন। এটি আপনার মার্চেন্ট.প্রপার্টি ফাইলগুলিতে প্রবেশের সাথে একমত হতে পারে, কারণ একই সম্মেলনটি ব্যাংকের লাইব্রেরি দ্বারা নিযুক্ত হতে পারে। যদি ব্যবহৃত কনভেনশনটি পৃথক হয়, তবে উদ্বেগের কারণ নেই কারণ সার্ভারহেলো তাই বলে দেবে, যদি সাইফার স্যুইটটি বেমানান হয়।
2. সার্ভারহেলো
সার্ভারটি একটি সার্ভারহেলোর সাথে প্রতিক্রিয়া জানায়, এটি সংকেত সেটআপটি এগিয়ে যেতে পারে কিনা তা নির্দেশ করে। লগগুলিতে এন্ট্রিগুলি সাধারণত নিম্নলিখিত ধরণের হয়:
*** ServerHello, TLSv1
RandomCookie: GMT: 1291302499 bytes = { some byte array}
Cipher Suite: SSL_RSA_WITH_RC4_128_SHA
Compression Method: 0
***
সিফার স্যুটটি এটি চয়ন করেছে তা নোট করুন; এটি সার্ভার এবং ক্লায়েন্ট উভয়ের জন্যই সেরা স্যুট। সাধারণত কোনও ত্রুটি থাকলে সাইবার স্যুট নির্দিষ্ট করা হয় না। সার্ভারের শংসাপত্র (এবং optionচ্ছিকভাবে পুরো শৃঙ্খলা) সার্ভার দ্বারা প্রেরণ করা হয়েছে এবং এন্ট্রিগুলিতে এটি পাওয়া যাবে:
*** Certificate chain
chain [0] = [
[
Version: V3
Subject: CN=server, O=server's org, L=server's location, ST =Server's state, C=Server's country
Signature Algorithm: SHA1withRSA, OID = some identifer
.... the rest of the certificate
***
শংসাপত্রের যাচাইকরণ সফল হলে আপনি এর মতো একটি এন্ট্রি পাবেন:
Found trusted certificate:
[
[
Version: V1
Subject: OU=Server's CA, O="Server's CA's company name", C=CA's country
Signature Algorithm: SHA1withRSA, OID = some identifier
উপরের একটি পদক্ষেপ সফল হতে পারে না, যার ফলে হ্যান্ডশেক_ফিলার হয়েছিল, হ্যান্ডশেকটি সাধারণত এই পর্যায়ে সম্পূর্ণ হয় (আসলে নয়, তবে হ্যান্ডশেকের পরবর্তী পর্যায়ে সাধারণত হ্যান্ডশেক ব্যর্থতার কারণ হয় না)। আপনাকে কোন ধাপটি ব্যর্থ হয়েছে তা নির্ধারণ করতে হবে এবং প্রশ্নের বার্তাটি আপডেট হিসাবে যথাযথ বার্তাটি পোস্ট করতে হবে (যদি না আপনি ইতিমধ্যে বার্তাটি বুঝতে না পেরে থাকেন এবং এটি সমাধান করার জন্য আপনি কী জানেন না)।