تمهيد
إنَّ MySQL هي أشهر نظام مفتوح المصدر لإدارة قواعد البيانات العلاقية في العالم؛ وحاولت برمجيات إدارة الحزم تقليل الجهد اللازم لتثبيت خادوم MySQL وتشغيله، لكن ما يزال عليك إجراء بعض عمليات الضبط بعد التثبيت. وأنصحك بقضاء بعض الوقت محاولًا زيادة حماية وأمان قواعد بياناتك.
تُضبَط MySQL مبدئيا لقبول الاتصالات المحلية فقط، فلو أردتَ السماح بالاتصالات «البعيدة» فمن المهم أن تكون تلك الاتصالات آمنة؛ وسنشرح في هذا الدرس كيفية السماح بالاتصالات البعيدة إلى خادوم MySQL على أوبنتو 16.04 مع تشفير SSL/TLS.
المتطلبات المسبقة
إذا أردتَ المتابعة مع هذا الدرس، فستحتاج إلى خادومَي أوبونتو 16.04، إذ سنستخدم أحدها لاستضافة خادوم MySQL وسيلعب الآخر دور العميل. عليك أيضًا إنشاء مستخدم ليس جذرًا لكنه يمتلك امتيازات الجذر عبر الأمر sudo
، راجع درس الإعداد الابتدائي لخادوم أوبنتو 14.04 للمزيد من المعلومات حول الضبط المبدئي لخادومك.
يجب أن تثبّت على الجهاز الأول خادوم MySQL وتضبطه؛ يمكنك العودة إلى درستثبيت وإعداد نظامي إدارة قواعد البياناتMySQL وPostgreSQL على أوبنتو لمزيدٍ من المعلومات حول تثبيت وضبط هذه البرمجية.
أما على الجهاز الثاني، فعليك تثبيت حزمة عميل MySQL، إذ تستطيع استخدام الأمر apt
لتحديث فهرس الحزم ثم تثبيت البرمجيات الضرورية وذلك بتنفيذ الأمرين الآتيين:
sudo apt-get update sudo apt-get install mysql-client
يُفتَرَض أن يعمل خادومك وعمليك عملًا سليمًا.
التحقق من حالة تشفير SSL/TLS الراهنة على خادوم MySQL
علينا قبل البدء أن نتحقق من الحالة الراهنة لتشفير SSL/TLS على خادومنا.
سجِّل دخولك إلى خادومك MySQL عبر المستخدم root
التابع لقواعد MySQL. سنستخدم في الأمر الآتي الخيار -h
لتحديد عنوان IP للجهاز المحلي لكي يتصل العميل باستخدام بروتوكول TCP بدلًا من استخدام ملف socket محلي؛ وهذا سيُمكننا من التحقق من حالة تشفير SSL لاتصالات TCP:
mysql -u root -p -h 127.0.0.1
ستُسأل عن كلمة مرور مستخدم root
التي اخترتها أثناء عملية تثبيت خادوم MySQL؛ وبعدئذٍ ستنتقل إلى جلسة MySQL تفاعلية.
يمكننا إظهار حالة متغيرات SSL/TLS عبر كتابة التعليمة الآتية:
SHOW VARIABLES LIKE '%ssl%';
الناتج:
+---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_openssl | DISABLED | | have_ssl | DISABLED | | ssl_ca | | | ssl_capath | | | ssl_cert | | | ssl_cipher | | | ssl_crl | | | ssl_crlpath | | | ssl_key | | +---------------+----------+ 9 rows in set (0.01 sec)
لاحظ أنَّ قيمة المتغيرين have_openssl
و have_ssl
تساوي DISABLED
، وهذا يعني أنَّ دعم تشفير SSL مبنيٌ داخل الخادوم لكنه ليس مفعلًا بعد.
لنتحقق من حالة الاتصال الحالي للتأكد من النتائج السابقة، وذلك بإدخال:
\s
الناتج:
-------------- mysql Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using EditLine wrapper Connection id: 30 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.7.17-0ubuntu0.16.04.1 (Ubuntu) Protocol version: 10 Connection: 127.0.0.1 via TCP/IP Server characterset: latin1 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8 TCP port: 3306 Uptime: 3 hours 38 min 44 sec Threads: 1 Questions: 70 Slow queries: 0 Opens: 121 Flush tables: 1 Open tables: 40 Queries per second avg: 0.005 --------------
يمكننا أن نلاحظ من الناتج السابق أنَّ الاتصال غير مشفر عبر SSL، حتى لو كنّا قد اتصلنا عبر بروتوكول TCP.
أغلق جلسة MySQL عندما تنتهي:
exit
يمكننا الآن البدء بضبط MySQL لتستعمل تشفير SSL للاتصالات القادمة إليها.
توليد شهادات ومفاتيح SSL/TLS
لتفعيل اتصالات مشفرة عبر SSL إلى MySQL، فعلينا أولًا توليد الشهادات والمفاتيح المناسبة.
هنالك أداةٌ باسم mysql_ssl_rsa_setup
متوافرة مع MySQL 5.7 وما بعدها مهمتها تبسيط هذه العملية؛ وهنالك إصدار MySQL متوافق معها متوافر في أوبنتو 16.04، لذا سنستخدم هذا الأمر لتوليد الملفات اللازمة.
ستُنشَأ الملفات في مجلد ملفات MySQL الموجود في المسار /var/lib/mysql
؛ وعلينا السماح لعملية MySQL (أي MySQL process) بقراءة الملفات المولّدة، لذا سنُمرِّر القيمة mysql
اسمًا للمستخدم الذي سيملك الملفات المولّدة:
sudo mysql_ssl_rsa_setup –uid=mysql
سيكون ناتج عملية التوليد مشابهًا لما يلي:
Generating a 2048 bit RSA private key ...................................+++ .....+++ writing new private key to 'ca-key.pem' ----- Generating a 2048 bit RSA private key ......+++ .................................+++ writing new private key to 'server-key.pem' ----- Generating a 2048 bit RSA private key ......................................................+++ .................................................................................+++ writing new private key to 'client-key.pem' -----
تحقق من إنشاء الملفات الذي جرت عملية توليدها بالأمر find
:
sudo find /var/lib/mysql -name '*.pem' -ls
الناتج:
256740 4 -rw-r--r-- 1 mysql mysql 1078 Mar 17 17:24 /var/lib/mysql/server-cert.pem 256735 4 -rw------- 1 mysql mysql 1675 Mar 17 17:24 /var/lib/mysqlsql/ca-key.pem<^> 256739 4 -rw-r--r-- 1 mysql mysql 451 Mar 17 17:24 /var/lib/mysqlsql/public_key.pem<^> 256741 4 -rw------- 1 mysql mysql 1679 Mar 17 17:24 /var/lib/mysqlsql/client-key.pem<^> 256737 4 -rw-r--r-- 1 mysql mysql 1074 Mar 17 17:24 /var/lib/mysqlsql/ca.pem<^> 256743 4 -rw-r--r-- 1 mysql mysql 1078 Mar 17 17:24 /var/lib/mysqlsql/client-cert.pem<^> 256736 4 -rw------- 1 mysql mysql 1675 Mar 17 17:24 /var/lib/mysqlsql/private_key.pem<^> 256738 4 -rw------- 1 mysql mysql 1675 Mar 17 17:24 /var/lib/mysqlsql/server-key.pem<^>
آخر عمود من الناتج السابق يُظهِر أسماء الملفات المولّدة، أما العمود الرابع والخامس فيؤكدان أنَّ المستخدم المالك والمجموعة المالكة هو mysql
.
تُمثِّل هذه الملفات مفاتيح وشهادات لسلطة الشهادات Certificate authority (للملفات التي تبدأ بالسابقة «ca»)، ولعملية خادوم MySQL (للملفات التي تبدأ بالسابقة «server»)، ولعملاء MySQL (للملفات التي تبدأ بالسابقة «client»). إضافةً إلى ما سبق، هنالك الملفان private_key.pem
و public_key.pem
اللذان تستعملهما MySQL لنقل كلمة المرور بأمان دون استخدام SSL.
تفعيل اتصالات SSL الآمنة على خادوم MySQL
ستبحث الإصدارات الحديثة من MySQL عن ملفات الشهادات الملائمة ضمن مجلد بيانات MySQL عندما يبدأ الخادوم. ولهذا السبب، لن نحتاج إلى تعديل ضبط MySQL لتفعيل تشفير SSL.
كل ما علينا فعله هو إعادة تشغيل خدمة MySQL:
sudo systemctl restart mysql
بعد إعادة التشغيل، افتح اتصالًا إلى خادوم MySQL بالأمر الذي ذكرناه في بداية هذا الدرس؛ وسيحاول عميل MySQL الاتصال عبر تشفير SSL إن كان مدعومًا من الخادوم:
mysql -u root -p -h 127.0.0.1
لننظر مرةً أخرى إلى المعلومات التي طلبناها أوّل مرة، ولنلاحظ القيم المرتبطة بالمتغيرات المتعلقة بتشفير SSL:
SHOW VARIABLES LIKE '%ssl%';
الناتج:
+---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | ca.pem | | ssl_capath | | | ssl_cert | server-cert.pem | | ssl_cipher | | | ssl_crl | | | ssl_crlpath | | | ssl_key | server-key.pem | +---------------+-----------------+ 9 rows in set (0.00 sec)
نجد أنَّ قيم المتغيرات have_openssl
و have_ssl
أصبحت YES
بدلًا من DISABLED
؛ وسنلاحظ وجود قيم مرتبطة بالمتغيرات ssl_ca
و ssl_cert
و ssl_key
وهي أسماء ملفات الشهادات المولَّدة.
لنتحقق مجددًا من معلومات الاتصال بتنفيذ:
\s
الناتج:
-------------- . . . SSL: Cipher in use is DHE-RSA-AES256-SHA . . . Connection: 127.0.0.1 via TCP/IP . . . --------------
أصبح الناتج هذه المرة يشير إلى استخدام تشفير SSL لجعل اتصالنا مع الخادوم آمنًا.
لنعد إلى سطر الأوامر بالخروج من MySQL:
exit
أصبح بإمكان خادومنا الآن تشفير الاتصالات، لكن ما يزال علينا إجراء بعض الضبط الإضافي للسماح بالاتصالات البعيدة وإجبار العملاء على استخدام الاتصالات الآمنة.
ضبط الاتصالات الآمنة للاتصالات البعيدة
بعد أن أصبح تشفير SSL متاحًا على الخادوم، يمكننا البدء بضبط الوصول البعيد، وعلينا فعل ما يلي لتحقيق ذلك:
- جعل استخدام SSL ضروريًا للاتصال.
- ربط الخادوم ببطاقة شبكية عامة.
- إنشاء مستخدم MySQL للاتصالات البعيدة.
- تعديل قواعد الجدار الناري للسماح بالاتصالات الخارجية.
جعل استخدام SSL ضروريًا لإجراء الاتصال
أصبح خادوم MySQL مضبوطًا لقبول اتصالات SSL من العملاء؛ لكنه ما يزال يسمح بإجراء اتصالات غير مشفرة إذا طلب العميل ذلك.
يمكننا حل هذه المشكلة بتفعيل الخيار require_secure_transport
الذي لا يسمح إلا بالاتصالات المشفرة عبر SSL أو عبر مقبس Unix محلي؛ ولعدم إتاحة الاتصال عبر المقبس المحلي إلا ضمن الخادوم نفسه، فالحل الوحيد لاتصال العملاء البعيدين هو استخدام SSL للتشفير.
عدِّل ملف /etc/mysql/my.cnf
باستعمال محررك النصي المفضل لتفعيل هذا الخيار:
sudo nano /etc/mysql/my.cnf
ستجد داخل الملف تعليمتَي !includedir
التي تستخدم لقراءة ملفات الضبط الإضافية، علينا وضع الضبط الخاص بنا تحت تلك الأسطر لتجاوز أيّة تعليمات ضبط موجودة داخل ملفات الضبط الإضافية.
ابدأ بإنشاء قسم [mysqld]
لاستهداف عملية خادوم MySQL، واضبط تحت ترويسة هذا القسم الخيار require_secure_transport
إلى ON
:
. . . !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ [mysqld] # Require clients to connect either using SSL # or through a local socket file require_secure_transport = ON
لن نحتاج إلى أكثر من هذا السطر لجعل استخدام الاتصالات المشفرة ضروريًا.
إنَّ خادوم MySQL مضبوطٌ مبدئيًّا للاستماع إلى الاتصالات الآتية من الحاسوب المحلي فقط، وللاستماع إلى الاتصالات البعيدة، فيمكننا ضبط قيمة التعليمة bind-address
للإشارة إلى بطاقة شبكية مختلفة.
للسماح لخادوم MySQL بقبول الاتصالات من جميع البطاقات الشبكية، فيمكننا ضبط قيمة التعليمة bind-address
إلى 0.0.0.0
:
. . . !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ [mysqld] # Require clients to connect either using SSL # or through a local socket file require_secure_transport = ON bind-address = 0.0.0.0
احفظ الملف وأغلقه بعد أن تنتهي من تعديله.
أعد تشغيل خادوم MySQL لتطبيق الضبط الجديد:
sudo systemctl restart mysql
تأكد أنَّ خادوم MySQL يستمع على 0.0.0.0
بدلًا من 127.0.0.1
بكتابة:
sudo netstat -plunt
الناتج:
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 4330/mysqld tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1874/sshd tcp6 0 0 :::22 :::* LISTEN 1874/sshd
القيمة 0.0.0.0
في الناتج السابق تُشير إلى أنَّ خدمة MySQL تستمع إلى الاتصالات في جميع البطاقات الشبكية المتاحة.
علينا بعدئذٍ السماح لاتصالات MySQL عبر الجدار الناري، وذلك بإنشاء استثناء كما يلي:
sudo ufw allow mysql
الناتج:
Rule added Rule added (v6)
يجب أن تتمكن الاتصالات البعيدة من الوصول إلى خادوم MySQL.
إنشاء مستخدم MySQL للاتصالات البعيدة
أصبح خادوم MySQL جاهزًا للاستماع إلى الاتصالات البعيدة، لكننا لا نملك حاليًا أيّ مستخدم مضبوط لكي يتصل من حاسوبٍ آخر.
سجِّل دخولك إلى خادوم MySQL عبر المستخدم root
:
mysql -u root -p
يمكننا الآن إنشاء حساب للمستخدم البعيد عبر الأمر CREATE USER
، وسنستخدم عنوان IP لجهاز العميل في قسم المضيف من تعليمة تعريف المستخدم الجديد لجعل الاتصال عبر هذا المستخدم محصورًا بذاك الجهاز.
ولضمان الاتصال عبر SSL حتى لو عُطِّلَ الخيار require_secure_transport
مستقبلًا، فسنُحدِّد في تعليمة تعريف الحساب أنَّه يجب استعمال SSL عند الاتصال باستخدام هذا الحساب بتضمين REQUIRE SSL
:
CREATE USER 'remote_user'@'mysql_client_IP' IDENTIFIED BY 'password' REQUIRE SSL;
علينا بعد ذلك أن نمنح المستخدم صلاحيات على قواعد البيانات أو الجداول التي ينبغي له الوصول إليها؛ وسنُنشِئ قاعدة بيانات لشرح هذه الفكرة باسم example
وسنمنح مستخدمنا ملكيتها:
CREATE DATABASE example; GRANT ALL ON example.* TO 'remote_user'@'mysql_client_IP';
علينا تحديث جداول الصلاحيات لتطبيق التعديلات مباشرةً:
FLUSH PRIVILEGES;
أغلِق جلسة MySQL بعد أن تنتهي من تنفيذ الأوامر السابقة:
exit
اختبار الاتصالات البعيدة
لاختبار إمكانية إجراء اتصال من جهاز العميل إلى الخادوم بنجاح، فاستخدم الخيار -u
لتحديد اسم المستخدم البعيد، والخيار -h
لتحديد عنوان IP لخادوم MySQL:
mysql -u remote_user -p -h mysql_server_IP
بعد كتابتك لكلمة المرور، فستسجل دخولك إلى الخادوم البعيد.
نفذ الأمر الآتي للتأكد من أنَّ اتصالك آمن:
\s
الناتج:
-------------- . . . SSL: Cipher in use is DHE-RSA-AES256-SHA . . . Connection: mysql_server_IP via TCP/IP . . . --------------
اخرج من عميل MySQL وعد إلى سطر الأوامر:
exit
جرِّب الآن الاتصال بطريقة غير آمنة إلى الخادوم:
mysql -u remote_user -p -h mysql_server_IP –ssl-mode=disabled
بعد أن يُطلَب منك إدخال كلمة المرور، فستجد أنَّ الاتصال قد رُفِض:
ERROR 1045 (28000): Access denied for user 'remote_user'@'mysql_server_IP' (using password: YES)
هذا ما بدأنا درسنا محاولين إنجازه: فالاتصالات المشفرة عبر SSL إلى الخادوم مسموحة، والاتصالات غير المشفرة ممنوعة.
لهذا الحد، أصبح خادوم MySQL مضبوطًا للسماح بالاتصالات البعيدة الآمنة؛ ويمكنك أن تتوقف عند هذه النقطة إذا كان ذلك يلبي احتياجاتك الأمنية، لكن هنالك المزيد من الأمور التي يمكنك فعلها لزيادة الحماية.
ضبط التحقق من الاتصالات الآتية إلى خادوم MySQL
إنَّ خادوم MySQL مضبوطٌ حاليًا مع شهادة SSL موقعة من سلطة شهادات محلية (Local certificate authority)؛ والشهادة والمفتاح الخاصَين بالخادوم كافيان لتشفير الاتصالات القادمة إلى الخادوم.
لكننا لم نستفد من «الثقة» التي يمكن لسلطة الشهادات توفيرها، فعند توزيع شهادة سلطة الشهادات إلى العملاء، إضافةً إلى شهادة ومفتاح خاصَين بالعميل، فيمكن لكلا الطرفين التأكد أنَّ الشهادات موقعة من سلطة شهادات موثوقة. يمكن أن يساعد ذلك بمنع الاتصالات المزورة إلى أجهزة خبيثة.
لتطبيق هذا النوع من الحماية الإضافية، فسنحتاج إلى:
- نقل ملفات SSL الملائمة إلى جهاز العميل
- إنشاء ملف ضبط للعميل
- تعديل حساب المستخدم البعيد لطلب وجود شهادة موثوقة
نقل شهادات العميل إلى جهازه
علينا بادئ الأمر الحصول على شهادة سلطة الشهادات التابعة لخادوم MySQL مع ملفات شهادات العميل ووضعها في جهاز العميل.
سنبدأ بفعل ذلك بإنشاء مجلد باسم client-ssl
في جهاز العميل في مجلد المنزل للمستخدم الذي ستستعمله للاتصال:
mkdir ~/client-ssl
ولأنَّ مفتاح الشهادة هو ملفٌ حساس، فعلينا قفل الوصول إلى المجلد لكي لا يتمكن أي شخصٍ سوى المستخدم المالك له من الوصول إليه:
chmod 700 ~/client-ssl
يمكننا الآن نسخ معلومات الشهادة إلى مجلدٍ جديد.
اعرض محتوى شهادة سلطة الشهادات في خادوم MySQL بكتابة الأمر الآتي:
sudo cat /var/lib/mysql/ca.pem
الناتج:
-----BEGIN CERTIFICATE----- . . . -----END CERTIFICATE-----
انسخ جميع المحتوى بما فيه الأسطر التي فيها BEGIN CERTIFICATE
و END CERTIFICATE
إلى الحافظة.
أنشِئ ملفًا جديدًا في جهاز العميل باستعمال الأمر الآتي:
nano ~/client-ssl/ca.pem
ألصق محتوى الشهادة المنسوخ في ذاك الملف، ثم احفظه وأغلق الملف عندما تنتهي منه.
علينا الآن عرض محتوى شهادة العميل في خادوم MySQL:
sudo cat /var/lib/mysql/client-cert.pem
الناتج:
-----BEGIN CERTIFICATE----- . . . -----END CERTIFICATE-----
انسخ محتوياته مجددًا، واحرص على تضمين أول وآخر سطر.
أنشِئ ملفًا جديدًا في عميل MySQL بالاسم نفسه ضمن مجلد client-ssl
:
nano ~/client-ssl/client-cert.pem
ألصق محتويات الحافظة إلى الملف، ثم احفظه وأغلقه.
ثم اعرض محتويات مفتاح العميل على خادوم MySQL:
sudo cat /var/lib/mysql/client-key.pem
الناتج:
-----BEGIN RSA PRIVATE KEY----- . . . -----END RSA PRIVATE KEY-----
انسخ محتوياته مجددًا إلى حافظتك، واحرص على تضمين أول وآخر سطر.
أنشِئ ملفًا جديدًا في عميل MySQL بالاسم نفسه ضمن مجلد client-ssl
:
nano ~/client-ssl/client-key.pem
ألصق محتويات الحافظة إلى الملف، ثم احفظه وأغلقه.
يجب يكون في جهاز العميل جميع الشهادات اللازمة للوصول إلى خادوم MySQL؛ وعلينا الآن تعديل حساب المستخدم.
تعديل حساب المستخدم البعيد لطلب وجود شهادة موثوقة
أصبح لدى عميل MySQL الملفات اللازمة للتحقق من الشهادة عند الاتصال بخادوم MySQL، لكن الخادوم ليس مضبوطًا بعد لطلب وجود شهادة للعميل من سلطة شهادات موثوقة.
لتعديل ذلك، علينا تسجيل الدخول عبر المستخدم root
في خادوم MySQL:
mysql -u root -p
سنحتاج إلى تعديل المتطلبات الخاصة بالمستخدم البعيد، فبدلًا من استعمال عبارة REQUIRE SSL
علينا استعمال عبارة REQUIRE X509
والتي ستُطبِّق الإجراءات الأمنية نفسها، لكنها ستتطلب أيضًا أن يملك العميل شهادةً موقعةً من سلطة شهادات يثق بها خادوم MySQL.
علينا استعمال الأمر ALTER USER
لتعديل المتطلبات الخاصة بالمستخدم:
ALTER USER 'remote_user'@'mysql_client_IP' REQUIRE X509;
ثم حدِّث جداول الصلاحيات لتأخذ التعديلات مجراها مباشرةً:
FLUSH PRIVILEGES;
اخرج من سطر أوامر MySQL عندما تنتهي بالأمر:
exit
سنتأكد في الخطوة التالية أننا ما زلنا نستطيع الاتصال.
تجربة التحقق من الشهادة عند الاتصال
من المناسب الآن معرفة أنَّ كلا الطرفين سيستطيع التحقق من شهادة الآخر عند الاتصال.
لنحاول أولًا الاتصال من عميل MySQL دون توفير شهادات له:
mysql -u remote_user -p -h mysql_server_IP
الناتج:
ERROR 1045 (28000): Access denied for user 'remote_user'@'mysql_client_IP' (using password: YES)
سيرفض الخادوم الاتصال إذا لم نوفِّر شهادة للعميل.
حاول الآن الاتصال مع توفير الخيارات --ssl-ca
و --ssl-cert
و --ssl-key
للإشارة إلى الملفات الموافقة لها والموجودة في مجلد ~/client-ssl
:
mysql -u remote_user -p -h mysql_server_IP --ssl-ca=~/client-ssl/ca.pem --ssl-cert=~/client-ssl/client-cert.pem –ssl-key=~/client-ssl/client-key.pem
يجب أن تستطيع تسجيل الدخول إلى خادوم MySQL بنجاح. يمكنك العودة إلى سطر الأوامر بتنفيذ:
exit
لقد تأكدنا الآن من القدرة على الوصول إلى الخادوم، لكن يمكننا تحسين قابلية الوصول إليه بإنشاء ملف ضبط.
إنشاء ملف ضبط لعميل MySQL
لتجنب تحديد ملفات الشهادات في كل مرة نتصل فيها إلى الخادوم، فيمكننا إنشاء ملف ضبط بسيط لعميل MySQL.
أنشِئ ملفا مخفيًا في مجلد المنزل في عميل MySQL باسم ~/.my.cnf
:
nano ~/.my.cnf
أنشِئ في بداية ذاك الملف قسمًا باسم [client]
، ويمكننا بعد ذلك السطر إضافة الخيارات ssl-ca
و ssl-cert
و ssl-key
للإشارة إلى الملفات التي نسخناها من الخادوم؛ يجب أن يبدو شكل الملف كالآتي:
[client] ssl-ca = ~/client-ssl/ca.pem ssl-cert = ~/client-ssl/client-cert.pem ssl-key = ~/client-ssl/client-key.pem
يُخبِر الخيار ssl-ca
العميل أن يتحقق أنَّ الشهادة التي وفرها خادوم MySQL موقعةٌ من سلطة الشهادات التي أشرنا إلى شهادتها. وهذا يجعل العميل متأكدًا أنه يتصل بخادوم MySQL موثوق.
أما الخياران ssl-cert
و ssl-key
فيشيران إلى الملفات اللازمة لإثبات أنَّ العميل يملك شهادة موقعة من سلطة الشهادات نفسها. سنحتاج إلى ذلك إذا أردنا في خادوم MySQL التحقق أنَّ العميل موثوق من سلطة الشهادات أيضًا.
احفظ الملف وأغلقه عندما تنتهي من التعديلات عليه.
يمكنك الآن الاتصال إلى خادوم MySQL دون إضافة الخيارات --ssl-ca
و --ssl-cert
و --ssl-key
في سطر الأوامر:
mysql -u remote_user -p -h mysql_server_ip
يجب أن يملك الخادوم والعميل الآن الشهادات اللازمة للاتصال بأمان، وضبطنا كلا الطرفين للتحقق أنَّ الشهادة موقعة من سلطة الشهادات الموثوقة.
الخلاصة
يجب أن يكون خادومك مضبوطًا لقبول الاتصالات الآمنة من العملاء البعيدين. وإذا اتبعتَ الخطوات اللازمة للتحقق من الشهادات عبر سلطة الشهادات فسيتأكد كلا الطرفين من وثوقية الطرف الآخر.
ترجمة –وبتصرّف– للمقال How To Configure SSL/TLS for MySQL on Ubuntu 16.04 لصاحبه Justin Ellingwood
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.