স্বাক্ষরিত এসএসএল শংসাপত্রটি ব্যবহার করে মাইএসকিএল-এ সংযোগ স্থাপন করতে পারেন


15

স্ব-স্বাক্ষরিত SSL শংসাপত্র তৈরির পরে, আমি তাদের ব্যবহার করতে আমার দূরবর্তী মাইএসকিউএল সার্ভারটি কনফিগার করেছি (এবং এসএসএল সক্ষম করা আছে)

আমি আমার রিমোট সার্ভারে প্রবেশ করি এবং এসএসএল (মাইএসকিউএল সার্ভারটি 5.5.25) ব্যবহার করে এর নিজস্ব মাইএসকিএলডে সংযোগ দেওয়ার চেষ্টা করি ..

mysql -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key --ssl-ca=ca.cert
Enter password: 
ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)

ঠিক আছে, আমি মনে করি এসএসএলের মাধ্যমে একই সার্ভারে সংযোগ স্থাপনে কিছু সমস্যা রয়েছে। তাই আমি আমার স্থানীয় বাক্সে ক্লায়েন্ট কীগুলি ডাউনলোড করি এবং সেখান থেকে পরীক্ষা ...

mysql -h <server> -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key --ssl-ca=ca.cert 
Enter password: 
ERROR 2026 (HY000): SSL connection error

এই "এসএসএল সংযোগ ত্রুটি" ত্রুটিটি কী বোঝায় তা অস্পষ্ট, তবে আমি যদি এটি বাদ দিই -ssl-ca, তবে আমি এসএসএল ব্যবহার করে সংযোগ করতে সক্ষম হয়েছি ..

mysql -h <server> -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.5.25 MySQL Community Server (GPL)

যাইহোক, আমি বিশ্বাস করি যে এটি কেবল সংযোগটি এনক্রিপ্ট করছে এবং প্রকৃতপক্ষে শংসাপত্রের বৈধতা যাচাই করছে না (মানে আমি ম্যান-ইন-মিডল আক্রমণের জন্য সম্ভাব্য ঝুঁকির মধ্যে পড়ব)

এসএসএল শংসাপত্রগুলি বৈধ (স্ব স্বাক্ষরিত হওয়া সত্ত্বেও), এবং সেগুলিতে একটি পাসফ্রেজ নেই। সুতরাং আমার প্রশ্ন, আমি কি ভুল করছি? আমি স্ব-স্বাক্ষরিত শংসাপত্র ব্যবহার করে কীভাবে এসএসএলের মাধ্যমে সংযুক্ত হতে পারি?

মাইএসকিউএল সার্ভার সংস্করণ 5.5.25 এবং সার্ভার এবং ক্লায়েন্টগুলি সেন্টোস 5।

কোন পরামর্শের জন্য ধন্যবাদ

সম্পাদনা : নোট করুন যে সমস্ত ক্ষেত্রে, কমান্ডটি একই ডিরেক্টরি থেকে জারি করা হচ্ছে যেখানে এসএসএল কী থাকে (তাই কোনও নিখুঁত পথ নেই)

সম্পাদনা (মিলিগ্রামের প্রতিক্রিয়া হিসাবে): ca.certশংসাপত্র কর্তৃপক্ষের শংসাপত্র, যা মাইএসকিএলকে বলে যে আমার শংসাপত্র কর্তৃপক্ষের উপর নির্ভরযোগ্য।

থেকে কনফিগ my.cnfহয়

[mysqld]
ssl-ca=/etc/ssl/mysql/ca.cert
ssl-cert=/etc/ssl/mysql/server.cert
ssl-key=/etc/ssl/mysql/server.key

আমি যোগ করার চেষ্টা ssl-cipher=DHE-RSA-AES256-SHAকরেছি কিন্তু এটি কার্যকর হয়নি বলে এটি সরিয়ে দিয়েছি ।


2
কী ca.cert? এটি কি সার্ভারের স্ব স্ব স্বাক্ষরযুক্ত শংসাপত্র? আপনি কি প্রমাণীকরণের জন্য ক্লায়েন্ট শংসাপত্র ব্যবহার করছেন? দয়া করে সার্ভারে SSL সম্পর্কিত কনফিগারেশন সরবরাহ করুন।
মিগ্রোগরভেন

ধন্যবাদ, আমি সার্ভার থেকে প্রতিক্রিয়া এবং এসএসএল কনফিগারেশন সহ আমার প্রশ্ন আপডেট করেছি। সংযোগ দেওয়ার চেষ্টা করার সময় কমান্ডলাইনে প্রদত্ত শংসাপত্রগুলি হ'ল ক্লায়েন্ট শংসাপত্র।
carpii

আসলে এটি একটি ভাল প্রশ্ন। অন্ধকারে আমি নিশ্চিত নই যে ক্লায়েন্টের জন্য সার্ভারগুলি এসএসএল-সিএ উল্লেখ করা কার্যকর হবে। তবে তারপরে ইম ছাড়াই এনক্রিপ্ট হওয়া সংযোগটি
কঠোরভাবে

উত্তর:


12

হ্যাঁ, আপনি ঠিক বলেছেন যে আপনি যদি নির্দিষ্ট না করেন --ssl-caতবে ক্লায়েন্ট সার্ভার শংসাপত্রটি একেবারেই পরীক্ষা করে না। যেহেতু এটি option বিকল্পটি ব্যতীত কাজ করে ব্যর্থতার সবচেয়ে সম্ভাব্য কারণ হ'ল ক্লায়েন্টটি সার্ভার শংসাপত্রকে বিশ্বাস করে না।

আপনি যদি স্ব-স্বাক্ষরিত ক্লায়েন্ট এবং সার্ভার শংসাপত্র ব্যবহার করছেন তবে ca.certফাইলটিতে এই দুটি ফাইলই অন্তর্ভুক্ত করা উচিত। এইভাবে ক্লায়েন্ট সার্ভার শংসাপত্রকে বিশ্বাস করবে এবং সার্ভার ক্লায়েন্ট শংসাপত্রকে বিশ্বাস করবে।

উদাহরণস্বরূপ:
সার্ভার কী এবং শংসাপত্র তৈরি করুন:

$ openssl req -x509 -newkey rsa:1024 \
         -keyout server-key-enc.pem -out server-cert.pem \
         -subj '/DC=com/DC=example/CN=server' -passout pass:qwerty

$ openssl rsa -in server-key-enc.pem -out server-key.pem \
         -passin pass:qwerty -passout pass:

ক্লায়েন্ট কী এবং শংসাপত্র তৈরি করুন:

$ openssl req -x509 -newkey rsa:1024 \
         -keyout client-key-enc.pem -out client-cert.pem \
         -subj '/DC=com/DC=example/CN=client' -passout pass:qwerty

$ openssl rsa -in client-key-enc.pem -out client-key.pem \
         -passin pass:qwerty -passout pass:

সিএ শংসাপত্র ফাইলে ক্লায়েন্ট এবং সার্ভার শংসাপত্রগুলি একত্রিত করুন:

$ cat server-cert.pem client-cert.pem > ca.pem

তোমাকে অনেক ধন্যবাদ! অনুপস্থিত পদক্ষেপটি হ'ল আমি একটি ca.pem এ সার্ভার এবং ক্লায়েন্টের শংসাপত্রগুলি জোগাড় করছি না। আমি পরিবর্তে প্রথমে উত্পন্ন সি.এ.সি.আরটি পাস করছিলাম (এবং তারপরে ক্লায়েন্ট এবং সার্ভার শংসাপত্র তৈরি করার সময় - সিএ-কি হিসাবে পাস হয়েছিল)
carpii

অদ্ভুত, তবে এটি সর্বদা আমার জন্য কেবলমাত্র একটি সিএ সার্ট দিয়ে কাজ করেছিল - ক্লায়েন্ট এবং সার্ভারে একই।
দিমিত্রি লেস্কোভ

হ্যাঁ, যতক্ষণ না ডিএন-এর জন্য কোনও বিশেষ প্রয়োজনীয়তা নেই - উদাহরণস্বরূপ সিএন একটি নির্দিষ্ট মান হ'ল - তবে আপনি ক্লায়েন্ট এবং সার্ভারে একই কী এবং স্ব-স্বাক্ষরিত শংসাপত্রটি ব্যবহার করতে পারেন।
কিথ বার্ডিস

3

ওয়ান ওয়ে এসএসএল ব্যবহার করতে, আপনার সাথে এটি ব্যবহার করা উচিত:

mysql -u <user> -p --ssl=1 --ssl-ca=ca.cert --ssl-verify-server-cert

--ssl-certএবং --ssl-keyমাইএসকিউএল ক্লায়েন্ট 2 উপায় SSL এর জন্য ব্যবহৃত হয়। এর অর্থ শংসাপত্র ভিত্তিক প্রমাণীকরণ। ক্লায়েন্ট শংসাপত্রের বিষয়বস্তুটি ব্যবহারকারীর নাম হওয়া উচিত।


2
এছাড়াও মনে রাখবেন যে সকেট সংযোগ তৈরি করার সময় এবং --ssl-verify-server-certসার্ভার শংসাপত্রের সিএন ব্যবহার করার সময় আপনাকে -h কমান্ড-লাইন বিকল্পের জন্য নির্দিষ্ট করা হোস্টের সমান হতে হবে।
কিথ বার্ডিস

0

কোনও সুযোগে, আপনি সার্ভার এবং ক্লায়েন্ট শংসাপত্রগুলির জন্য একই সাধারণ নামটি প্রবেশ করেন নি? যদি হ্যাঁ হয় তবে এর মধ্যে একটি প্রতিস্থাপন করুন যাতে সাধারণ নামগুলি আলাদা।


আমার জন্য, দিমিত্রি লেস্কোভের সমাধান কাজ করেছিল। মাইএসকিউএল এর এসএসএল ডকুমেন্টেশন অনুসারে: ( dev.mysql.com/doc/refman/5.0/en/creating-ssl-certs.html )> আপনি শংসাপত্র এবং কী ফাইলগুলি তৈরি করতে যে পদ্ধতি ব্যবহার করেন না কেন সার্ভারের জন্য ব্যবহৃত সাধারণ নাম মান এবং ক্লায়েন্ট শংসাপত্র / কীগুলির প্রতিটি সিএ শংসাপত্রের জন্য ব্যবহৃত সাধারণ নাম মান থেকে পৃথক হওয়া আবশ্যক। অন্যথায়, শংসাপত্র এবং কী ফাইলগুলি ওপেনএসএসএল ব্যবহার করে সংকলিত সার্ভারগুলির জন্য কাজ করবে না। এই ক্ষেত্রে একটি সাধারণ ত্রুটিটি হ'ল: ত্রুটি 2026 (এইচওয়াই 1000): এসএসএল সংযোগ ত্রুটি: ত্রুটি: 00000001: লিব (0): ফানক (0): কারণ (1)
gmas
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.