যেমনটি আপনি পেয়েছেন, আপনি অ্যাপাচি এইচটিপিপি-র মধ্যে SSL / TLS হ্যান্ডশেক স্তরে শংসাপত্র যাচাইকরণ অক্ষম করতে পারেন SSLVerifyCLient optional_no_ca
।
আপনি যে দ্বিতীয় সমস্যার মুখোমুখি হতে যাচ্ছেন সেটি হ'ল ক্লায়েন্টকে শংসাপত্রটি প্রেরণ করা। যেহেতু আপনার শংসাপত্রটি কোনও পিকেআই-র অন্তর্ভুক্ত নয়, সেগুলি স্ব-স্বাক্ষরিত হতে পারে এবং বিভিন্ন ইস্যুকারী থাকতে পারে।
ক্লায়েন্ট-শংসাপত্রের জন্য অনুরোধ করার সময়, সার্ভার হ্যান্ডহ্যাসকের সময় ক্লায়েন্টকে একটি CertificateRequest
টিএলএস বার্তা প্রেরণ করে। এই বার্তায় certificate_authorities
তালিকা রয়েছে :
গ্রহণযোগ্য শংসাপত্র কর্তৃপক্ষের বিশিষ্ট নামের একটি তালিকা। এই বিশিষ্ট নামগুলি মূল সিএ বা অধীনস্থ সিএর জন্য একটি পছন্দসই বিশিষ্ট নাম নির্দিষ্ট করতে পারে; সুতরাং, এই বার্তাটি উভয় জ্ঞাত শিকড় এবং একটি পছন্দসই অনুমোদনের স্থান বর্ণনা করতে ব্যবহার করা যেতে পারে। যদি সার্টিফিকেট_অর্থরিটিজগুলি তালিকা খালি থাকে তবে বিপরীতে কিছু বাহ্যিক ব্যবস্থা না থাকলে ক্লায়েন্ট মায়া যথাযথ ক্লায়েন্টের্টিফিকেট টাইপের যে কোনও শংসাপত্র প্রেরণ করে।
কোন ক্লায়েন্ট শংসাপত্র প্রেরণ করতে হবে তা চয়ন করতে ব্রাউজারগুলি এটি ব্যবহার করে (যদি থাকে)।
(নোট করুন যে খালি তালিকার অংশটি কেবলমাত্র টিএলএস 1.1 থেকে নির্দিষ্টকরণের মধ্যে রয়েছে SSL এসএসএল 3.0 এবং টিএলএস 1.0 এ সম্পর্কে নীরব রয়েছে, এবং বাস্তবে এটি কাজ করবে))
আপনি এটির জন্য দুটি বিকল্প পান।
আপনি যে ক্লায়েন্টের শংসাপত্রের প্রত্যাশা করেছেন তা যদি স্ব-স্বাক্ষরিত হতে চলেছে তবে তাদের সকলের আলাদা আলাদা ইস্যুকারী থাকবে। আপনি কী আশা করবেন তা জানেন না বলে সার্ভারকে একটি খালি তালিকা প্রেরণ করতে হবে। এটি করার জন্য, SSLCADNRequestFile
নির্দেশটি ব্যবহার করুন এবং এটি একটি ফাইলের দিকে নির্দেশ করুন যাতে খালি লাইন থাকে (যদি আমি ভাল করে মনে করি তবে এটি সম্পূর্ণ খালি ফাইলের সাথে কাজ করে না)।
দ্বিতীয় (কম পরিষ্কার) বিকল্প। আপনি যে ক্লায়েন্ট শংসাপত্রের প্রত্যাশা করছেন সেগুলির সাথে সাধারণ ইস্যুয়ার ডিএন-এর সাথে একমত হবেন, সেগুলি সত্যই সেই সিএ সার্টিফিকেট দ্বারা জারি করা হয়েছে কিনা (বা সিএ এমনকি রয়েছে কিনা তাও নয়)। এটি করে আপনি পিকেআই মডেলটিকে যথেষ্ট পরিমাণে (আরও) ভেঙে ফেলবেন।
আপনি যদি ইস্যুয়ার ডিএন এর মত সম্মত হন CN=Dummy CA
(উদাহরণস্বরূপ)। যে কেউ CN=Dummy CA
সম্ভবত সাবজেক্ট ডিএন (এবং ইস্যুয়ার ডিএন) হিসাবে সম্ভবত বিভিন্ন কী ব্যবহার করে একটি স্ব-স্বাক্ষরিত শংসাপত্র তৈরি করতে পারেন । যদিও SSLCADNRequestFile
নির্দেশিকাটি তালিকাটি তৈরির জন্য শংসাপত্রগুলির সাথে কনফিগার করা প্রত্যাশা করে, এগুলি ক্লায়েন্ট-শংসাপত্রটি যাচাই করতে মোটেই ব্যবহৃত হয় না, এটি তালিকাটি কনফিগার করার পদ্ধতিটি কেবল একটি জটিল (তবে অন্যান্য নির্দেশের প্রসঙ্গে প্রাকৃতিক) certificate_authorities
। আপনি যদি কোনও পরিষেবা হিসাবে এই নামের সাথে স্ব-স্বাক্ষরিত শংসাপত্র রাখেন তবে SSLCADNRequestFile
এটি CertificateRequest
টিএলএস বার্তাটিকে তালিকায় ব্যবহার CN=Dummy CA
করবে certificate_authorities
(এগুলি কেবলমাত্র নাম, এই পর্যায়ে শংসাপত্র নয়)। ক্লায়েন্ট তার পরে ইস্যুয়ার ডিএন এর সাথে নিজস্ব শংসাপত্র তুলতে সক্ষম হবেCN=Dummy CA
, তার স্বাক্ষর সেই শংসাপত্র (একই কীগুলি) দ্বারা যাচাই করা যায় কি না, যেহেতু কোনও স্বাক্ষর যাচাইকরণ এই পদক্ষেপগুলির সাথে যুক্ত নয়।
এটি বলা হচ্ছে, মনে রাখবেন যে এর সাথে SSLVerifyCLient optional_no_ca
কোনও আসল শংসাপত্র যাচাই করা হয় না (আমি মনে করি আপনি SSL_CLIENT_VERIFY
যদি ম্যানুয়াল যাচাইকরণটি কোনওভাবেই কনফিগার করেছেন এমন কোনও পিকেআইয়ের ফ্যালব্যাক সমাধান হয় তবে আপনি ভেরিয়েবলটি পরীক্ষা করতে পারেন)। এই পর্যায়ে আপনি যা জানবেন তা হ'ল ক্লায়েন্টের কাছে উপস্থাপিত সার্বজনীন কী শংসাপত্রের জন্য ব্যক্তিগত কী রয়েছে (টিএলএস CertificateVerify
বার্তা দ্বারা গ্যারান্টিযুক্ত ): আপনি যদি কিছুটির প্রমাণীকরণ চান তবে আপনাকে কিছু যাচাইকরণ করতে হবে সাজান. (আপনি শংসাপত্রের যে কোনও বিষয়বস্তুকে বিশ্বাস করতে পারবেন না, এটি এর সর্বজনীন কী এবং এতে থাকা নাম / বৈশিষ্ট্যগুলির মধ্যে যে কোনও বাধ্যবাধকতা রয়েছে))
এটি ফাইলগুলির পক্ষে ভাল কাজ করবে না তবে আপনি কোনও অ্যাপ্লিকেশনের জন্য এটি করতে পারেন (যেমন পিএইচপি / সিজিআই / ... এমনকি আপনি যদি প্রক্সাইড জাভা সার্ভারে শংসাপত্রটি পাস করেন তবে জাভা)। এক মৌলিক উপায় সার্বজনিক কী একটি প্রাক পরিচিত তালিকা আছে হবে, অথবা আপনি ধারণা তাকান পারে foaf + + SSL এর / WebID ।