البحث في الموقع
المحتوى عن 'ssl'.
-
قد تتفاجأ ببعض المشاكل في عرض الصور بعد تثبيت شهادة SSL على مدونة ووردبريس. لا تقلق، ما عليك إلا أن تتابع قراءة هذا الموضوع لتتعرف على كيفية حل هذه المشكلة. عند تثبيت شهادة SSL على موقعك، يتغير عنوان موقعك بشكل طفيف، يسبب هذا التغيير حتى وإن كان بسيطا في الإضرار ببعض عناصر موقعك، الأمر الذي ينتج عن الاختلاف بين عنوان URL الذي تمت برمجة الموقع لاستخدامه وعنوان URL القديم الذي تستخدمه بعض عناصر المحتوى كالصور مثلا، أي أنه بعد تثبيت شهادة SSL يتم نقل كل المحتوى إلى عنوان https في حين لا تزال الصور تشير إلى عنوان http. يتجلى الحل إذن في ضرورة تغيير روابط كل الصور واستبدال http بـhttps ، ما يبدو أمرا شاقا للغاية. من حسن الحظ أنك لن تحتاج إلى تغيير روابط كل الصور التي سبق أن رفعتها واحدة تلو الأخرى. تبقى إمكانية التغيير اليدوي في قاعدة البيانات أمرا متاحا كما يمكنك اتباع الطريقة الأسهل والأكثر أمانا من خلال استخدام ملحق. إن واجهتك مشاكل في عمل الصور بعد تحديث موقعك باستخدام عنوان URL آمن جديد، تابع القراءة لتتعرف على كيفية القيام بالتغييرات الضرورية بشكل يدوي في قاعدة البيانات ولتطلع أيضا على الملحقات التي يمكن أن تستخدمها كحل بديل يتميز بالأمان وسرعة الاستخدام. البحث والاستبدال اليدويان باستخدام استعلامات قاعدة البيانات من الممكن القيام بتغيير روابط الصور بشكل يدوي في قاعدة البيانات. حتى نكون أكثر وضوحا: تجدر الإشارة إلى مدى سهولة ارتكابك للأخطاء أثناء القيام بذلك والإضرار بموقعك. سنتطرق لطريقة الاستبدال اليدوي لنشمل جميع الطُرق المُمكنة فقط رغم المخاطر التي ترافق القيام بالعملية. نظرًا لاحتمال ارتكابك لأخطاء أنصح باستعمال ملحق موثوق لتجنّب أيّة مشاكل قد تنتج عن التّعديل اليدوي. يعتبر عمل نسخة احتياطية (backup) لموقعك قبل القيام بأي تغيير كتعديل روابط الصور أمرا جيدا. يمكنك الإطلاع على المقال يفية نقل مواقع ووردبريس بسهولة باستخدام Snapshot في أكاديمية حسوب. بناء على ما سبق، إن وجدت نفسك في حالة نادرة تتطلب منك البحث في قاعدة البيانات لإيجاد روابط بعض الصور المعطلة، يمكنك القيام بذلك من خلال البحث في قاعدة البيانات بالطّريقة التّالية: سجل دخولك إلى phpMyAdmin، اضغط على قاعدة بيانات موقعك المدرجة في القائمة على اليسار ثم اضغط على تبويب Query. في استعلام SQL في خانة قاعدة البيانات أسفل الصفحة، أدخل الاستعلام التالي، ثم اضغط على GO: UPDATE wp_posts SET `post_content` = REPLACE (`post_content`, 'src="http://www.your-site.com', 'src="https://www.your-site.com'); تأكد من تحديث www.your-site.com إلى اسم نطاق موقعك الصحيح، ثم قم بتغيير البادئة النصية للجدول wp الخاصة ب wp_posts إذا لم تكن تستخدم البادئة الافتراضية وسبق لك أن قمت بتغييرها سابقا. إن كنت تستخدم نسخة ووردبريس متعددة المواقع ، تأكد من استخدام هذا الاستعلام لاحقا إن أردت أن تحدث الصور: UPDATE wp_2_posts SET `post_content` = REPLACE (`post_content`, 'src="http://www.your-site.com', 'src="https://www.your-site.com'); قم بتغيير 2 المتواجدة في wp_2_posts ليوافق رقم التعريف (ID) الصحيح لموقعك عند مطابقته مع مواقعك الفرعية، يجب عليك أن تستخدم هذا الاستعلام لكل المواقع في شبكتك. من المحتمل أن لا يكون ذلك ضروريا دائما، لكن إن كانت شبكتك معدة لاستخدام المجلدات الفرعية (sub-directories) ولم تكن مواقعك مجهزة لاستخدام نطاقات مختلفة قد تجد نفسك أمام ضرورة تغيير روابط صورك. يجب أن تستخدم الاستعلام أسفله لتحديث GUID الخاص بالصور المدرجة كمرفقات (attachments): UPDATE wp_posts SET `guid` = REPLACE (`guid`, 'http://www.your-site.com', 'https://www.your-site.com') WHERE post_type = 'attachment'; على غرار المثال الأول، يجب تغيير النطاق برابط URL الحالي وتغيير table prefix إن لم تكن تستخدم الإعداد الافتراضي. من المحتمل أن تحتاج استخدام هذا الاستعلام بالنسبة لكل المواقع على شبكتك: UPDATE wp_2_posts SET `guid` = REPLACE (`guid`, 'http://www.your-site.com', 'https://www.your-site.com') WHERE post_type = 'attachment'; لا تنس تغيير 2 المتواجدة في wp_2_posts برقم التعريف (ID number) الخاص بالمواقع في شبكتك. بعد القيام بما أسلفنا الذكر، من المفترض أن يتم تحديث كل الصور لتستخدم العنوان URL الجديد الذي (الذي يستخدم https)، إن لم ينجح الأمر في المرة الأولى كرر المحاولة فقد يكون ذلك مجديا. يساعد عدم استخدام كل الاستعلامات دفعة واحدة بل كل استعلام على حدة في نجاح هذه الطريقة. البحث عن روابط الصور واستبدالها باستخدام الملحقات يعتبر البحث عن روابط كل الصور واستبدالها باستخدام ملحق ما أكثر سهولة من القيام بذلك يدويا وأقل عرضة لارتكاب خطأ يؤدي إلى إيقاف موقعك. رغم ذلك، يبقى من المحتمل أن ترتكب خطأ ما، لذا يجب عليك أن تتأكد مرتين من كل ما تقوم بكتابته. يتم تحديث كل الملحقات التي سنتطرق لها بشكل تلقائي، لا تقلق فلن تستخدم ملحقا سرعان ما سيتجاوزه الزمن. في حين لا تتمتع كل هذه الملحقات بإمكانية العمل على المواقع المتعددة (Multisite) فإنها تفي بالغرض عند تفعيلها على كل موقع على حدة. بغض النظر عن أي هذه الخيارات ستقرر استخدامه نؤكد لك أنها كلها ذات جودة عالية كفيلة بإتمام العمل على أكمل وجه. Better Search Replace يتميز ملحق Better Search Replace على وجه الخصوص بتوفره على خاصية دعم المواقع المتعددة (Multisite)، فضلا عن بساطة تصميمه، يتوفر هذا الملحق على عدد محدود من الخصائص والإعدادات الضرورية التي لا يحتاج جُلُّ المستخدمين غيرَها. من أجل تثبيت هذا الملحق ببساطة، ما عليك إلا أن تتوفر على نسخة على ووردبريس منصبة، تعتبر إمكانية القيام بمعاينة تجريبية لترى أي الجداول تتأثر بالخيارات التي تحددها قبل تطبيقها فعليا من أفضل خاصيات Better Search Replace، تضمن لك هذه الخاصية احتماليةً أقل لاقتراف أي خطأ، ما يجعل منها أداة قَيِّمَةً للغاية. Search and Replace فضلا عن استبدال روابط الصور على موقعك، يمكن لملحق Search and Replace أن يقوم بالكثير من الأمور الأخرى، كتغيير عنوان URL ونطاق الموقع، عمل نسخة احتياطية لقاعدة بياناتك واستعادتها، إضافة إلى تغيير القيمة الافتراضية wp في table prefixes. يستطيع هذا الملحق القيام بمحاكاة للتغييرات التي تقترحها قبل تطبيقها فعليا، يكون ارتكاب الخطأ أقل احتمالا عند توافر إمكانية معاينة نتائج التغييرات دون القلق حول تطبيقها ثم إلغائها. يتطلب هذا الملحق استخدام نسخة 5.4 أو أحدث من PHP، يتم تثبيت Search and Replace بنفس سهولة أي ملحق آخر دون أي خطوات إضافية كما يتضمن أيضا دعم المواقع المتعددة (Multisite). WP Migrate DB يُستخدم WP Migrate DB عادة لتهجير (migration) المواقع، لكن يمكنك استخدامه أيضا للبحث عن الروابط القديمة لصورك وتغييرها، يتميز هذا الملحق بقدرته على تهجير موقع مطور محليا (locally developed) إلى استضافة مباشرة (live setup). يتميز هذا الملحق بسهولة الاستخدام فضلا عن عدم اشتراط أي متطلبات للتشغيل، رغم عدم أخذ الكثيرين لهذا الملحق بعين الاعتبار من أجل استبدال روابط الصور فإنه يبقى الخيار الأول للعديد من مستخدمي ووردبريس. خلاصة قد تسبب الصور بعض التعقيدات عند إضافة شهادة SSL إلى موقعك، حتى بعد تحديث عنوان URL الخاص بموقعك فإن الصور تبقى معطلة. يبقى الحل الوحيد هو قيامك بتحديث روابط الصور بنفسك ما يصبح عملية سهلة باستخدام أحد الملحقات المقدمة في هذا الموضوع. هل تمكنت من تغيير روابط صورك بنجاح؟ أي الملحقات استخدمت أو أيها تفضل؟ هل تفضل ملحقا آخر غير تلك التي أدرجنا في هذا الموضوع؟ تفضل بمشاركتنا تجربتك في التعليقات أسفله. ترجمة -وبتصرف- للمقال: Replacing Image Links in WordPress After Installing an SSL Certificate لكاتبته: JENNI MCKINNON.
- 1 تعليق
-
- نسخ إحتياطي
- ووردبريس
- (و 5 أكثر)
-
تعد Let’s Encrypt خدمة تقدم شهادات SSL مجانية من خلال واجهة برمجة تطبيقات تلقائية (automated API). أما عميل Let’s Encrypt الأكثر شيوعًا فهو عميل Certbot الخاص بـ EFF. يقدم Certbot مجموعة متنوعة من الطرق للتحقق من صحة المجال الخاص بك، وجلب الشهادات، وتكوين Apache و Nginx تلقائيًا. في هذا المقال، سنناقش الوضع المستقل لـ Certbot وكيفية استخدامه لتأمين أنواع أخرى من الخدمات، مثل خادم البريد أو وسيط الرسائل مثل RabbitMQ. لن نناقش تفاصيل تكوين طبقة المنافذ الآمنة (SSL)، لكن عند الانتهاء ستحصل على شهادة صالحة يتم تجديدها تلقائيًا. وإنك ستكون قادرًا على أتمتة إعادة تحميل الخدمة للحصول على الشهادة المُجددة. المتطلبات قبل مباشرتك بقراءة هذا الدليل, ستحتاج إلى: خادم دبيان 10، مستخدم غير جذري بإمتيازات sudo، وجدار حماية أساسي. اسم نطاق يشير إلى الخادم الخاص بك. يجب عدم استخدام المنفذ 80 أو 443 على الخادم الخاص بك. وإذا كانت الخدمة التي تحاول تأمينها موجودة على جهاز مزود بخادم ويب يشْغل كلا هذين المنفذين، فسيلزمك استخدام وضع مختلف مثل وضع webroot_ الخاص بـ Certbot أو وضع التحدي المعتمد على DNS. الخطوة الأولى - تثبيت Certbot يحوي دبيان 10 على عميل Certbot في المستودع الافتراضي الخاص به، حيث يجب أن يكون محدثًا بما يكفي للاستخدام الأساسي. وإذا كنت بحاجة إلى القيام بتحديات مرتبطة بـ DNS أو استخدام ميزات Certbot الأحدث الأخرى، عندها يتوجب عليك التثبيت من buster-backports repo كما هو موضح في توثيق Certbot الرسمي. قم بتحديث قائمة الحزمة: $ sudo apt update استخدم apt لتثبيت حزمة certbot: $ sudo apt install certbot يمكنك اختبار التثبيت عن طريق مطالبة certbot بإخراج رقم إصداره: $ certbot --version certbot 0.31.0 بعد قيامك بتثبيت Certbot، قم بتشغيله للحصول على شهادتك. الخطوة الثانية - تشغيل Certbot يحتاج Certbot للرد على اختبار تشفير صادر عن واجهة برمجة التطبيقات (API) الخاص بـ Let’s Encrypt لإثبات أننا نتحكم في نطاقنا. حيث يستخدم المنافذ 80 (HTTP) أو 443 (HTTPS) لتحقيق ذلك. قم بفتح المنفذ المناسب في جدار الحماية: $sudo ufw allow 80 استبدل 443 أعلاه إذا كان هذا هو المنفذ الذي تستخدمه. حيث سيخرج ufw تأكيدًا بأنه قد تم إضافة ادارتك: Rule added Rule added (v6) يمكننا الآن تشغيل Certbot للحصول على شهادتنا. حيث سنستخدم --standalone لإخبار Certbot بالتعامل مع التحدي باستخدام خادم الويب المدمج الخاص به. ويرشد خيار --preferred-challenges إلى Certbot لاستخدام المنفذ 80 أو المنفذ 443. فإذا كنت تستخدم المنفذ 80، فستستخدم خيار --preferred-challenges http. وأما بالنسبة إلى المنفذ 443، استخدم --preferred-challenges tls-sni. والآن سنستخدم الراية -d لتحديد النطاق الذي نطلب شهادة له. حيث يمكنك إضافة رايات -d متعددة لتغطية نطاقات متعددة في شهادة واحدة. للتوضيح سنستخدم --preferred-challenges http، لكن يتحتم عليك استخدام الخيار المناسب حسب حالة الاستخدام الخاصة بك. والآن قم بتشغيل الأمر التالي مع الخيارات المفضلة لديك للحصول على شهادتك: $sudo certbot certonly --standalone --preferred-challenges http -d your_domain عند تشغيل الأمر سيُطلب منك إدخال عنوان بريد إلكتروني والموافقة على شروط الخدمة. وبعد قيامك بذلك من المفترض أن ترى رسالة تخبرك عن مكان تخزين الشهادات موضحاً فيها بأن العملية كانت ناجحة: IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem Your cert will expire on 2019-08-28. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le ها قد حصلنا على شهاداتنا. دعنا الآن نلقي نظرة على ما قمنا بتنزيله وكيفية استخدام الملفات مع برنامجنا. الخطوة الثالثة - إعدادات التطبيق لن نتطرق في هذه المقالة إلى إعداد SSL لتطبيقك، حيث أن لكل تطبيق متطلبات وخيارات تهيئة مختلفة، لكن دعنا نلقي نظرة على ما تم تنزيله من قِبل Certbot. استخدم ls لعرض المجلد الذي يحوي مفاتيحك وشهاداتك: $sudo ls /etc/letsencrypt/live/your_domain سترى الناتج التالي: cert.pem chain.pem fullchain.pem privkey.pem README يحتوي ملف README في هذا المجلد على مزيد من المعلومات حول كل ملف من هذه الملفات. غالبًا ما ستحتاج فقط إلى ملفين من هذه الملفات: privkey.pem: هذا هو المفتاح الخاص بالشهادة. ويجب الإبقاء على هذا المفتاح بشكل آمن وسري، فهذا هو السبب في أن معظم ما في مجلد /etc/letsencrypt لديه أذونات مقيدة للغاية حيث يمكن الوصول إليه فقط من قبل المستخدم الجذر root. ستشير معظم إعدادات البرامج إلى هذا الملف على أنه ملف ssl-certificate-key أو ssl-certificate-key-file. fullchain.pem: هذه هي شهادتنا مرفقة بجميع الشهادات الوسيطة. ستستخدم معظم البرامج هذا الملف للحصول على الشهادة الفعلية، وستشير إليه في إعداداتها باسم مثل ssl-certificate. لمزيد من المعلومات حول الملفات الأخرى الموجودة، راجع قسم Where are my certificate? من توثيق Certbot. ستحتاج بعض البرامج إلى شهاداتها في تنسيقات أو مواقع أخرى، أو بأذونات مستخدم أخرى. من الأفضل ترك كل شيء في مجلد letsencrypt وعدم تغيير أي أذونات هناك (سيتم استبدال الأذونات عند التجديد على أي حال)، ولكن قد لا يكون هذا الخيار مناسبًا، ففي هذه الحالة ستحتاج إلى كتابة نص برمجي لنقل الملفات وتغيير الأذونات حسب الحاجة. حيث يجب تشغيل هذا النص البرمجي عند تجديد Certbot للشهادات والتي سنتحدث عنها بعد ذلك. الخطوة الرابعة - التعامل مع التحديثات التلقائية لـ Certbot تعد شهادات Let's Encrypt صالحة لمدة تسعين يومًا فقط. وهذا لدفع المستخدمين إلى أتمتة عملية تجديد الشهادة. حيث تقوم بذلك حزمة certbot التي قمنا بتثبيتها عن طريق إضافة سطر برمجي إلى /etc/cron.d. ويعمل هذا السطر البرمجي مرتين يوميًا ليقوم بتحديث أي شهادة ستنتهي صلاحيتها خلال ثلاثين يومًا. مع تجديد شهاداتنا تلقائيًا ما زلنا بحاجة إلى طريقة لتشغيل مهام أخرى بعد التجديد. حيث سنحتاج على الأقل إلى إعادة تشغيل خادمنا أو إعادة تحميله لاستلام الشهادات الجديدة، وكما ذكرنا في الخطوة الثالثة قد نحتاج إلى التلاعب في ملفات الشهادات بطريقة ما لجعلها تعمل مع البرنامج الذي نستخدمه. وهذا هو الغرض من خيار renew_hook. لإضافة renew_hook، نحتاج إلى تحديث ملف تكوين تجديد الخاص بـ Certbot. حيث يتذكر Certbot جميع التفاصيل عن كيفية جلبك الشهادة لأول مرة، وسيتم تشغيله بنفس الخيارات عند التجديد. نحتاج فقط إلى إضافة الخطاف (hook) الخاص بنا. قم بفتح ملف التكوين باستخدام أي محرر تفضله: $sudo nano /etc/letsencrypt/renewal/your_domain.conf سيتم فتح ملف نصّي /etc/letsencrypt/renewal/your_domain.conf مع بعض خيارات الإعدادات. بعدها قم بإضافة خطافك (hook) على السطر الأخير. نستخدم في هذه الحالة مثالًا يعيد تحميل خدمة rabbitmq: $renew_hook = systemctl reload rabbitmq قم بتحديث الأمر أعلاه بإضافة كل ما تحتاج تشغيله لإعادة تحميل الخادم أو قم بتشغيل سكربت مخصص للقيام بذلك. عادةً ما نستخدم في دبيان خدمة systemctl لإعادة تحميل الخدمة. احفظ الملف وأغلقه، ثم قم بتشغيل Certbot بوضعية التشغيل الجاف (dry run) للتأكد من أن الصيغة صحيحة: $sudo certbot renew --dry-run إذا لم ترَ أي أخطاء فأنت جاهز تمامًا. فقد تم تعيين Certbot للتجديد عند الضرورة وتشغيل أي أوامر مطلوبة للحصول على الخدمة باستخدام الملفات الجديدة. الملخص في هذا المقال، ثبّتنا Certbot Let’s Encrypt Client، وتنزيل شهادة SSL باستخدام الوضع المستقل، كما وقمنا بتمكين عمليات التجديد التلقائي بخطافات التجديد (renew hooks). فمن المفترض أن يمنحك هذا بداية جيدة لاستخدام شهادات Let’s Encrypt مع خدمات مغايرة خادم الويب الإعتيادي. لمزيد من المعلومات يرجى الإطلاع على توثيق Certbot ترجمة -وبتصرف- للمقال How To Use Certbot Standalone Mode to Retrieve Let's Encrypt SSL Certificates on Debian 10 لأصحابه Brian Boucheron و Kathleen Juell و Hanif Jetha
-
كصاحب أي موقع جدّي، فإن أمن زوّارك أو مستخدمي موقعك يجب أن يكون من أولى أولوياتك، ولعلنا كمديري مواقع لطالما أردنا أيقونة القفل تلك (أحيانا تكون خضراء) بجانب عنوان (URL) الموقع، تُشير إلى أن موقعنا آمن ويستخدم اتصالا مشفرًا بين الزائر والخادوم. لحظة، ماهي شهادة SSL/TLS أولا؟SSL/TLS اختصارٌ لـِ Secure Socket Layer/Transport Layer Security وببساطة هو بروتوكول لتشفير نقل البيانات بين طرفين، في حالتنا هذه بين الخادوم والمستخدم (المتصفح)، ما يضيف ميزة الحماية على بروتوكول التصّفح HTTP، ومنه جاءت إضافة حرف S له فأصبح HTTPS. لماذا؟بدون هذا التشفير، يتم استعمال بروتوكول التصفح العادي HTTP، وهو بروتوكول ذو طبيعة نقل بيانات في شكلها النصّي البحت. أمّا مع HTTPS فسيقوم المتصفح بتشفير البيانات أوّلا قبل إرسالها، ثم يتم فكّ تشفيرها لمّا تصل إلى الخادوم، فإن التقط أحدهم هذه البيانات وسط الطريق، لن يكون بإمكانه قراءتها ﻷنها مشفّرة. تخيل أن لديك صفحة تسجيل دخول على موقعك (Login)، وموقعك لا يزال يستعمل HTTP، فإن حدث وأن كان أحد المتطفلين/المخترقين على نفس شبكة مُستخدمك (مثلا يتشارك معه نفس اتصال WiFi) والتقط هذا الأخير البيانات التي يرسلها مُستخدم موقعك، فسيعرف ماهو اسم المستخدم/بريده وكلمة مروره بكل سهولة ودون عناءٍ حتى. لا يقتصر هذا على المتطفلين فقط، فقد يكون مزود الخدمة لديك (ISP) ممن يسجّل تحركات زبائنه وبالتالي يمكنه أيضا كشف بيانات الدخول أيضا. هذه أمثلة فقط فالخطر لا يُمكن حصره، فالأجدر سدّ هذا الباب. بسبب هذا، نما في السنوات القليلة الماضية وعيٌ لدى مستخدمي الويب عموما، وجهات الويب المفتوح وحقوق المستخدم بضرورة تعميم استعمال بروتوكول HTTPS وتسهيل عملية تفعيله عوض تعقيدات التنصيب وتكلفة الشراء الباهضة. حيث قبل أيام قليلة فقط، كان الحصول على شهادة SSL/TLS أمرًا عسيرًا وقد يتطلب ميزانية مالية سنوية معتبرة زائدة على صاحب الموقع. فإما أن تشتري شهادة من طرف أحد الهيئات العالمية المعترف بها من طرف أغلب المتصفحات (مثل Comodo و Symantec)، أو تطلب شهادة شخصية مجانية واحدة فقط غير صالحة للاستخدام التجاري من عند StartSSL، أو تمر عبر خدمة Cloudflare التي تنصب نفسها وسطا بين خادوم موقعك وزوَاره حتى تنعم بـ SSL مجاني. مبادرة Let's encrypt من منطلق الوعي الحاصل بضرورة توفير شهادات SSL بطريقة سهلة، مجانية، مفتوحة وتلقائية، بادرت كل من Mozilla, Facebook, Cisco، منظمة لينكس وغيرها بإنشاء هيئة ذات سلطة توليد، تفعيل وإمضاء شهادات SSL، وقد نجحت في جعلها جهة مُعترفًا بها من طرف متصفحات الويب، وأطلقتها مؤخرا لعامة الناس كمرحلة Beta لكنها فعّالة ويمكن التعويل عليها من الآن فصاعدا. تحميل عميل أتمتة طلب شهادات Let's encrypt ملاحظة: حاليا، أداة العميل (client tool) تدعم فقط أنظمة يونكس، ولا يوجد دعم لخواديم Windows بعد. أولا، يجب طبعا الدخول على خادومك عبر ssh، إن كنت لا تعرف كيفية القيام بذلك، فأكاديمية حسوب تأخذ بيدك. تأكد أنك تملك صلاحيات root. ثانيا، عليك بتنصيب git، إن كنت على Ubuntu أو Debian مثلا فقم بالأمر التالي: sudo apt-get install gitأما على Fedora/Centos: sudo yum install gitوإن كنت على Arch Linux يكفي كتابة الأمر: sudo pacman -S gitثالثا: حمّل عميل Let's encrypt على خادومك عبر كتابة هذه الأوامر: git clone https://github.com/letsencrypt/letsencrypt طلب وتنصيب الشهادة لخادوم nginxملاحظة 1: عليك توقيف خادوم nginx للحظات لغاية انتهاء التنصيب، العميل لا يدعم توقيف وإعادة تشعيل nginx بشكل تلقائي بعد، لذلك يجب القيام بهذا يدويا. يمكنك توقيف خادوم nginx بكتابة الأمر التالي على Debian ومشتقالتها: sudo service nginx stopأو عبر: sudo systemctl stop nginxللأنظمة التي تعتمد على systemd. إن كنت تجهل كيفية التعامل مع خادوم nginx فإليك قسما كاملا على أكاديمية حسوب يهتم بهذا الجانب، وأنصحك أن تبدأ بهذا الدرس، عليك أن تألف إعادات nginx وكيفية عملها قبل المواصلة مع هذا الدرس. ملاحظة 2: أي إعداد خاطئ في هذه المرحلة قد يسبب توقف موقعك لمدة مُعتبرة، يجدر بك أولا معرفة مبادئ التعامل مع nginx. أولا يجب الدخول إلى حيث قمنا بتحميل عميل let's encrypt: cd letsencryptثم طلب الشهادة بهذ الطريقة: sudo ./letsencrypt-auto certonly --standalone -d example.com -d www.example.com الأمر أعلاه يقوم بالتالي: sudo ./letsencrypt-auto: تشغيل عميل طلب الشهادة بصلاحيات root.certonly: أي أننا نطلب فقط الشهادة لوحدها دون التنصيب التلقائي لها على nginx أو ما شابه (كون هذه الخاصية لا تزال تجريبية ولا يمكن التعويل عليها).standalone--: أي استعمل خادوم ويب خاص يتم تشغيله للاستماع على كل من منفذي 80 و 433 لتوثيق الشهادة من طرف سلطة let's encrypt (ضروري، ولهذا وجب توقيف nginx أولا).d-: اختصارًا لـ domain أي النطاق أو النطاقات الفرعية التي ستكون هذه الشهادة صالحة لها.ملاحظة: لا يمكن حاليا تمرير example.com.* مثلا إلى تعليمة d- حيث لم يتم بعد دعم wildcard domain، أي النطاقات التعميمية، لكن من السهل إضافة دعم أي نطاق فرعي آخر عبر إضافته إلى تعليمة d-. ستجلب الأداة بعض الاعتماديات اللازمة وتنصبها على النظام ثم تُظهِر لك الرسالة التالية: أدخل عنوان بريدك الالكتروني صحيحًا، ﻷنه سيكون مهما لاستعادة المفاتيح الضائعة أولإشعارك بأمور مهمة خاصة بشهادتك (كقرب موعد انتهاء صلاحيتها). ثم اضغط على مفتاح Enter. ستظهر بعدها إتفاقية الاستحدام -كما هو ظاهر أدناه- قم بقراءتها ثم الموافقة عليها: سيباشر بعدها العميل بطلب الشهادة وتوثيقها، لتظهر أخيرًا الرسالة التالية: IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will expire on 2016-03-04. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. - If like Let's Encrypt, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le كما هو موضّح في الرسالة، فقد تم تنصيب الشهادة في مسار /etc/letsencrypt/live/example.com/ حيث example.com هو اسم نطاق موقعك. يمكن تنصيب الشهادة على خادوم nginx بسهولة عبر تحرير الملف الخاص بموقعك وإضافة بضعة سطور، كالتالي: sudo nano /etc/nginx/sites-available/www.example.comحيث www.example.com هو اسم ملف، ويجب تغييره باسم ملف إعدادات موقعك مع nginx. ثم إضافة الأسطر التالية في كتلة server ضمن ملف الإعدادات: http { server { listen 443 ssl; server_name www.example.com; ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; ... // باقي الإعدادات تجاهلها } }قم بإعادة تشغيل خادوم nginx عبر الأمر التالي: sudo service nginx startإن كنت على أحد الأنظمة التي تستعمل systemd فقد يكون عليك إعادة تشغيل nginx بالأمر التالي: sudo systemctl start nginxتهانينا لك شهادة SSL مجانية صالحة لمدة 90 يوم، يمكنك طبعا تجديدها بتشغيل نفس الأمر، كما يمكنك أتمتة عملية التجديد عبر برمجتها كمهمة cron job عبر crontab (كل شهر مثلا لتفادي أي مشكل). تنصيب الشهادة على خادوم apacheيمكن طلب الشهادة بنفس الطريقة ثم فقط تنصيبها يدويا على خادوم Apache كما فعلنا مع nginx، يمكنك اتباع الدرس التالي من على أكاديمية حسوب لمعرفة كيفية القيام بذلك، أما إن كنت على أحد أنظمة Debian أو مشتقاتها (مثل Ubuntu) فيمكنك أتمتة العملية بأكملها (دون الحاجة لتوقيف الخادوم) عبر تشغيل الأمر التالي: sudo ./letsencrypt-auto --apacheسيتم سؤالك طبعا عن أسماء النطاقات، بريدك الالكتروني وشروط الخدمة. أجب عليها واترك الأداة تعمل لغاية ظهور رسالة التهنئة. ملاحظة: في حين احتاج nginx لملفي fullchain.pem و privkey.pem فإن Apache يحتاج لملفي: chain.pem لتعلمية SSLCertificateChainFile.وprivkey.pem لتعليمة SSLCertificateKeyFile.بهذا نكون قد تحصلنا على شهادتنا، يمكن إلقاء نظرة على التوثيق الرسمي لتخصيص الأداة وزيادة نسبة الأتمتة وكيفية التجديد التلقائي. على أمل أن نجعل الويب النّاطق بالعربية أكثر أمنا وخصوصية!
- 6 تعليقات
-
- 1
-
- https
- lets encrypt
-
(و 4 أكثر)
موسوم في:
-
نحن نرسل معلوماتنا الشخصية في كل يوم عبر الإنترنت، ففي الساعة الماضية دفعتُ المستحقات على بطاقتي الائتمانية، واشتريتُ كتابًا، وحفظتُ نسخةً من عناوين منازل أصدقائي، وأرسلتُ بعض رسائل البريد الإلكتروني، واشتريتُ بعض الحاجيات. أصبحتْ مشاركة معلوماتنا شائعة جدًا في هذه الفترة، حتى أننا لم نعد نفكر قبل مشاركتها. هذا هو الغرض من SSL، فشهادات SSL تحمي التفاصيل التي نشاركها على الإنترنت، مانعةً وقوعها في الأيدي الخاطئة. استخدام SSL –وبالتالي HTTPS– لحماية موقع ووردبريس الخاص بك وزواره لن يكون أمرًا صعبًا ومعقدًا، وسنناقش في هذا الدرس ما هو SSL وكيف نستخدمه. ما هو SSL؟ «طبقة المقابس الآمنة» (Secure Socket Layer اختصارًا SSL) بدأت كطريقة لزيادة الحماية بين المواقع الإلكترونية وزوارها في 1994 من شركة Netscape Communications حيث وجدوا أنَّ الحاجة لمثل هذه التقنية في تزايد. تم تحسين SSL لاحقًا وأُصدِرَ لأول مرة بنسخة 3.0 في عام 1996، لكنه كان يحتوي على ثغرات. ومن ثم استحوذت «Internet Engineering Task Force» (اختصارًا IETF) عليه رسميًا في 1999 وطوِّرَ كثيرًا منذ ذاك الحين. وفي الوقت الراهن، أعيدت تسمية SSL إلى TLS (Transport Layer Security أي حماية طبقة النقل)، لكن ما يزال يشار إليه باسم SSL أو TLS/SSL. وما يزال الغرض منه هو ذاته إلى يومنا هذا، وأصبحت هذه التقنية معياريةً لحماية مواقع الويب. متى يجب أن تستعمل SSL؟ أعلنت شركة Google منذ مدة أنَّها ستزيد من تقييم المواقع التي تستعمل SSL في نتائج بحثها، لكن ربما تجد زيادةً مقدارها 1% في هذه الفترة، لإعطاء الجميع فرصةً للانتقال إلى استخدام SSL. وبغض النظر عمّا سبق: إذا كان يطلب موقعك من المستخدمين تسجيل دخولهم أو إعطاء معلوماتهم الشخصية مثل أسمائهم وعناوين بريدهم الإلكتروني وتفاصيل بطاقتهم الائتمانية وهلم جرًا… فيجب أن توفِّر حمايةً عبر SSL. فبدونها قد تُعرِّض معلومات المستخدمين للخطر. كيف يعمل SSL؟ يعمل SSL عبر تشفير المعلومات المُمرَّرة بين الخادوم الذي يُستضاف عليه الموقع إلى المتصفح بدلًا من ترك المعلومات بصيغتها النصية، مما يعني أنَّ النص سيُعاد صياغته بطريقةٍ تجعله يبدو وكأنه سلسلة من الحروف غير المفهومة والأرقام، بدلًا من بقائه بصيغته المفهومة. لإنشاء اتصال SSL آمن على موقع ويب، فيجب أن يحصل صاحب الموقع على شهادة SSL (أي SSL certificate) من إحدى الشركات المتخصصة والتي تُسمى «سلطة الشهادات» (Certificate Authority). وبعد دفع المبلغ، فيجب إرسال معلومات الموقع الإلكتروني إلى سلطة الشهادات مثل الاسم والعنوان ورقم الهاتف. توضح هذه الصورة بعض المعلومات اللازمة لتسجيل شهادة SSL أساسية، هنالك معلوماتٌ أخرى تتطلبها الشهادات الأكثر أمانًا: وبالمقابل، سيحصل مالك الموقع على مفتاح عمومي (public key) ومفتاح خاص (private key). لا يجب مشاركة المفتاح الخاص مع أي شخص (مَثَلُهُ كمَثل كلمة المرور) لكن المفتاح العمومي ليس مهمًا أن يبقى مخفيًا. تلك المفاتيح هي أحرف وأرقام متناسقة مع بعضها رياضيًا، وهي تشبه المفتاح والقفل. وتُنشَأ عبر خوارزمية باسم Secure Hash Algorithm. يُرسَل المفتاح العمومي مع البيانات التي أدخلتها مسبقًا في ملفٍ باسم «Certificate Signing Request» (أي طلب توقيع الشهادة). ستتحقق سلطة الشهادات من المعلومات التي أدخلتَها وتتأكد أنها دقيقة (وأنَّك لستَ مُخترِقًا) وإذا جرى كل شيءٍ على ما يرام، فستوقَّع الشهادة عبر خوارزمية SHA. بعد ذلك ستصدر شهادة SSL، وهذه هي المرحلة التي يمكن للموقع فيها استخدام اتصالات مشفرة عبر SSL. وعندما يزور المستخدم موقعًا محميًا، فسيتأكد الخادوم أنَّ شهادة SSL تتطابق مع المفتاح الخاص، ومن ثم سينُشَأ «نفق مشفَّر» بين الخادوم (أو الموقع) والمتصفح (أو المستخدم). كيف تبدو المواقع المحمية بشهادات SSL؟ السابقة https ستظهر قبل رابط URL بدلًا من البروتوكول الافتراضي http. يمكنك أن تلاحظ قفلًا لونه أخضر معروضٌ في حقل العنوان في متصفحك. إذا اختار القائمون على الموقع شراء شهادة موسعة (تسمى «Extended Validation Certificate») فسيصبح شريط العنوان أخضر اللون بأكمله، أو سيحتوي على اسم الشركة باللون الأخضر قبل عنوان URL. أما في متصفح Safari فلن يصبح شريط العنوان أخضر اللون، ولن يكون لاسم الشركة خلفيةٌ خضراء، وإنما سيُستعمَل اللون الأخضر لكتابة اسم الشركة: عادةً، توفِّر الشهادات الموسعة حمايةً أكثر، وتُصدَر بعد أن تجتاز الشركة تحققات أكثر من سلطة الشهادات. وسيُطلَب من القائمين عليها توفير دليل على العنوان الفيزيائي وغير ذلك من الأمور القانونية، إضافةً إلى المعلومات الأساسية التي ذكرناها آنفًا. متى تتوقف شهادة SSL عن العمل إذا انتهت صلاحية شهادة SSL أو كانت موقعةً ذاتيًا (self-signed) أو كانت غير صالحة، فسيتحول لون كلمة https إلى الأحمر وأحيانًا يوضع خط فوقها، وأغلبية المتصفحات تحذِّرك إذا كان الموقع يستخدم شهادة SSL متوقفة، وتطلب تأكيدك قبل الدخول إلى الموقع غير الموثوق: عندما تنتهي صلاحية الشهادة، فيجب على مالك الموقع أن يُجدِّد شهادة SSL ببساطة، وذلك عبر سلطة الشهادات؛ لكن من الأفضل عدم الانتظار حتى انتهاء الشهادة لتجديدها، لكي يكون موقعك محميًا دومًا. أو سينبِّهك المتصفح إذا كنتَ تستخدم شهادة موقعة ذاتيًا وذلك إذا أصدرتَ شهادة SSL خاصة بك ولم تذهب إلى سلطة شهادات لتحقق من صحة المعلومات التي أدخلتها. أغلبية المتصفحات تثق بشهادات SSL المُصدَرَة من سلطة شهادات موثوقة، وستعرض تحذيرًا لجميع المواقع التي تستخدم شهادات موقعة ذاتيًا. إذا اشتريتَ شهادة SSL من شركة ليس ذات مستوى مرموق، فقد يُعتَبَر أنَّ موقعك يستخدم شهادة موقعة ذاتيًا. قد تصبح شهادة SSL غير صالحة لعدد من الأسباب، أحدها هو استخدام خوارزمية SHA قديمة. عملية التجزئة (hashing) هي عملية تحويل كمية كبيرة من المعلومات النصية إلى كمية أصغر يُشار إليها بالمفتاح (key) ويتم تحويلها عبر تطبيق مجموعة من القواعد الرياضية. وهنالك حاجةٌ إلى عملية تجزئة أقوى مع تقدم التقنية. لم تعد خوارزمية SHA0 مستخدمةً، وخفَّ استخدام خوارزمية SHA1 كثيرًا في الآونة الأخيرة، وأصبح متصفح Chrome يُظهِر تحذيرات بدءًا من عام 2016 للمواقع التي تستخدم خوارزمية SHA1. المعيار الحالي للتشفير هو خوارزمية SHA2 وأتوقع أن تحل محلها خوارزمية SHA3. قد يبدو لك أنَّ شهادة SSL غير صالحة إذا لم يتمكن المتصفح من التحقق منها من سلطة الشهادات. وهذا يحدث إذا كان اسم النطاق المستعمل في الشهادة يختلف عن اسم نطاق الموقع الذي يستخدمها. أفضل طريقة لحل هذه المشاكل هي تحديث شهادة SSL بالتنسيق مع سلطة الشهادات وباتباع تعليماتهم. إذا ظهر قفلٌ أمامه مثلثٌ أصفرٌ صغير، فمن المرجَّح أنَّ السبب هو أنَّ موقعك يحتوي على روابط لصفحات غير آمنة، تأكَّد أنَّ جميع صورك وعناصر القائمة وجميع الروابط في موقعك تستعمل بروتوكول https. من السهل معرفة السبب وراء عدم صلاحية الشهادة عبر استخدام أداة مجانية باسم Why No Padlock حيث تُعلِمُك مباشرةً بالمشكلة بما في ذلك استعمال الصور والسكربتات لبروتوكول http بدلًا من https. استخدام شهادة SSL مع ووردبريس بعد أن تملك شهادة SSL فيمكنك الآن استخدامها مع موقعك الذي يعتمد على ووردبريس. لا تنسَ أن تأخذ نسخةً احتياطيةً من كامل الموقع قبل إجراء أيّة تغييرات لمنع فقدان بياناتك في حال حدث شيءٌ غيرُ متوقعٍ. يمكنك الإكمال بعد أخذ النسخة الاحتياطية. لضبط شهادة SSL على موقع ووردبريس مستقل أو على شبكة متعددة المواقع، فافتح ملف wp-config.php وأضف السطر الآتي من الشيفرة. حيث سيُجبِر صفحات تسجيل الدخول ولوحة التحكم على استعمال تشفير SSL: define('FORCE_SSL_ADMIN', true); احرص على أن تضع السطر السابق قبل التعليق الآتي: /* That's all, stop editing! Happy blogging. */ سنضبط الآن إعادة توجيه (301) لكي يعاد توجيه كل زوار موقعك إلى النسخة الآمنة من الموقع التي تستعمل https بدلًا من http. عدِّل ملف .htaccess أو أنشِئ واحدًا إن لم يكن موجودًا من قبل. إذا كان موجودًا فعليك وضع الشيفرة الآتية في أول الملف قبل أي شيءٍ آخر. لا تنسَ وضع اسم نطاقك بدلًا من mysite.com واحرص على إدخال المنفذ الصحيح إذا لم يستعمل موقعك المنفذ 80. <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.mysite.com/$1 [R,L] </IfModule> افتح موقعك الآن لتجرِّبه. فإذا ظهرت الكلمة https في عنوان URL مع القفل الأخضر فهذا يعني أنَّ موقعك أصبح يستعمل شهادة SSL. الخلاصة الحصول على شهادة SSL لموقعك هي خطوةٌ مهمةٌ في طريق حمايته وحماية زواره، لكنها ليست الخطوة الوحيدة التي عليها فعلها، يمكنك الاطلاع على هذا الدرس. إذا أردتَ معلوماتٍ أكثر عن استخدام SSL مع ووردبريس لاحتياجاتك الخاصة، فانظر إلى صفحة Administration Over SSL في توثيق ووردبريس. هل أنت مهتم بالحصول على شهادة SSL مجانية؟ أعلنت EFF (Electronic Frontier Foundation) في عام 2014 أنها تعمل على مشروع مفتوح المصدر لإنشاء شهادات SSL مجانًا، وأُطلِق هذا المشروع لاحقًا باسم Let’s Encrypt. هنالك إضافاتُ تساعدك في ضبط شهادة SSL في موقعك، لكن انتبه فقد لا تكون تلك الإضافات مُحدَّثةً وقد لا تتوافق مع آخر نسخة من ووردبريس. قد تحسب أنَّه لا بأس باستعمال إضافات قديمة إذا كان يستعملها الكثيرون وقد اختبرتَها في موقعٍ تجريبي دون مشاكل، لكن حماية موقعك ليست شيئًا يُستهان به. ترجمة –وبتصرّف– للمقال How to Use SSL and HTTPS with WordPressلصاحبته Jenni McKinnon
- 1 تعليق
-
- 1
-
- certificate
- https
-
(و 1 أكثر)
موسوم في:
-
Let’s Encrypt هي سلطة شهادات مفتوحة ومؤتمتة تستعمل بروتوكول ACME (Automatic Certificate Management Environment) لتوفير شهادات TLS/SSL مجانية لأي عميل يحقق الشروط المطلوبة، وتلك الشهادات يمكن أن تستعمل لتشفير الاتصالات بين خادوم الويب وزوار موقعك. هنالك الكثير من العملاء المتاحة لبروتوكول ACME المكتوبة بمختلف لغات البرمجة، مع قدرة على الدمج مع أدوات الإدارة والخدمات والخواديم الشهيرة. أشهر عميل ACME باسم Certbot يُطوَّر حاليًا من Electronic Frontier Foundation. ويمكن لعميل Certbot ضبط تشفير TLS/SSL في خودايم أباتشي و Nginx إضافةً إلى التحقق من ملكية النطاق والحصول على الشهادات. سيشرح هذا الدرس سلطات الشهادات باختصار وكيف تعمل خدمة Let’s Encrypt، ثم سنتحدث عن بعض عملاء ACME. ما هي سلطة الشهادات؟ سلطات الشهادات (certificate authorities اختصارًا CAs) هي الجهات التي توقِّع شهادات TLS/SSL رقميًا لضمان وكفالة موثوقيتها. إذ تملك المتصفحات وأنظمة التشغيل قائمةً بسلطات الشهادات الموثوقة التي يمكن استعمالها للتحقق من شهادات أحد المواقع. حتى وقتٍ قريب، كانت أغلبية سلطات الشهادات خاضعة لشركات تجارية والتي تتقاضى أموالًا للحصول على خدمات توقيع الشهادات، لكن أتت خدمة Let’s Encrypt وجعلت هذه العملية مجانية للمستخدمين عبر أتمتة العملية كليًّا، وبالاعتماد على نظام الرعاية والمساهمات المالية لتمويل البنية التحتية اللازمة لتشغيل مثل هذه الخدمة. لمزيدٍ من المعلومات حول الشهادات والأنواع المختلفة من سلطات الشهادات، فاقرأ مقالة A Comparison of Let’s Encrypt, Commercial and Private Certificate Authorities, and Self-Signed SSL Certificates. كيف تعمل خدمة Let’s Encrypt بروتوكول ACME يُعرِّف كيفية تواصل العملاء مع الخواديم لطلب الشهادات والتحقق من ملكية النطاقات وتنزيل الشهادات، وهذا البروتوكول في صدد تحويله إلى معيار IETF رسمي. توفِّر خدمة Let’s Encrypt شهادات لنطاقات موثوقة، وهذا يعني أنَّها ستتحقق أنَّ الشهادة تأتي من شخصٍ يتحكم فعليًا بالنطاق، وذلك عبر إرسال العميل لرمز فريد (unique token) ثم إجراء طلبية ويب أو DNS للحصول على مفتاح مأخوذ من ذاك الرمز. على سبيل المثال، لو كنا سنجري تحقق عبر HTTP، فسيحسب العميل المفتاح من الرمز الفريد (unique token) ورمز الحساب (account token)، ثم يضع الناتج في ملف مُخدَّم من خادوم الويب، ثم يمكن لخواديم Let’s Encrypt أن تنزِّل الملف الموجود في المسار http://example.com/.well-known/acme-challenge/token فإذا كان المفتاح صحيحًا، فهذا يعني أن العميل قادرٌ على التحكم بالموارد الموجودة في النطاق example.com وبالتالي سيوقِّع الخادوم الشهادة ويتيحها للعميل. يُعرِّف بروتوكول ACME عدِّة طرائق للتحقق أنَّ العميل يملك النطاق، فاختبار HTTPS شبيه باختبار HTTP، لكن بدلًا من استخدام ملف نصي فسيوفِّر العميل شهادة موقعة ذاتيًا وفيها مفتاح التحقق. أما التحقق عبر DNS فيتم عبر وضع المفتاح في سجل DNS TXT. عميل Certbot Certbot هو أشهر عميل Let’s Encrypt، وهو متوافر في أغلبية توزيعات لينكس ويتضمن القدرة على الضبط التلقائي لخادومَي أباتشي و Nginx. يمكنك الحصول على الشهادة وتحديث ضبط أباتشي بتنفيذ الأمر الآتي بعد تثبيت عميل Certbot: sudo certbot --apache -d www.example.com سيسألك Certbot بعض الأسئلة ثم يجري عملية التحقق وينزِّل الشهادات ويُحدِّث ضبط أباتشي ويعيد تحميل الخادوم، ويمكنك بعد ذلك أن تنتقل إلى https://www.example.com في متصفح الويب الخاص بك وستشاهد القفل الأخضر مشيرًا إلى أنَّ الشهادة صحيحة والاتصال مشفّر. ولأن شهادات Let’s Encrypt صالحة لتسعين يومًا فقط، فمن المهم ضبط عملية تجديد مؤتمة. الأمر الآتي سيُجدِّد كل الشهادات الموجودة على الحاسوب: sudo certbot renew ضع الأمر السابق في جدول cron وشغِّله يوميًا، وستُجدَّد الشهادات تلقائيًا قبل ثلاثين يومًا من انتهاء صلاحيتها، وإذا أُنشِئَت الشهادة بادئ الأمر مع أحد الخيارين --apache أو --nginx فسيعيد Certbot تحميل الخادوم بعد نجاح عملية التجديد. إذا أردتَ معرفة المزيد من المعلومات حول جداول cron فأحيلك إلى درس كيف نستخدم المهام المجدولة باستخدامCron في أنظمة لينكس ويونكس. عملاء آخرين لأن بروتوكول ACME مفتوح وموثّق جيدًا، فقد طوِّرَ الكثير من العملاء البديلين، وهنالك قائمة بعملاء ACME في موقع Let’s Encrypt، وأغلبية العملاء لا يملكون ميزة ضبط خادوم الويب تلقائيًا التي يملكها Certbot لكن هنالك ميزات أخرى لها قد تجذبك: - هنالك عميل مكتوب بكل لغات البرمجة تقريبًا، بما في ذلك سكربتات الصدفة (shell scripts) ولغة Go و Node.js، وقد تستفيد من ذلك إن كنتَ تُنشِئ شهادات في بيئة مغلقة لا يمكن تضمين بايثون فيها ولا بقية اعتماديات Certbot. - بعض العملاء يمكن أن يعملوا دون امتيازات الجذر، فمن المستحسن تقليل كمية الشيفرات التي تعمل بامتيازات الجذر إلى أقل قدر ممكن. - الكثير من العملاء يمكنها أتمتة عملية التحقق عبر DNS عبر استخدام الواجهة البرمجية المناسبة لموفِّر خدمة DNS لإنشاء سجلات TXT تلقائيًا، والتحقق عبر DNS يسمح بتوليد شهادات لحالات الاستخدام الغريبة مثل تشفير خواديم الويب التي لا يمكن للعموم الوصول إليها. - بعض العملاء يمكن أن يندمج مع خودايم الويب أو الخواديم الوسيطة (proxy) العكسية، أو موزّعات الحِمل (load balancers) مما يسهِّل عملية الضبط والتشغيل. بعض أشهر تلك العملاء: - lego المكتوب بلغة Go، والذي يُثبَّت عبر ملفٍ ثنائيٍ وحيد، والذي يدعم عدد من مزودي خدمة DNS لتسهيل التحقق عبر DNS. - acme.sh وهو سكربت صدفة بسيط يمكن أن يعمل دون امتيازات الجذر، ويستطيع أن يتواصل مع أكثر من 30 مزودًا لخدمة DNS. - Caddy وهو خادوم ويب كامل مكتوب بلغة Go والذي يملك دعمًا مدمجًا فيه لخدمة Let’s Encrypt. يتوافر الكثير من العملاء، وأصبحت العديد من الخدمات والخواديم تؤتمت عملية إعداد TLS/SSL بدعم خدمة Let’s Encrypt فيها. الخلاصة لقد شرحنا أساسيات عمل خدمة Let’s Encrypt، وناقشنا أشهر العملاء المتوافرين، وإذا أردتَ معرفة كيفية إعداد هذه الخدمة مع بقية البرمجيات فأنصحك بالاطلاع على درس تنصيب شهادة SSL مجانية عبر خدمة Let’s encrypt على خادوم لينكس. ترجمة –وبتصرّف– للمقال An Introduction to Let’s Encrypt لصاحبه Brian Boucheron
-
تمهيد إنَّ 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
-
مقدمة يُستخدم ميثاق (بروتوكول) الوِب TLS (اختصار لـ Transport Layer Security، أمان طبقة النقل) وسلفه SSL (اختصار لـ Secure Sockets Layer، طبقة المقابس الآمنة) لتغليف البيانات العاديّة ضمن إطار محميّ وآمن. يمكن للخواديم باستخدام هذه التقنية أن تؤمّن تبادل البيانات بينها وبين العملاء حتى ولو اعتُرِضت طريقُ الرسائل بين الخادوم والعميل. يساعد نظام الشهادات الأمنية Certificates المستخدِمين والزوار في التحقّق من أمان المواقع التي يتّصلون بها. سنقدّم في هذا الدليل الخطوات اللازمة لإعداد شهادة أمنيّة موقَّعة ذاتيًّا Self-signed certificate لاستخدامها مع خادوم الوِب Apache على أوبونتو 16.04. ملحوظة: تعمّي الشهادات الموقَّعة ذاتيًّا الاتصالات بين الخادوم والعملاء؛ لكن لن يمكنَ للعملاء استخدامُها للتحقّق من التحقّق من هويّة خادومك تلقائيًّا، إذ أنه لم تُوقّعها سلطة معترف بها. تتضمَّن المتصفّحات مثل فيرفكس وكروم قائمة بالسلطات المعترف بها والمخوَّلة إصدار شهادات TLS. يُناسب استخدام الشهادات الموقَّعة ذاتيًّا بيئات الاختبار، على الحاسوب الشخصي أو عندما لا يكون لديك نطاق Domain؛ مثلا في واجهات الوِب غير المتاحة للعموم. إن كان لديك نطاق فالأفضل أن تستخدم شهادة أمنية من سطلة معترف بها. يمكنك الحصول على شهادة مجانيّة من Let’s encrypt وإعدادها. المتطلبات ستحتاج قبل البدء بتنفيذ الخطوات الواردة في هذا الدرس إلى إعداد مستخدم إداري بامتيازات sudo غير المستخدم الجذر. راجع درس الإعداد الابتدائي لخادوم أوبونتو لمعرفة كيفية ذلك. ستحتاج أيضا لتثبيت خادوم الوِب Apache. إن رغبت في تثبيت كامل حزم LAMP (أي لينكس Linux، أباتش Apache، وMySQL وPHP) فالدرس كيف تثبت حزم MySQL ،Apache ،Linux :LAMP و PHP موجود لهذا الغرض؛ أما إن كنت ترغب في تثبيت Apache لوحده فيمكنك الاعتماد على الدرس المُشار إليه مع ترك الخطوات الخاصّة بكلّ من MySQL وPHP. تأكّد من توفّرك على المتطلّبات ثم نفّذ الخطوات المشروحة أدناه. الخطوة اﻷولى: إنشاء شهادة SSL يعمل بروتكول TLS (وسلفه SSL) باستخدام مفتاحيْن للتعميّة واحد عمومي Public وآخر خاصّ (أو سرّي) Private. يُخزَّن المفتاح السّري على الخادوم ولا يجوز أن يطّلع عليه أي عميل فهو خاصّ بالخادوم الذي يستخدمه لتعميّة المحتوى المُرسَل إلى العملاء. يُمكن لأيّ عميل الاطّلاع على شهادة TLS. تحوي هذه الشهادة المفتاح العموميّ الذي يُستخدَم لفكّ التعميّة عن المحتوى القادم من الخادوم. ملحوظة: رغم أن استخدام البروتكول SSL يقلّ يومًا بعد يوم إلا أن المصطلح “شهادة SSL” لا يزال يُستَخدَم كثيرًا، ويُقصَد به - في الغالب - TLS، الذي هو نسخة محسَّنة من SSL. تتيح مكتبة OpenSSL (مكتبة برمجيّة توفّر أدوات للتعامل مع شهادات SSL/TLS) إنشاء مفتاح تعميّة موقَّع ذاتيًّا بالأمر التالي: sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt ستُطرَح عليك مجموعة من الأسئلة، ولكن قبل النظر في تلك الأسئلة سنشرح الخيارات المذكورة في الأمر السابق: openssl: هذا هو الأمر الأساسي لإنشاء الشهادات، المفاتيح وبقية الملفات وإدارتها في OpenSSL. req: يحدّد هذا الأمر الفرعي المعيار X.509 لاستخدامه في البنية التحتيّة التي نريد استخدامها لإدارة المفاتيح العموميّة. يعتمد الميثاقان SSL وTLS المعيار X.509 لإدارة المفاتيح العمومية. نستخدم هذا الأمر الفرعي لطلب إنشاء شهادة تتوافق مع هذا المعيار. x.509: يغيّر هذا الخيار طريقة عمل الأمر الفرعي السابق ليخبره أننا في طور إنشاء شهادة موّقَّعة ذاتيًّا بدلا من إرسال طلب لتوقيع شهادة الذي هو السلوك المبدئي للأمر الفرعي. nodes: يطلُب هذا الخيار من openssl تجاوز خيار تأمين الشهادة بعبارة سرّ Passphrase. نريد أن يكون Apache قادرا على قراءة الشهادة بدون تدخّل من المستخدم عند بدْء تشغيل الخادوم. يمنع وجود عبارة سرّ Apache من قراءة ملفّ الشهادة وسنحتاج عند وجودها لإدخالها في كلّ مرة نعيد فيها تشغيل الخادوم. days 365: يحدّد هذا الخيار مدّة صلاحيّة الشهادة. اخترنا سنة. newkey rsa:2048: يخبر هذا الخيار الأمر openssl أننا نريد توليد شهادة ومفتاح جديد في نفس الوقت. بما أننا لم نولّد المفتاح المطلوب لتوقيع الشهادة في خطوة منفصلة فإننا نحتاج لإنشائه مع الشهادة. يحدّد الجزء rsa:2048 نوعيّة المفتاح بـ RSA وطوله بـ 2048 بت. keyout: يحدّد المسار الذي نريد حفظ المفتاح الخاصّ فيه. out: يحدّد المسار الذي نريد حفظ الشهادة فيه. ستنشئ هذه الخيارات مفاتيح التعميّة والشهادة. يطلُب الأمر كما أسلفنا الإجابة على بضعة أسئلة كما في الصورة التالية. تتعلّق الأسئلة بمعلومات عامة من قبيل الدولة والمدينة والمؤسّسة والمنظَّمة المُصدِرة للشهادة إضافة إلى معلومات عن الخادوم. يتعلّق أهمّ الأسئلة المطروحة - السطر Common Name - بالخادوم. يجب أن تجيب باسم النطاق الذي يعمل عليه الخادوم أو - وهو الأكثر شيوعا - عنوان IP العمومي للخادوم. يبدو المحثّ Prompt على النحو التالي: Country Name (2 letter code) [AU]:حرفان يمثّلان الدولة State or Province Name (full name) [Some-State]:اسم المنطقة (المحافظة أو الولاية) Locality Name (eg, city) []:اسم المدينة Organization Name (eg, company) [Internet Widgits Pty Ltd]:اسم المنظَّمة أو الشركة Organizational Unit Name (eg, section) []:اسم الفرع Common Name (e.g. server FQDN or YOUR name) []:عنوان الخادوم Email Address []:بريد المسؤول سيوضع الملفان المنشآن في مجلّدات فرعيّة من المجلّد etc/ ssl/ حسب ماهو محدَّد في الأمر. سنحتاج أيضًا - ما دمنا نتحدَّث عن OpenSSL - إلى إنشاء مجموعة Diffie-Hellman قويّة لتُستخدَم عندما يُناقش الخادوم طريقة نقل البيانات مع العملاء (خطوة من خطوات عدّة ضمن تقنيّة SSL/TLS لتأمين نقل البيانات). ينشئ اﻷمر التالي المطلوب: sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 يمكن أن يستغرق الأمر بضعة دقائق، نحصُل بعدها على مجموعة Diffie-Hellman مناسبة (على المسار etc/ssl/certs/dhparam.pem/) لاستعمالها في إعداداتنا. الخطوة الثانية: إعداد Apache لاستخدام SSL أنشأنا في الخطوة السابقة ملفّيْ الشهادة والمفتاح الخاصّ. نحتاج الآن لضبط Apache للاستفادة من هذيْن الملفّيْن. سنعدّل بضعة إعدادات: سننشئ مقطعا جديدًا في إعدادات Apache لتحديد خيارات إعداد مبدئيّة آمنة لـ SSL. سنعدّل المضيف الافتراضي Virtual host الخاص بـ SSL للإشارة إلى شهادة SSL التي أنشأناها في الخطوة السابقة. سنعدّل المضيف الافتراضي غير المُعمَّى ليعيد توجيه جميع الطلبات إلى المضيف الافتراضي المُعمَّى (الخاص بـ SSL). يُنصَح بهذا الإجراء لجعل جميع الاتصالات القادمة إلى الموقع آمنة (تمرّ عبر شهادة SSL). يجدر بالإعدادات التي سنحصُل عليها بعد تنفيذ النقاط المُشار إليها أعلاه أن تكون آمنة. تحديد خيارات إعداد مبدئيّة آمنة في Apache سننشئ أولا ملفّ إعداد جديدًا في Apache نعرّف فيه بعض إعدادات SSL. سنضبُط Apache للعمل بخوارزميّات تعميّة فعّالة ونفعّل بعض الميزات المتقدّمة لمساعدتنا في إبقاء خادومنا آمنا. سيُمكن لأيّ مضيف افتراضي يفعّل SSL. أنشئ ملفّ إعداد جديد ضمن المجلَّد etc/apache2/conf-available/ (مجلَّد إعدادات Apache). سنسمّي هذا الملف بـssl-params.conf حتى يكون واضحًا أنه يتعلّق بمعطيات Parameters إعداد SSL. sudo nano /etc/apache2/conf-available/ssl-params.conf سنعتمد لضبط إعدادات Apache بطريقة آمنة على توصيّات Remy van Elst من موقع Cipherli.st. جُهِّز هذا الموقع لتوفير إعدادات تعميّة جاهزة للاستعمال في أكثر البرمجيّات شيوعًا على الخواديم. ملحوظة توفّر الإعدادات المُقترَحة مبدئيًّا في الموقع أعلاه درجة أمان عاليّة. يمكن أن تأتي هذه الدرجة من الأمان على حساب التوافق مع البرامج العميلة (المتصفّحات أو أنظمة التشغيل القديمة). إن أردت دعم إصدارات قديمة من هذه البرامج فإن الموقع يوفّر إعدادات بديلة للإعدادات المبدئيّة، يمكنك الحصول عليها بالنقر على الرابط “Yes, give me a ciphersuite that works with legacy / old software” وستلاحظ أن الإعدادات تبدّلت. يعتمد الخيار بين النسخة المبدئية من الإعدادات والنسخة البديلة على نوعيّة العملاء التي تريد دعمها. توفّر النسختان أمانًا جيّدًا. سننسخ - لأغراض هذا الدرس - الإعدادات المقترحة، مع إجراء تعديليْن عليها. سنعدّل التعليمة SSLOpenSSLConfCmd DHParameters لتشير إلى ملف Diffie-Hellman الذي أنشأناه في الخطوة الأولى. سنعدّل أيضًا تعليمات الترويسة لتغيير عمل الخاصيّة Strict-Transport-Security وذلك بحذف التعليمة preload. توفّر هذه الخاصيّة أمانًا عاليَّا جدًّا إلا أنها يمكن إن فُعِّلت بدون وعي أو بطريقة غير صحيحة - خصوصًا عند استخدام الميزة preload - أن تؤدّي إلى اختلالات كبيرة في عمل الخادوم. تأكّد عندما تفعِّل هذه الميزة أنك تدرك جيّدًا ما تفعله. # from https://cipherli.st/ # and https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH SSLProtocol All -SSLv2 -SSLv3 SSLHonorCipherOrder On # تعطيل التعليمة preload في الخاصيّة Strict-Transport-Security # يمكنك إن أردت تفعيل هذه الخاصية وذلك بنزع علامة التعليق # من بداية السطر #Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" # نفس التعليمة السابقة ولكن دون preload Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains" Header always set X-Frame-Options DENY Header always set X-Content-Type-Options nosniff # Requires Apache >= 2.4 SSLCompression off SSLSessionTickets Off SSLUseStapling on SSLStaplingCache "shmcb:logs/stapling-cache(150000)" # أضفنا هنا المسار إلى ملفّ Diffie-Hellman SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem" احفظ الملفّ ثم أغلقه عندما تكون جاهزا لذلك. تعديل ملف مضيف SSL الافتراضي المبدئي ننتقل الآن إلى الملف المبدئي Default لمضيف SSL الافتراضي الموجود على المسار etc/apache2/sites-available/default-ssl.conf/. إن كنت تستخدم مضيفا اقتراضيًّا آخر فأبدله بالمضيف الافتراضي المبدئي في الأمر أدناه. نأخذ أولًا نسخة احتياطية من الملف: sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bak ثم نفتح ملف المضيف الافتراضي لتحريره: sudo nano /etc/apache2/sites-available/default-ssl.conf يبدو محتوى الملف، بعد نزع أغلب التعليقات، على النحو التالي: <IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> # BrowserMatch "MSIE [2-6]" \ # nokeepalive ssl-unclean-shutdown \ # downgrade-1.0 force-response-1.0 </VirtualHost> </IfModule> سنعدّل قليلا على الملف بإعداد تعليمات بريد مدير الخادوم، عنوان، اسم الخادوم… إلخ. كما سنعدّل تعليمة SSL لتشير إلى مسار ملفّيْ الشهادة والمفاتيح. نختُم بنزع التعليق عن خيار يوفّر الدعم للمتصفّحات القديمة لتفعيله. يبدو الملف بعد التعديلات كالتالي: <IfModule mod_ssl.c> <VirtualHost _default_:443> # بريد مدير الخادوم ServerAdmin your_email@example.com # نطاق الخادوم أو عنوان IP الخاص به ServerName server_domain_or_IP DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> # دعم المتصفحات القديمة BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 </VirtualHost> </IfModule> احفظ الملف ثم أغلقه. إعادة توجيه طلبات HTTP (غير المُعمَّاة) إلى HTTPS يجيب الخادوم بإعداداته الحاليّة على الطلبات الآمنة (HTTPS) وغير الآمنة (HTTP) على حدّ السواء. يُنصَح في أغلب الحالات من أجل أمان أعلى أن تُوجَّه طلبات HTTP تلقائيَّا إلى HTTPS. نفتح ملف المضيف الافتراضي - أو المضيف الذي تريده - لتحريره: sudo nano /etc/apache2/sites-available/000-default.conf كلّ ما نحتاجه هو إضافة تعليمة إعادة إعادة التوجيه Redirect داخل إعداد الوسم VirtualHost والإشارة إلى النسخة الآمنة من الموقع (https): <VirtualHost *:80> . . . Redirect "/" "https://your_domain_or_IP/" . . . </VirtualHost> احفظ الملف ثم أغلقه. الخطوة الثالثة: تعديل الجدار الناري إن كان جدار ufw الناري مفعّلًا، وهو ما توصي به الدروس المُشار إليها في المتطلّبات، فقد تحتاج لتعديل إعداداتِه من أجل السماح للبيانات المُؤَمَّنة (عبر SSL). يُسجّل Apache أثناء تثبيته مجموعات من المعلومات المختصرة Profiles لدى جدار ufw الناري. يمكننا عرض المجموعات المتوفّرة بالأمر التالي: sudo ufw app list تظهر مُخرجات الأمر : Available applications: Apache Apache Full Apache Secure OpenSSH يمكنك عرض الإعداد الحالي بالأمر sudo ufw status إن كان إعدادك الحالي يسمح لطلبات HTTP فقط فستبدو إعداداتك كالتالي” Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6) يمكننا تفعيل المجموعة Apache Full للسماح لطلبات HTTPS وHTTP معًا، ثم حذف المجموعة Apache لأننا لم نعد بحاجة إليها، فهي متَضَمَّنة في المجموعة Apache Full : sudo ufw allow 'Apache Full' sudo ufw delete allow 'Apache' ملحوظة: يمكنك استخدام الأمر sudo ufw app info PROFILE حيث PROFILE اسم مجموعة المعلومات لمعرفة المنافذ Ports والبروتوكولات التي تسمح المجموعة للطلبات بالمرور عبرها. يجب أن تبدو حالة الجدار الناري الآن على النحو التالي: sudo ufw status المخرجات: Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6) الخطوة الرابعة: اعتماد التغييرات في Apache نحن جاهزون الآن، بعد أن عدّلنا الإعدادات، لتفعيل وحدات Modules الترويسات Headers وSSL في Apache، وتفعيل المضيف الافتراضي الجاهز لاستخدام SSL ثم إعادة تشغيل Apache. يفعّل الأمران التاليّان على التوالي mod_ssl (وحدة SSL في Apache) وmod_headers (وحدة الترويسات) اللتين تحتاجهما إعداداتنا للعمل: sudo a2enmod ssl sudo a2enmod headers ثم نفعّل المضيف الافتراضي (ضع اسم المضيف مكان default-ssl إن كنت تستخدم مضيفًا غير المضيف المبدئي): sudo a2ensite default-ssl نحتاج أيضًا لتفعيل ملفّ الإعداد ssl-params الذي أنشأناه سابقا: sudo a2enconf ssl-params يجدر بالوحدات المطلوبة أن تكون الآن مفعَّلة وجاهزة للعمل، بقي لنا فقط اعتماد التغييرات. لكن قبل ذلك سنتأكّد من أنه لا توجد أخطاء صياغة في الملفات التي أعددناها وذلك بتنفيذ الأمر التالي: sudo apache2ctl configtest إن جرى كلّ شيء على ما يُرام فستظهر رسالة تشبه ما يلي: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message Syntax OK السطر الأول ليس سوى رسالة تفيد بأنّ التعليمة ServerName غير مضبوطة لتعمل على كامل الخادوم (مثلا مضبوطة في المضيفات الافتراضية فقط). يمكنك التخلّص من هذه الرسالة - إن أردت - بضبط قيمة التعليمة ServerName على نطاق الخادوم أو عنوان IP الخاصّ به في ملف الإعدادات العام etc/apache2/apache2.conf/. هذا الإعداد اختياري، فالرسالة لا تتسبّب في أي خلل. تظهر في السطر الثاني نتيجة التحقّق من الصياغة Syntax OK وتفيد بأنه لا توجد مشكلة من هذه الناحيّة. يمكننا إذن إعادة تشغيل خادوم الوِب لاعتماد التعديلات: sudo systemctl restart apache2 الخطوة الخامسة: اختبار التعمية افتح متصفّح الوِب وأدخل العنوان //:https متبوعًا باسم نطاق الخادوم أو عنوان IP الخاصّ به: https://server_domain_or_IP بما أنّ الشهادة الأمنيّة التي أنشأناه لا تصدُر من سلطة شهادات يثق بها المتصفّح فستظهر صفحة مخيفة عند زيارة الموقع تحمل الرسالة التالية. هذا السلوك متوقَّع وطبيعي. نهتمّ في هذا الدرس بجانب التعميّة من الشهادات الأمنيّة دون جانب التحقّق من هويّة المضيف (الموقع) الذي توفّره سلطات الشهادات (وهو جانب مهمّ أيضًا لأمان التصفّح). انقر على زرّ ADVANCED ثم انقر على الرابط الذي ينقلك إلى موقعك (يوجد عادة أسفل الصفحة). ستُنقَل إلى صفحة الموقع. إن نظرت إلى شريط العناوين في المتصفّح فسترى صورة قفل عليه علامة x أمام عنوان الموقع. يعني هذا الرّمز أن المتصفّح لم يستطع التحقّق من هوية الشهادة، إلا أنه يعمّي الاتصال بينك والخادوم. إن أعددتَ إعادة توجيه طلبات HTTP إلى HTTPS فيمكنك التحقق من نجاح الأمر بالذهاب إلى العنوان http://server_domain_or_IP (بدون حرف s في http). إن ظهرت نفس الأيقونة السابقة في شريط العناوين فهذا يعني نجاح الإعداد. الخطوة السادسة: جعل إعادة التوجيه دائما إن كنت متأكّدًا من رغبتك في السماح للطلبات الآمنة فقط (القادمة عبر HTTPS)، وتحقّقت في الخطوة السابقة من عمل توجيه طلبات HTTP إلى HTTPS فيجب عليك جعل إعادة التوجيه دائمة. افتح ملف إعداد المضيف الافتراضي الذي نريد: sudo nano /etc/apache2/sites-available/000-default.conf نبحث عن سطر إعادة التوجيه الذي أضفناه في خطوة سابقة ثم نضيف إليه الكلمة المفتاحية permanent على النحو التالي: <VirtualHost *:80> . . . Redirect permanent "/" "https://your_domain_or_IP/" . . . </VirtualHost> احفظ الملف ثم أغلقه. ملحوظة: إعادة التوجيه التي أعددناها في الخطوة الثانية باستخدام التعليمة Redirect فقط هي من النوع 302. تصبح إعادة التوجيه هذه من النوع 301 (الفرق بين إعادة التوجيه 301و302) عند إضافة الكلمة المفتاحية permanent (دائم) إلى التعليمة. نتحقّق من خلو الإعدادات من أخطاء في الصياغة: sudo apache2ctl configtest ثم عندما يكون كلّ شيء على ما يرام نعيد تشغيل خادوم الوِب: sudo systemctl restart apache2 ترجمة - بتصرّف للمقال How To Create a Self-Signed SSL Certificate for Apache in Ubuntu 16.04 لصاحبه Justin Ellingwood.
-
يُعدّ Nginx خادوم ويب مفتوح المصدر يتسّم بالسرعة والاعتمادية، كسب شعبيّته نتيجة حجم الذاكرة القليل الذي يستهلكه، وقابليته الكبيرة للتوسعة، وسهولة إعداده، ودعمه لمعظم البروتوكولات المختلفة. ويعتبر بروتوكول HTTP/2 الجديد نسبيًا أحد البروتوكولات التي يدعمها خادوم Nginx، الأمر الذي تم منذ أقل من عام مضى، وتعتبر الميّزة الرئيسية في HTTP/2 هي سرعة نقله العالية للمحتويات الغنيّة بالمعلومات في مواقع الويب. سيساعد المقال على تثبيت وإعداد خادوم Nginx سريع وآمن مع دعم لبروتوكول HTTP/2. المتطلبات الأولية قبل أن نبدأ، سنحتاج للأمور التالية: نظام تشغيل Ubuntu 14.04، مستخدم عادي بدون صلاحيات مدير نظام، لكنّه يملك صلاحية تنفيذ أمر sudo. يمكن مراجعة الإعداد الابتدائي لخادوم أوبونتو 14.04 لمزيد من المعلومات، نطاق موقع، ويمكن شراء واحد من موقع Namecheap أو الحصول على واحد مجانًا من موقع Freenom، تأكّد من أنّ النطاق يشير إلى عنوان نظام التشغيل الذي ستستخدمه عبر الإنترنت، وستساعدك مقالة إعداد اسم مضيف مع DigitalOcean إن احتجت لمساعدة، شهادة SSL رقميّة، ويمكن إنشاء واحدة بشكل يدوي، أو الحصول على واحدة مجانًا من Let’s Encrypt، أو شراء واحدة من مزوّد آخر. هذا كل شيء، فإن كانت لديك جميع المتطلبات المذكورة، فأنت جاهز للبدء. الفرق ما بين HTTP 1.1 و HTTP/2 إن HTTP/2 هو الإصدار الجديد من بروتوكول نقل النصوص الفائقة HTTP، الذي يستخدم على الشبكة العنكبوتية لإيصال محتويات صفحات الويب من الخوادم إلى المتصفّحات، وهو أول تحديث ضخم طرأ على HTTPمنذ حوالي عقدين، حيث تم إطلاق الإصدار HTTP 1.1 عام 1999 حينما كانت الصفحات عبارة عن ملف HTML مستقل مع أنماط CSS ضمنيّة (أي مكتوبة ضمن مستند HTML وليست مستوردة من ملف خارجي). لقد تغيّرت شبكة الإنترنت بشكل متسارع في السنوات الستة عشر الأخيرة، وأصبحنا الآن نواجه صعوبة مع المحدودية التي يفرضها HTTP 1.1، حيث يَحُدّ البروتوكول من سرعة النقل الممكنة لمعظم مواقع الويب الحديثة لأنه يقوم بتحميل أجزاء الصفحة وفق مبدأ الطابور queue (بمعنى أنه يجب أن ينتهي تحميل كل جزء قبل أن يبدأ تحميل الجزء التالي له)، ويحتاج موقع ويب حديث وسطيًّا حوالي 100 طلب ليتم تحميل الصفحة(كل طلب يمثّل صورة، ملف js، ملف css، إلخ). يقوم بروتوكول HTTP/2 بحل هذه المشكلة لأنّه يقوم بتقديم تغييرات جذرية تتمثل في: تحميل جميع الطلبات على التوازي، وليس على التسلسل كما في مبدأ الطابور، ضغط ترويسة HTTP، نقل الصفحات عبر الشبكة بصيغة ثنائية binary، وليس كنصوص text، وهذا أكثر فعالية، قدرة الخادوم الآن على "دفع" البيانات قبل أن يطلبها المستخدم، مما سيحسّن من السرعة للمستخدمين الذين يعانون من بطء في الإرسال. وعلى الرغم من أن بروتوكول HTTP/2 لا يتطلب التشفير، إلا أن مطوّري أشهر متصفّحين، Google Chrome و Mozilla Firefox، صرّحوا بأنه -لدواع أمنيّة- سيتم دعم بروتوكول HTTP/2 في اتصالات HTTPS الآمنة فقط، ولهذا السبب إن قررت تثبيت خواديم تدعم HTTP/2 فيجب عليك الانتقال إلى استخدام HTTPS. الخطوة الأولى: تثبيت الإصدار الأخير من Nginx تم طرح دعم HTTP/2 في إصدار Nginx 1.9.5، ولسوء الحظ فإنّ المستودع الافتراضي في نظام Ubuntu متأخر عن إدراج آخر إصدار ويقوم حاليًّا بتوفير الإصدار 1.4.6. لكن لحسن الحظ فإن مطوّري Nginx لديهم مستودع apt خاص على نظام Ubuntu، حيث بالإمكان الحصول دومًا على آخر إصدار متوفّر. لإضافة المستودع الخاص إلى قائمة مستودعات apt لدينا، نحتاج أولًا للحصول على مفتاح التوقيع الرقمي الخاص بالمستودع، وهذا إجراء أمني يضمن بأن الحزم البرمجية التي سنحصل عليها من هذا المستودع صادرة عن المطوّرين الحقيقين وموقّعة منهم. سنقوم بتنفيذ الأمر التالي في سطر الأوامر: $ wget -qO - http://nginx.org/keys/nginx_signing.key | sudo apt-key add - بعد ذلك، سنقوم بإضافة المستودع إلى قائمة مصادر الحزم البرمجية، بتنفيذ الأمر التالي: $ sudo echo -e "deb http://nginx.org/packages/mainline/ubuntu/ `lsb_release -cs` nginx\ndeb-src http://nginx.org/packages/mainline/ubuntu/ `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list الآن وبعد أن أصبح نظام الحزم (الذي يدعى apt في نظامي Ubuntu و Debian) يعلم عن توفّر المستودع الجديد، سنقوم بتحديث قائمة الحزم البرمجية المتوفّرة وأخيرًا سنقوم بتثبيت الإصدار الأخير من Nginx: $ sudo apt-get update $ sudo apt-get install nginx ويمكن التحقق من رقم الإصدار بتنفيذ الأمر: $ sudo nginx -v حيث ينبغي أن يكون الخرج مشابهًا لـ nginx version: nginx/1.9.x. سنقوم في الخطوات التالية بتغيير الإعدادات الافتراضية في Nginx ليقوم بتخديم موقع الويب الخاص بنا. الخطوة الثانية: تغيير منفذ التنصّت الافتراضي سنقوم أولًا بتغيير رقم المنفذ من 80 إلى 443، وذلك بفتح ملف الإعدادات: $ sudo nano /etc/nginx/conf.d/default.conf ملاحظة: في حال ظهر خطأ يخبرك بأنه لم يتم التعرّف على الأمر nano، فتأكّد من تثبيت محرر النصوص nano وحاول مجدّدًا. ينبغي أن نخبر Nginx برقم المنفذ الذي يجب عليه تلقّي الاتصالات عبره، وهو المنفذ 80 افتراضيًا، المنفذ القياسي في بروتوكول HTTP. سنبحث في ملف الإعدادات عن السطر التالي: listen 80; سنقوم بتغيير المنفذ إلى 443 لأن HTTP/2 لن يعمل مع معظم المستخدمين إذا بقي يقوم بإرسال البيانات عبر المنفذ 80، كما أشرنا سابقًا إلى أنه مدعوم فقط عبر المنفذ 443 على متصفحات Chrome و Firefox.سنستبدل السطر السابق بـ: listen 443 ssl http2; لاحظ أننا أضفنا كلمة ssl و http2 في نهاية السطر، وتخبر هذه المتغيّرات Nginx بأن يستخدم بروتوكول HTTP/2 مع المتصفحات التي تدعم البروتوكول الجديد. الخطوة الثالثة: تغيير اسم الخادوم يأتي اسم الخادوم server_name بعد السطر السابق الذي يحوي على listen، وسنقوم بإعلام Nginx أيّ نطاق سيرتبط مع ملف الإعدادات. سنستبدل الاسم الافتراضي localhost الذي يعني بأن ملف الإعدادات مسؤول عن جميع الطلبات الواردة، وسنضع مكانه اسم النطاق الحقيقي، كـ example.com على سبيل المثال: server_name example.com; سنقوم الآن بحفظ التغييرات بالضغط على CTRL+O ومن ثم نضغط CTRL+X للخروج من محرر nano. الخطوة الرابعة: إضافة المسار إلى شهادات SSL الأمنية سنقوم بإعداد Nginx الآن ليستخدم الشهادات الأمنية اللازمة لـ HTTPS، وإن لم تكن تعلم ما هي الشهادة الأمنية أو لم تكن تملك واحدة فيرجى مراجعة المقالات المذكورة في قسم المتطلبّات الأولية في بداية المقال. لنقم أولًا بإنشاء مجلّد لحفظ الشهادات الأمنية فيه داخل مجلد إعدادات Nginx: $ sudo mkdir /etc/nginx/ssl سنقوم الآن بنسخ ملف الشهادة وملف المفتاح الخاص private key إلى داخل المجلد الجديد، وبعد ذلك سنقوم بتغيير أسماء الملفات لتظهر بوضوح أي نطاق ترتبط معه (تساعد هذه الخطوة في المستقبل على توفير الوقت والجهد إن امتلكت أكثر من نطاق واحد). لا تنسى استبدال example.com باسم النطاق الخاص بك. $ sudo cp /path/to/your/certificate.crt /etc/nginx/ssl/example.com.crt $ sudo cp /path/to/your/private.key /etc/nginx/ssl/example.com.key سنقوم بإضافة سطر جديد الآن إلى ملف الإعدادات ضمن كتلة server لتعريف مسارات الشهادة الرقمية مع مفتاحها الخاص ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; الخطوة الخامسة: تحويل جميع طلبات HTTP إلى HTTPS ينبغي الآن أن نخبر Nginx بأننا نرغب بتوفير المحتوى عبر HTTPS فقط إن استلم طلب HTTP عوضًا عن ذلك. سنقوم في نهاية ملف الإعدادات بإنشاء كتلة server جديدة لتحويل جميع طلبات HTTP إلى HTTPS، ومرة أخرى لا تنس استبدال النطاق باسم النطاق الخاص بك، ستكون الكتلة الجديدة على الشكل التالي: server { listen 80; listen [::]:80; server_name example.com; return 301 https://$server_name$request_uri; } لاحظ في الكتلة السابقة كيف أنّ Nginx عند استلامه لطلبات HTTP تخص النطاق example.com عبر المنفذ 80، فإنّه سيقوم بتحويل الطلب إلى HTTPS على نفس المسار المطلوب، مستخدمّا التحويل من النمط301 (moved permanently). سيصبح شكل ملف الإعدادات (إن تجاهلنا الأسطر الخاصة بالتعليقات) على النحو التالي: server { listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name example.com; location / { try_files $uri $uri/ =404; } ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; ssl_dhparam /etc/nginx/ssl/dhparam.pem; } server { listen 80; listen [::]:80; server_name example.com; return 301 https://$server_name$request_uri; } سنقوم الآن بحفظ ملف الإعدادات بالضغط على CTRL+O ومن ثم الخروج من محرر nano بالضغط على CTRL+X. الخطوة السادسة: تحميل ملف الإعدادات الجديد في ذاكرة Nginx لتطبيق التغييرات التي قمنا بها، سنحتاج لإعادة تشغيل خادوم Nginx: $ sudo service nginx restart وللتحقق من أن كل شيء سار على ما يرام، سنقوم بفتح المتصفح واستعراض النطاق الذي أعددناه مع Nginx، فإن كانت الإعدادات صحيحة، يجب أن يتم تحويل الطلب إلى HTTPS بشكل تلقائي، وللتأكد مما إذا تم استخدام البروتوكول الجديد فسنقوم بفتح أدوات المطوّر (في متصفح كروم يمكن فتحها من خلال قائمة View > Developer > Developer Tools)، ومن ثم نعيد تحميل الصفحة من جديد (View > Reload This Page)، ثم من خلال لسان Network، سنضغط بالزر الأيمن للفأرة على سطر رأس الجدول ونختار Protocol. يجب الآن أن يظهر عمود جديد عنوانه Protocol ستتمكن من خلاله من رؤية أن البروتوكول المستخدم هو h2 (الذي يرمز إلى بروتوكول HTTP/2) في حال تم الإعداد بشكل صحيح. إلى هنا سيكون Nginx قد أصبح قادرًا على تخديم المحتوى باستخدام بروتوكول HTTP/2، ولكن تبقى هناك بعض الأمور التي ينبغي إعدادها قبل استخدام الخادوم في بيئة التشغيل. الخطوة السابعة: تحسين Nginx لتقديم أداء أفضل سنقوم الآن بفتح ملف الإعدادات مجدّدًا لضبط إعدادات Nginx لتقديم أفضل أداء وحماية. تفعيل Connection Credentials Caching بالمقارنة مع HTTP، فإن HTTPS يتطلب وقتًا أطول نسبيًا لإنشاء اتصال ما بين الخادوم والمستخدم، ولتقليل الفرق في سرعة تحميل الصفحة، سنقوم بتفعيل ميّزة Connection Credentials Caching وهذا يعني بأنه عوضًا عن إنشاء جلسة عمل جديدة عند طلب كل صفحة، سيقوم الخادوم باستخدام نسخة خبء cache لمعلومات المصادقة. لتفعيل الميّزة، سنقوم بإضافة السطرين التاليين إلى نهاية كتلة http في ملف الإعدادات: ssl_session_cache shared:SSL:5m; ssl_session_timeout 1h; يقوم المتغيّر ssl_session_cache بتحديد حجم الخبء الذي سيحتوي على معلومات الجلسة، حيث يمكن لـ 1MB أن يقوم بتخزين معلومات 4000 جلسة عمل، وبالتالي ستكون القيمة الافتراضية 5MB أكثر من كافية لمعظم الحالات، ولكن إن كنت تتوقع أن يكون هناك حركة مرور كثيفة على الموقع، فيمكنك زيادة القيمة وفقًا لذلك. يحدّد المتغير ssl_session_timeout من الوقت الذي تكون ضمنه جلسة العمل فعّالة داخل الخبء، ولا ينبغي أن تكون هذه القيمة كبيرة (أكثر من ساعة)، وإلى جانب ذلك فإن تخفيضها كثيرًا سيخفض من الفائدة المرجوّة أيضًا. تحسين باقات التشفير Cipher Suites باقات التشفير هي مجموعة من خوارزميات التشفير التي تصف كيف ينبغي أن يتم تشفير البيانات المنقولة. يملك بروتوكول HTTP/2 قائمة كبيرة من خوارزميات التشفير القديمة وغير الآمنة التي يجب تجنّب استخدامها. سنقوم باستخدام مجموعة تشفير معتمدة من قبل جهات عملاقة مثل CloudFlare. لا تسمح هذه المجموعات باستخدام خوارزمية MD5 في التشفير (التي تم إثبات أنها غير آمنة في عام 1996، وبالرغم من ذلك، فما تزال منتشرة حتى يومنا هذا). سنقوم بإضافة السطرين التاليين بعد ssl_session_timeout: ssl_prefer_server_ciphers on; ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; تفعيل ميزة (Strict Transport Security (HSTS على الرغم من أنّا قمنا بتحويل جميع طلبات HTTP إلى HTTPS في إعدادات Nginx، فينبغي علينا أيضًا أن نقوم بتفعيل ميّزة Strict Transport Security لتجنّب الحاجة لإخبار Nginx بعملية التحويل بأنفسنا أساسًا. عندما يصادف المتصفح ترويسة HSTS، فلن يحاول الاتصال بالخادوم عبر HTTP التقليدي مجدّدًا قبل مضي فترة من الوقت، ومهما حصل، سيعمل على تبادل البيانات عبر اتصالات HTTPS مشفّرة. تساعد هذه الترويسة على حمايتنا من هجمات تخفيض البروتوكول. كل ما نحتاجه هو إضافة السطر التالي في ملف الإعدادات: add_header Strict-Transport-Security "max-age=15768000" always; يحدّد المتغير max-age القيمة التي يجب على المتصفح خلالها ألا يحاول التواصل مع الخادوم إلا عبر بروتوكول HTTPS، وهذه القيمة ممثّلة بالثواني وبالتالي فإن القيمة 15768000 تساوي 6 أشهر. وبشكل افتراضي فإن هذه الترويسة لن يتم إضافتها إلى الطلبات الموجّهة للنطاقات الفرعية، فإن كنت تملك نطاقات فرعية وترغب أن يتم تطبيق HSTS عليها جميعًا فيجب إضافة المتغير includeSubDomains حينها إلى نهاية السطر على الشكل التالي: add_header Strict-Transport-Security "max-age=15768000; includeSubDomains: always;"; لا تنس حفظ الملف الآن بالضغط على CTRL+O ومن ثم إغلاقه بالضغط على CTRL+X إن كنت تستخدم محرر nano. الخطوة الثامنة: رفع حماية تبادل المفاتيح الأمنية إن الخطوة الأولى في إنشاء اتصال آمن هو تبادل المفاتيح الخاصة بين الخادوم والعميل، وتكمن المشكلة في هذه العملية في أنّه حتى تلك اللحظة فالاتصال غير مشفّر بينهما وبالتالي فالبيانات المتبادلة يمكن التنصّت عليها من طرف ثالث. لهذا السبب، سنحتاج لاستخدام خوارزمية Diffie-Hellman-Merkle في تبادل المفاتيح. يستخدم Nginx بشكل افتراضي مفتاح DHE) Ephemeral Diffie-Hellman) بطول 1024 بت، والذي يمكن فك تشفيره بسهولة نسبيًا، وللحصول على أمان أعلى فينبغي علينا إنشاء مفتاح DHE خاص أكثر أمنًا. للقيام بذلك سنقوم بتنفيذ الأمر التالي في سطر الأوامر: $ sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048 تنبيه: يجب أن يتم إنشاء مُعاملات DH في المجلد الذي قمنا بتخزين الشهادات الأمنية فيه، وفي المقال قمنا بتخزين الشهادات في المسار /etc/nginx/ssl/. إن السبب وراء هذا هو أن Nginx يقوم دومًا بالبحث عن مفتاح DHE الخاص بالمستخدم في مجلد الشهادات الأمنية ويستخدمه إن وُجد. تحدّد القيمة 2048 في الأمر السابق طول المفتاح الذي نرغب بإنشائه، حيث سيكون مفتاح بطول 2048 بت أكثر أمنًا وينصح به من قبل مؤسسة موزيلّا، ولكن إن كنت تسعى خلف أقصى درجة أمان، فيمكنك استخدام مفتاح بطول 4096 بت. ستأخذ عملية إنشاء المفتاح حوالي 5 دقائق، ويمكنك أثناء ذلك الاسترخاء وارتشاف بعض القهوة. لتطبيق التغييرات التي قمنا بها على ملف الإعدادات، لا تنسى أن تقوم بإيقاف وإعادة تشغيل خادوم Nginx: $ sudo service nginx restart الخلاصة أصبح اتصال SSL الخاص بك أكثر أمنًا وقابلًا للاستخدام لنقل المعلومات الحساسة، ولكن إن أردت اختبار قوته الأمنية فقم بزيارة Qualys SSL Lab وبتشغيل اختبار على خادومك، حيث ينبغي أن تحصل على نتيجة A+إن كان كلّ شيء معدّ بشكل صحيح. هذا كلّ شيء، أصبح خادوم Nginx الخاص بك جاهزًا للاستخدام، وكما ترى فإن بروتوكول HTTP/2 هو حل رائع لتحسين سرعات نقل البيانات ومن السهل استخدامه كما أظهرنا في المقال. ترجمة -وبتصرّف- للمقال How To Set Up Nginx with HTTP/2 Support on Ubuntu 14.04 لصاحبه Sergey Zhukaev.
-
سنتعلّم في هذا الدّرس المفاهيم الأساسيّة التي نحتاجها قبل الحصول على شهادة SSL من سلطة شهادات تجاريّة Commercial Certificate Authority CA، تسمح شهادات SSL لخواديم الويب بتشفير حركة مرور بياناتها traffic وتُوفِّر آليّة للتحقّق من هويّات الخواديم من أجل الزوّار، إنّ الميزة الأساسيّة لشراء شهادة SSL من سلطة شهادات تجاريّة (CA) موثوقة عن الشهادات المُوقَّعة ذاتيًّا self-signed أنّه لن يتم عرض تحذير مُخيف للزوّار حول عدم القدرة على التحقّق من هويّة موقعنا. يغطّي هذا الدرس المتطلبات الأساسيّة التي يجب التأكد منها قبل الحصول على شهادة SSL، ويشرح الأنواع المختلفة للشهادات. المتطلبات الأساسيةهنالك العديد من المتطلبات التي يجب التأكد منها قبل محاولة الحصول على شهادة SSL من سلطة شهادات تجاريّة، سيغطي هذا القسم الأمور التي نحتاجها ليتم إصدار شهادة SSL لنا من معظم سلطات الشهادات التجارية. الماليجب علينا شراء شهادات SSL الصادرة عن سلطات الشهادات التجاريّة، تتضمّن البدائل المجانيّة لها الشهادات المُوقَّعة ذاتيًّا self-signed أو شهادات StartSSL، ومع ذلك فإنّ الشهادات المُوقَّعة ذاتيًّا غير موثوقة من قبل أيّة برمجيات، ولا يُمكِن استخدام شهادات StartSSL لأغراض تجاريّة. اسم نطاق Domain مسجلينبغي قبل الحصول على شهادة SSL أن نملك اسم نطاق مُسجَّل والذي نرغب باستخدام الشهادة معه، إن كُنّا لا نمتلك اسم نطاق مُسجَّل فبإمكاننا تسجيله باستخدام أحد مُسجِّلات اسم النطاق المتوفِّرة (مثل Namecheap، GoDaddy، إلخ..). حقوق التحقق من النطاقيجب من أجل العمليّة الأساسيّة للتحقّق من النطاق أن نملك نفاذًا إلى أحد عناوين البريد الإلكتروني على تسجيل WHOIS لنطاقنا أو إلى عنوان بريد إلكتروني من نمط مُدير admin على النطاق نفسه، تقوم سلطات الشهادات التي تُصدِر شهادات SSL نموذجيًّا بالتحقّق من التحكم بالنطاق عن طريق إرسال بريد إلكتروني للتحقّق إلى أحد عناوين البريد الإلكتروني على تسجيل WHOIS لنطاقنا، أو إلى عنوان بريد إلكتروني من نمط مدير عام على النطاق ذاته، توفّر بعض سلطات الشهادات طرق بديلة للتحقّق من النطاق، مثل DNS أو التحقّق المعتمد على HTTP والتي هي مواضيع خارج نطاق درسنا. إن كنت ترغب في إصدار شهادة SSL مع تحقّق من المنظّمة (Organization Validation (OV أو تحقّق مُوسَّع (Extended Validation (EV فيجب عليك تزويد سلطات الشهادات بأوراقك لتأسيس هوية قانونيّة لمالك الموقع من بين الأشياء الأخرى. خادوم الويبسنحتاج بالإضافة للنقاط المذكورة سابقًا إلى خادوم ويب لتثبيت شهادة SSL عليه، وهو الخادوم القابل للوصول إليه عبر اسم النطاق الذي سنصدر شهادة SSL له، سيكون نموذجيًّا خادوم Apache HTTP، Nginx، HAProxy، أو Varnish، إن كنت تحتاج المساعدة في إعداد خادوم ويب قابل للوصول من خلال اسم النطاق المُسجَّل لديك فقم باتباع الخطوات التالية: إعداد خادوم ويب من اختيارك، على سبيل المثال خادوم (LEMP (Nginx أو (LAMP (Apache.إعداد النطاق ليستخدم أسماء الخواديم nameservers الملائمة.إضافة تسجيلات DNS records لخادوم الويب إلى أسماء الخواديم لديك.اختيار سلطة الشهاداتإن لم تكن متأكّدًا من سلطة الشهادات التي تريد استخدامها فهنالك القليل من العوامل المهمّة التي يجب أن تأخذها بعين الاعتبار، وكنظرة عامّة فإنّ الشيء الأكثر أهمية أن تكون سلطة الشهادات التي تختارها تعطيك الميزات التي تريدها بالسعر الذي يناسبك، يُركّز هذا القسم بشكل أكبر على الميزات التي يجب أن يعلم بها مشترو شهادات SSL أكثر من الأسعار. عضويات برنامج الشهادات الجذرية Rootإنّ النقطة الأهم هي أن تكون سلطة الشهادات التي نختارها عضوًا في برامج الشهادات الجذريّة لأنظمة التشغيل ومتصفحات الويب الأكثر استخدامًا، أي بمعنى أن تكون سلطة شهادات موثوقة وشهادتها الجذريّة موثوقة من قبل معظم المتصفّحات والبرمجيات الأخرى، فإن كانت شهادة SSL لموقعنا مُوقَّعة من قبل سلطة شهادات موثوقة فستعتبر هويتها صالحة من قبل البرمجيّات التي تثق بسلطة الشهادات، وهي على النقيض تمامًا من شهادات SSL المُوقَّعة ذاتيًّا والتي تُزوّدنا أيضًا بقدرات التشفير ولكنّها مصحوبة بتحذيرات التحقّق من الهوية التي لا تسر معظم زوّار موقعنا. إنّ أغلب سلطات الشهادات التي سنصادفها هي عضو من برامج الشهادات الجذريّة الشائعة، وستكون متوافقة مع 99% من المتصفحات، ولكن لن يضرّنا أن نتحقّق من ذلك قبل شراء الشهادة، تزوّدنا شركة Apple على سبيل المثال بلائحة من شهادات SSL الجذريّة الموثوقة لأجل IOS8 هنا. أنواع الشهاداتيجب أن نتأكّد من اختيار سلطة شهادات تزوّدنا بنوع الشهادة الذي نريده، تُقدّم العديد من سلطات الشهادات أشكال مختلفة من أنواع الشهادات في إطار مجموعة من الأسماء والأسعار والتي كثيرًا ما تكون مربكة، وهذا وصف مختصر لكل نوع: نطاق مُفرَد Single Domain: يُستخدَم من أجل النطاق المُفرَد، مثل example.com، نلاحظ أنّه لا يتم تضمين النطاقات الفرعيّة subdomains مثل www.example.comWildcard: تُستخدَم من أجل النطاق وأي نطاقات فرعيّة له، على سبيل المثال يُمكِن استخدام شهادة wildcard لِـ *.example.com أيضًا من أجل www.example.com وstore.example.comالنطاقات المُتعدّدة Multiple Domain: وهي معروفة باسم شهادة SAN أو UC، ويمكن استخدامها مع النطاقات المُتعدّدة والنطاقات الفرعيّة التي تتم إضافتها إلى حقل الاسم البديل للموضوع Subject Alternative Name، فعلى سبيل المثال يُمكِن استخدام شهادة نطاقات متعدّدة مُفرَدة مع example.com، www.example.com، و example.netوبالإضافة لأنواع الشهادات المذكورة آنفًا تُوجَد مستويات مختلفة من التحقّق التي توفّرها سلطات الشهادات، وسنتحدّث عنها هنا: التحقّق من النطاق (Domain Validation (DV: يتم إصدار شهادات DV بعد أن تتحقّق سلطة الشهادات أنّ طالب الشهادة يملك أو يتحكّم بالنطاق المطلوب.التحقّق من المُنظّمة (Organization Validation (OV: يُمكِن إصدار شهادات OV فقط بعد أن تتحقّق سلطة الشهادات من الهوية القانونية لطالب الشهادة.التحقّق المُوسَّع (Extended Validation (EV: يُمكِن إصدار شهادات EV فقط بعد أن تتحقّق سلطة الشهادات من الهوية القانونيّة لطالب الشهادة مع عدّة أشياء أخرى وفق مجموعة صارمة من الإرشادات، إنّ الغرض من هذا النوع من الشهادات هو توفير ضمان إضافي عن قانونيّة هوية مُنظّمتك بالنسبة لزوّار موقعك، يُمكِن أن تكون شهادات EV مُفردة أو متعدّدة النطاقات ولكن لا يمكن أن تكون wildcard.ميزات إضافيةتوفّر العديد من سلطات الشهادات مجموعة كبيرة ومتنوعة من الميزات الإضافيّة لتمييز نفسها عن بقيّة بائعي شهادات SSL، بعض هذه الميزات قد توفّر عليك المال، لذا من المهم أن تعرف احتياجاتك مقابل العروض قبل أن تقوم بالشراء، على سبيل المثال تشمل الميزات التي يجب البحث عنها إعادة إصدار شهادة مجانيّة أو شهادة بسعر شهادة نطاق مُفرَد وتعمل من أجل www. والاسم الأساسي للنطاق، مثل www.example.com مع شهادة SAN من example.com الخاتمةتعلّمنا في هذا الدّرس المفاهيم الأساسيّة للحصول على شهادات SSL من سلطة شهادات تجاريّة، والمتطلّبات الأساسيّة التي نحتاجها قبل شرائها، وتحدّثنا عن العوامل التي يجب أن نأخذها بعين الاعتبار عند اختيار سلطة شهادات تجاريّة. ترجمة -وبتصرّف- لـ How To Install an SSL Certificate from a Commercial Certificate Authority لصاحبه Mitchell Anicas.
-
واحدة من أكثر الأشكال الشائعة للتشفير في وقتنا الراهن هي التشفير وفق المفتاح العمومي (public-key cryptography)؛ يستخدم التشفير وفق المفتاح العمومي مفتاحًا عامًا (public key) ومفتاحًا خاصًا (private key)؛ يعمل النظام بتشفير (encrypt) المعلومات باستخدام مفتاح عمومي، ولا يمكن أن يُفَكّ تشفيرها (decrypted) إلا باستخدام المفتاح الخاص. استخدام شائع للتشفير وفق المفتاح العمومي هو تشفير البيانات المنقولة باستخدام اتصال SSL (Secure Socket Layer) أو TLS (Transport Layer Security)؛ على سبيل المثال، إن ضبط أباتشي لتوفير HTTPS -بروتوكول HTTP عبر SSL- يسمح بتشفير البيانات في بروتوكول لا يوفر بحد ذاته آليةً للتشفير. الشهادة (Certificate) هي طريقة تستخدم لتوزيع المفتاح العمومي وغيره من المعلومات عن الخادوم والمنظمة المسؤولة عنه؛ تُوقَّع الشهادات إلكترونيًا بواسطة «سلطة الشهادات» (CA)، إن سلطة الشهادات هي طرفٌ ثالثٌ موثوق تأكد من دقة المعلومات الموجودة في الشهادة. أنواع الشهاداتلضبط خادوم آمن باستخدام تشفير وفق المفتاح العمومي، عليك إرسال -في أغلب الحالات- طلب الشهادة (متضمنًا المفتاح العمومي الخاص بك) ودليلًا على هوية شركتك ودفعةً ماليةً إلى سلطة شهادات؛ ثم ستتحقق سلطة الشهادات من طلب الشهادة ومن هويتك، ثم ستُرسِل الشهادة إلى خادومك الآمن. بشكلٍ بديل، تستطيع إنشاء شهادتك الموقعة ذاتيًا. للحصول على شهادة SSL قم باتباع الخطوات الموضحة في درس كيفية تثبيت شهادة SSL من سلطة شهادات تجارية أو يمكنك الحصول على شهادة SSL مجانية عبر خدمة Let's encrypt. ملاحظة: لاحظ أنه لا يجدر بك استخدام الشهادات الموقعة ذاتيًا في أغلبية بيئات العمل الإنتاجية. بإكمال مثال HTTPS، ستوفر شهادة موقعة من سلطة الشهادات إمكانيتَين مهمتين لا تملكهما الشهادات الموقعة ذاتيًا: المتصفحات تتعرف (عادةً) تلقائيًا على الشهادة وتسمح بإنشاء اتصال آمن دون طلب موافقة المستخدم.عندما تعطي سلطة الشهادات شهادةً موقعة، فإنها تضمن هوية المنظمة التي توفر صفحات الويب إلى المتصفح.أغلبية متصفحات الويب والحواسيب التي تدعم SSL لديها قائمة بسلطات الشهادات التي تُقبَل شهاداتها تلقائيًا؛ إذا واجه المتصفح شهادةً لم تكن سلطة الشهادات التي أصدرتها في قائمته، فإنه (أي المتصفح) سيطلب من المستخدم قبول أو رفض الاتصال؛ وقد تُولِّد بعض التطبيقات الأخرى رسالة خطأ عند استخدام شهادة موقعة ذاتيًا. عملية الحصول على شهادة من سلطة الشهادات هي عملية سهلة جدًا، لمحة سريعة هي الآتية: أنشِئ زوج مفاتيح خاص وعام.أنشِئ طلب شهادة بناءً على المفتاح العمومي، يحتوي طلب الشهادة على معلومات عن خادومك والشركة التي تستضيفه.أرسل طلب الشهادة مع الوثائق التي تثبت هويتك إلى سلطة الشهادات؛ لا نستطيع إخبارك أيّة سلطة شهادات عليك أن تختارها؛ ربما يكون قرارك مبنيًا على تجارب سابقة، أو على تجارب أحد أصدقائك أو زملائك، أو على عوامل اقتصادية.بعد أن تختار سلطة الشهادات، فعليك اتباع تعليماتهم التي يوفرونها عن كيفية الحصول على شهادة منهم.بعد أن تتأكد سلطة الشهادات أنك من تدعيّ أنك هو؛ فسيرسلون لك شهادةً رقميةً.ثبِّت هذه الشهادة على خادومك الآمن، واضبط البرامج الملائمة لاستخدام هذه الشهادة.توليد طلب توقيع الشهادة (CSR)إذا كنت ستحصل على شهادة من سلطة شهادات أو كنت ستُوقِّع شهادتك ذاتيًا، فإن أول خطوة هي توليد مفتاح. إذا كانت الشهادة ستُستخدَم من عفاريت الخدمات، مثل أباتشي، أو Postfix، أو Dovecot ...إلخ. فإن مفتاحًا بدون عبارة مرور (passphrase) كافٍ عادةً؛ عدم وجود عبارة مرور تسمح للخدمات أن تبدأ دون تدخل يدوي، وهذه هي الطريقة المفضلة لبدء تشغيل عفريت. سيغطي هذا القسم طريقة توليد مفتاح مع عبارة مرور، وواحد آخر بدون عبارة مرور؛ ثم سنستخدم المفتاح بدون عبارة مرور لتوليد شهادة ستُستخدَم في مختلف عفاريت الخدمات. تحذير: تشغيل خدمة آمنة بدون عبارة مرور هو أمر ملائم ﻷنك لن تحتاج إلى إدخال عبارة المرور كل مرة تبدأ فيها خدمتك الآمنة، لكن هذا غير آمن وأي كشف عن المفتاح سيؤدي إلى جعل الخادوم عرضةً للهجمات. لتوليد «مفاتيح» لطلب توقيع الشهادة، عليك تنفيذ الأمر الآتي من مِحَث الطرفية: openssl genrsa -des3 -out server.key 2048 Generating RSA private key, 2048 bit long modulus ..........................++++++ .......++++++ e is 65537 (0x10001) Enter pass phrase for server.key:تستطيع الآن إدخال عبارة مرورك، لأفضل قدر من الحماية، يجب أن تحتوي على الأقل على ثمانية محارف؛ الطول الأدنى عند تحديد الخيار -des3 هو أربعة محارف؛ ويجب أن تحتوي على أرقام أو على علامات ترقيم ولا تحتوي على كلمة من القاموس؛ تذكر أن عبارة المرور حساسة لحالة الأحرف. أعد كتابة عبارة المرور للتحقق؛ وبعد إعادة كتابتها بشكل صحيح، فسيُولَّد مفتاح الخادوم وسيُخزَّن في ملف server.key. أنشِئ الآن مفتاحًا غير آمن (insecure أي بدون عبارة مرور) ثم بدِّل بين أسماء المفاتيح: openssl rsa -in server.key -out server.key.insecure mv server.key server.key.secure mv server.key.insecure server.keyأصبح الآن اسم ملف المفتاح غير الآمن هو server.key، وسنستخدم هذا الملف لتوليد CSR بدون عبارة مرور. نفِّذ الأمر الآتي في مِحَث الطرفية لإنشاء CSR: openssl req -new -key server.key -out server.csrستُسأل عن إدخال عبارة المرور، إذا أدخلت عبارةً صحيحةً، فستُسأل عن إدخال اسم الشركة، واسم الموقع، ومعرف البريد الإلكتروني ...إلخ. بعد أن تُدخِل كل هذه التفاصيل، فسيُنشَأ طلب توقيع الشهادة (CSR) وسيُخزَّن في ملف server.csr. يجب الآن إرسال ملف طلب توقيع الشهادة إلى سلطة الشهادات لمعالجته؛ ستستخدم سلطة الشهادات ملف طلب توقيع الشهادة لإصدار الشهادة؛ وعلى الكفة الأخرى، تستطيع توليد شهادتك الموقعة ذاتيًا باستخدام طلب توقيع الشهادة السابق. إنشاء شهادة موقعة ذاتيانفِّذ الأمر الآتي في الطرفية لإنشاء شهادة موقعة ذاتيًا: openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crtسيسألك الأمر السابق عن عبارة المرور، بعد أن تدخل عبارة المرور الصحيحة، فستُنشَأ الشهادة وتُخزَّن في ملف server.crt. تحذير: إذا استُخدِم خادومك الآمن في بيئة إنتاجية، فربما تحتاج إلى شهادة موقع من سلطة الشهادات (CA)، ليس من المستحسن استخدام شهادة موقعة ذاتيًا. تثبيت الشهادةتستطيع تثبيت ملف المفتاح server.key وملف الشهادة server.crt أو ملف الشهادة المُصدَر من سلطة الشهادات، بتنفيذ الأمرين الآتيين في الطرفية: sudo cp server.crt /etc/ssl/certs sudo cp server.key /etc/ssl/privateاضبط الآن ببساطة أيّة تطبيقات فيها إمكانية استخدام التشفير وفق المفتاح العمومي لكي تستخدم ملفات الشهادة والمفتاح؛ على سبيل المثال، يمكن أن يزود أباتشي HTTPS، و Dovecot يستطيع أن يزود IMAPS و POP3S ...إلخ. سلطة الشهاداتإذا كانت تتطلب الخدمات على شبكتك أكثر من مجرد بضع شهادات موقعة ذاتيًا، فربما يكون من المفيد بذل جهد إضافي وإعداد سلطة شهادات داخلية؛ ستسمح الشهادات الموقعة من سلطة الشهادات الخاصة بك لمختلف الخدمات باستخدام الشهادات لكي تثق بسهولة بالخدمات الأخرى التي تملك شهادات مُصدَرة من نفس سلطة الشهادات. أنشِئ أولًا المجلدات التي سنضع فيها شهادة سلطة الشهادات والملفات المتعلقة بذلك: sudo mkdir /etc/ssl/CA sudo mkdir /etc/ssl/newcertsتحتاج سلطة الشهادات إلى بضعة ملفات إضافية لكي تعمل، واحدٌ لكي يتعقب آخر رقم تسلسلي اُستخدِم من سلطة الشهادات، إذ يجب أن تملك كل شهادة رقمًا تسلسليًا فريدًا؛ وملفٌ آخر لتسجيل الشهادات التي أُصدِرَت: sudo sh -c "echo '01' > /etc/ssl/CA/serial" sudo touch /etc/ssl/CA/index.txtالملف الثالث هو ملف ضبط سلطة الشهادات، على الرغم من أنه ليس مطلوبًا، لكن من المنطقي وجوده عند إنشاء عدّة شهادات؛ عدِّل ملف /etc/ssl/openssl.cnf وفي قسم [ CA_default ]، غيِّر ما يلي: dir = /etc/ssl/ # Where everything is kept database = $dir/CA/index.txt # database index file. certificate = $dir/certs/cacert.pem # The CA certificate serial = $dir/CA/serial # The current serial number private_key = $dir/private/cakey.pem # The private keyثم أنشِئ الشهادة الجذر الموقعة ذاتيًا: openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem \ -days 3650ستُسأل عن إدخال التفاصيل حول الشهادة. الآن ثبت الشهادة الجذر والمفتاح: sudo mv cakey.pem /etc/ssl/private/ sudo mv cacert.pem /etc/ssl/certs/أنت الآن جاهزٌ لبدء توقيع الشهادات، أول شيء مطلوب هو «طلب توقيع الشهادة» (راجع القسم السابق لمزيد من المعلومات)، بعد أن تحصل على طلب توقيع الشهادة، فأدخِل ما يلي لتوليد شهادة موقعة من سلطة الشهادات: sudo openssl ca -in server.csr -config /etc/ssl/openssl.cnfبعد إدخال كلمة المرور لمفتاح سلطة الشهادات، فستُسأل عن توقيع الشهادة، ومرةً أخرى لإصدار الشهادة، يجب أن ترى كميةً كبيرةً من المخرجات المتعلقة بإنشاء الشهادة. يجب أن يكون هنالك ملف جديد هو /etc/ssl/netcerts/01.pem يحتوي على نفس المخرجات، انسخ والصق كل شيء من بداية السطر -----BEGIN CERTIFICATE----- إلى السطر ----END CERTIFICATE----- إلى ملف مسمى بنفس اسم المضيف لخادومك مكان تثبيت الشهادة؛ فمثلًا الاسم mail.example.com.crt هو اسم وصفي جيد. الشهادات المتتالية ستُسمى 02.pem ،03.pem ...إلخ. ملاحظة: استبدل mail.example.com.crt بالاسم الوصفي الخاص بك. في النهاية، انسخ الشهادة الجديدة إلى المضيف الذي يحتاج لها واضبط الخدمات الملائمة لكي تستخدمها، المكان الافتراضي لتثبيت الشهادات هو /etc/ssl/certs، وهذا ما سيُمكِّن عدِّة خدمات من استخدام نفس الشهادة دون تعقيد أذونات الملف. للتطبيقات التي يمكن ضبطها لاستخدام شهادة CA، يجب أن تَنسخ أيضًا الملف /etc/ssl/certs/cacert.pem إلى مجلد /etc/ssl/certs/ على كل خادوم. مصادرلتعليمات تفصيلية عن استخدام التشفير، راجع صفحة «SSL Certificates HOWTO».صفحة ويكيبيديا HTTPS لديها المزيد من المعلومات حول HTTPS.للمزيد من المعلومات حول OpenSSL، راجع الصفحة الرئيسية لموقع OpenSSL.أيضًا، كتاب «Network Security with OpenSSL» من O'Reilly هو مرجع معمّق.ترجمة -وبتصرف- للمقال Ubuntu Server Guide: Certifications.
-
سنتعلّم في هذا الدّرس كيفيّة الحصول على شهادة SSL من سلطة شهادات تجاريّة (Commercial Certificate Authority (CA وكيفيّة تثبيتها، تسمح شهادات SSL لخواديم الويب بتشفير حركة مرور بياناتها traffic وتُوفِّر آليّة للتحقّق من هويّات الخواديم من أجل الزوّار، إنّ الميزة الأساسيّة لشراء شهادة SSL من سلطة شهادات تجاريّة (CA) موثوقة عن الشهادات المُوقَّعة ذاتيًّا self-signed أنّه لن يتم عرض تحذير مُخيف للزوّار حول عدم القدرة على التحقّق من هويّة موقعنا. يغطّي هذا الدرس كيفيّة الحصول على شهادة SSL من سلطات الشهادات الموثوقة التالية: GoDaddyRapidSSL via Namecheapبإمكانك أيضًا استخدام أي سلطة شهادات CA من اختيارك. سنشرح بعد أن حصلنا على شهادة SSL كيفيّة تثبيتها على خواديم ويب Nginx و Apache HTTP. سنشاهد في هذا الدّرس كيفيّة الحصول على شهادة SSL مُفردة النطاق أو wildcard من GoDaddy وRapidSSL، ولكنّ الحصول على الأنواع الأخرى من الشهادات مماثل تمامًا. توليد CSR ومفتاح خاص Private Keyبعد أن تقوم بتجهيز المتطلبات الأساسيّة وتختار نوع الشهادة التي نريد الحصول عليها، تحتاج لتوليد طلب توقيع الشهادة (certificate signing request (CSR ومفتاح خاص private key. إن كنت تخطّط لاستخدام Apache HTTP أو Nginx كخادوم ويب لديك فاستخدم openssl لتوليد CSR ومفتاحك الخاص على خادومك الويب، سنبقي في هذا الدّرس كافّة الملفات المرتبطة بهذا في الدليل الرئيسي home directory ولكن لا تتردد في تخزينها في أي موقع آمن على خادومك: cd ~نقوم بتنفيذ هذا الأمر لتوليد مفتاح خاص يُدعى example.com.key و CSR يُدعى example.com.csr (ضع اسم نطاقك بدلًا من example.com): openssl req -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csrعند هذه النقطة سيتم حثنا على إدخال عدّة أسطر من المعلومات تُضمَّن في طلب شهادتنا، إنّ الجزء الأهم منها هو حقل الاسم الشائع Common Name والذي يجب أن يُطابق الاسم الذي نرغب باستخدام الشهادة معه، على سبيل المثال example.com ،www.example.com، أو (بالنسبة لطلب شهادة wildcard) *.example.com، إن كنت تُخطّط للحصول على شهادة OV أو EV فتأكّد من أن تتوافق كافّة الحقول الأخرى بدقة مع بيانات منظمتك أو عملك. على سبيل المثال: Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:New York Locality Name (eg, city) []:New York Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:example.com Email Address []:sammy@example.comسيقوم هذا بتوليد ملفات key. و csr.، حيث يكون الملف key. هو مفتاحنا الخاص ويجب أن نبقيه في مكان آمن، والملف csr. هو الذي يجب أن نرسله إلى سلطة الشهادات لطلب شهادة SSL. نحتاج إلى نسخ ولصق CSR الخاصّة بنا عند تقديم طلب الشهادة إلى سلطة الشهادات، نستخدم هذا الأمر لطباعة محتويات ملف CSR لدينا (ضع اسم ملفّك بدلًا من التالي): cat example.com.csrنحن الآن مستعدون لشراء شهادة من سلطة الشهادات، سنعرض هنا مثالين، GoDaddy و RapidSSL عبر Namecheap، ولكن لك الحرية بالحصول على الشهادة من أي بائع آخر. مثال سلطة الشهادات الأول: RapidSSL via Namecheapتوفّر Namecheap طريقة لشراء شهادات SSL من مجموعة متنوعة من سلطات الشهادات، سنشرح عمليّة الحصول على شهادة نطاق مُفرَد من RapidSSL، ولكن إن أردت نوعًا مختلفًا من الشهادات فبإمكانك فعل ذلك. ملاحظة: إن طلبنا شهادة نطاق مُفرَد من RapidSSL من أجل النطاق الفرعي www لنطاقنا (على سبيل المثال www.example.com) فسيقومون بإصدار الشهادة لنا مع SAN لنطاقنا الأساسي، فإن كان طلب شهادتنا على سبيل المثال من أجل www.example.com فستعمل الشهادة الصادرة من أجل www.example.com و example.com. اختيار وشراء الشهادةنذهب إلى صفحة Namecheap لشهادات SSL . نستطيع هنا البدء في اختيار مستوى التحقّق، نوع الشهادة ("Domains Secured") أو ("CA Brand"). سنضغط في مثالنا على زر مقارنة المنتجات Compare Products في مربّع التحقّق من النطاق "Domain Validation"، بعدها نستطيع إيجاد "RapidSSL" والضغط على زر إضافة إلى السلّة Add to Cart. عند هذه النقطة يجب علينا التسجيل في Namecheap أو تسجيل الدخول إليه، وإنهاء عمليّة الدفع. طلب الشهادةنذهب بعد أن دفعنا من أجل الشهادة التي اخترناها إلى الرابط Manage SSL Certificates الموجود تحت القسم "Hi Username". سنشاهد هنا قائمة بكامل شهادات SSL التي اشتريناها عبر Namecheap، نضغط على رابط التفعيل الآن Activate Now من أجل الشهادة التي نريد استخدامها. نختار الآن برمجيّة خادوم الويب لدينا والتي تُحدِّد تنسيق الشهادة التي سيسلمها Namecheap لنا، الخيارات التي نختارها بشكل شائع هي "Apache + MOD SSL"، "nginx"، أو "Tomcat". نلصق CSR الخاصة بنا في المربّع ونضغط بعدها زر التالي Next. يجب أن نكون الآن في خطوة اختيار المُصادِق "Select Approver" من العمليّة، والتي سترسل بريد إلكتروني لطلب التحقّق إلى عنوان في تسجيل WHOIS لنطاقنا أو إلى عنوان من نوع مدير administrator للنطاق الذي نريد أن نحصل على شهادة له، نختار العنوان الذي نريد أن نرسل إليه البريد الإلكتروني للتحقّق. نقوم بتزويد معلومات التواصل الإداريّة "Administrative Contact Information" ونضغط على زر تقديم الطلب Submit order. التحقق من النطاقسيتم عند هذه النقطة إرسال بريد إلكتروني إلى عنوان المُصادِق "approver"، نفتح البريد الإلكتروني ونصادق على طلب الشهادة. تنزيل الشهاداتبعد المُصادَقة على الشهادة سيتم إرسالها عبر البريد الإلكتروني إلى القسم التقني Technical Contact، ستكون الشهادة الصادرة لنطاقنا وشهادة سلطة الشهادات الوسيطة CA's intermediate certificate في أسفل رسالة البريد الإلكتروني. ننسخها ونحفظها إلى خادومنا في نفس المكان الذي وضعنا فيه CSR ومفتاحنا الخاص. نقوم بتسمية الشهادة باسم النطاق مُضافًا إليه اللاحقة crt.، مثل example.com.crt، وتسمية الشهادة الوسيطة intermediate.crt. تكون الشهادة الآن جاهزة للتثبيت على خادوم الويب لدينا. مثال سلطة الشهادات الثاني: GoDaddyإنّ GoDaddy هي سلطة شهادات شائعة تملك كافّة أنواع الشهادات الأساسية، سنشرح عمليّة الحصول على شهادة نطاق مُفرَد، ولكن إن أردت نوعًا مختلفًا من الشهادات فبإمكانك فعل ذلك. اختيار وشراء الشهادةنذهب إلى صفحة GoDaddy لشهادات SSL. ننزل للأسفل ونضغط على زر البدء Get Started. نختار نوع شهادة SSL الذي نريده من القائمة المنسدلة: نطاق مُفرَد single domainنطاقات متعدّدة (multidomain (UCCwildcard نختار بعدها نوع الخطّة plan: نطاق domainمُنظَّمة organizationتحقّق مُوسَّع extended validationثم نختار المدى term (مُدّة الصلاحية). نضغط بعدها على زر إضافة إلى السلّة Add to Cart. نُراجع طلبنا الحالي ثم نضغط على المتابعة إلى الدفع Proceed to Checkout. ومن ثمّ نكمل التسجيل وعمليّة الدفع. طلب الشهادةبعد إكمال طلبنا نضغط على زر SSL Certificates* (أو نضغط على My Account > Manage SSL Certificates الموجودة في الزاوية العلوية اليمنى). نقوم بإيجاد شهادة SSL التي اشتريناها للتو ونضغط على زر الإعداد Set Up، إن لم تستخدم GoDaddy من قبل من أجل شهادات SSL فسيتم حثك على إعداد مُنتَج "SSL Certificates" وربط طلب شهادتك الأخيرة مع المُنتَج (نضغط على زر Set Up الأخضر وننتظر عدّة دقائق قبل تحديث متصفّحنا). بعد أن تتم إضافة مُنتَج "SSL Certificates" إلى حسابنا في GoDaddy ينبغي أن نرى شهادتنا الجديدة "New Certificate" وزر التنفيذ "Launch"، نضغط على الزر Launch الموجود بجانب شهادتنا الجديدة. نقوم بتقديم CSR الخاص بنا عن طريق لصقه في المربع، تُستخدَم خوارزميّة SHA-2 افتراضيًّا. نضع علامة في خانة التأشير I agree ونضغط على زر طلب الشهادة Request Certificate. التحقق من النطاقيجب الآن أن نُثبِت أنّنا نمتلك تحكّمًا بنطاقنا ونزوّد GoDaddy ببعض المستندات، تقوم GoDaddy بإرسال رسالة بريد إلكتروني للتحقّق من ملكيّة النطاق إلى العنوان الموجود في تسجيل WHOIS لنطاقنا، نتبع الخطوات الموجودة في رسائل البريد الإلكتروني التي تصلنا ونُصرِّح بإصدار الشهادة. تنزيل الشهادةبعد أن نُثبِت لـ GoDaddy أنّنا نمتلك النطاق، نتحقّق من بريدنا الإلكتروني (الذي قمنا من خلاله بالتسجيل في GoDaddy) بحثًا عن رسالة تقول أنّه تم إصدار شهادة SSL الخاصة بنا، نفتحها ونتبع رابط تنزيل الشهادة (أو نضغط على زر Launch بجانب شهادة SSL التي نريدها في لوحة تحكّم GoDaddy). نضغط الآن على زر التنزيل Download. نختار برمجيّة الخادوم التي نستخدمها من القائمة المنسدلة لنوع الخادوم Server type، إن كنّا نستخدم Apache HTTP أو Nginx نختار "Apache" ثم نضغط على زر تنزيل الملف المضغوط Download Zip File. نستخرج الملف المضغوط، الذي ينبغي أن يحتوي على ملفين crt.، أحدهما شهادة SSL الخاصّة بنا (التي ينبغي أن تملك اسمًا عشوائيًّأ) وحزمة bundle شهادة GoDaddy الوسيطة (gd_bundle-g2-1.crt)، نقوم بنسخهما إلى خادوم الويب لدينا، ونعيد تسمية الشهادة إلى اسم نطاقنا مع إضافة اللاحقة crt.، على سبيل المثال example.com.crt، ونعيد تسمية حزمة الشهادة الوسيطة إلى intermediate.crt. تكون الشهادة الآن جاهزة للتثبيت على خادوم الويب لدينا. تثبيت الشهادة على خادوم الويب لديناينبغي بعد الحصول على شهادتنا من سلطة الشهادات التي نختارها أن نقوم بتثبيتها على خادوم الويب لدينا، يتضمّن هذا إضافة بعض الأسطر المتعلّقة بـ SSL لملفّات إعدادات خادومنا. سنغطي في هذا القسم الإعدادات الأساسيّة لخادوم Nginx و Apache HTTP على Ubuntu. سنفترض الأمور التالية: يتوضّع المفتاح الخاص وشهادة SSL والشهادات الوسيطة لسلطة الشهادات-إن كان ذلك قابلًا للتطبيق- في الدليل الرئيسي على المسار home/sammy/يُدعى المفتاح الخاص باسم example.com.keyتُدعى شهادة SSL باسم example.com.crtتُوجد الشهادة أو الشهادات الوسيطة لسلطة الشهادات في ملف يُدعى intermediate.crtإن كنت تملك جدار ناري مُمكَّنًا لديك فتأكّد من أنّه يسمح بالمنفذ 443 (منفذ HTTPS)ملاحظة: يجب في البيئة الحقيقيّة تخزين هذه الملفّات في مكان يستطيع فقط المستخدم الذي يُشغِّل عملية خادوم الويب الرئيسيّة (عادة root) الوصول إليه، ينبغي الاحتفاظ بالمفتاح الخاص في مكان آمن. خادوم Nginxإن كنت ترغب باستخدام شهادتك مع خادوم Nginx على Ubuntu فاتبع هذا القسم. ينبغي في Nginx إن كانت سلطة الشهادات قد أعطتنا شهادة وسيطة أن نقوم بإنشاء ملف شهادة مُفرَد محمي بالسلاسل chained يحتوي على شهادتنا والشهادات الوسيطة لسلطة الشهادات. نذهب إلى الدليل الذي يحوي مفتاحنا الخاص، الشهادة، وشهادة سلطة البيانات الوسيطة (أي الملف intermediate.crt)، سنفترض أنّها في الدليل الرئيسي على سبيل المثال: cd ~بافتراض أنّ ملف الشهادة يُدعى example.com.crt نستخدم هذا الأمر لإنشاء ملف مُدمَج يُدعى example.com.chained.crt (نضع اسم نطاقنا بدلًا من example.com): cat example.com.crt intermediate.crt > example.com.chained.crtنذهب الآن إلى دليل إعدادات كتلة block خادوم Nginx، وبافتراض أنّه موجود في المسار etc/nginx/sites-enable/ نستخدم هذا الأمر للانتقال إليه: cd /etc/nginx/sites-enabledبافتراض أنّنا نريد إضافة SSL إلى ملف كتلة الخادوم الافتراضي default نفتح الملف من أجل تحريره: sudo vi defaultنبحث عن الأمر التوجيهي listen ونقوم بتعديله بحيث يبدو كما يلي: listen 443 ssl;نبحث بعدها عن الأمر التوجيهي server_name ونتأكد من أنّ قيمته مُطابِقة لاسم شهادتنا، نُضيف أيضًا الأوامر التوجيهيّة ssl_certificate و ssl_certificate_key لتحديد المسارات لشهادتنا وتحديد ملفّات المفاتيح الخاصّة (نضع الأسماء الموجودة لدينا بدلًا من example.com): server_name example.com; ssl_certificate /home/sammy/example.com.chained.crt; ssl_certificate_key /home/sammy/example.com.key;ولنسمح فقط بالشيفرات ciphers وميفاقات SSL protocols الأكثر أمانًا نُضيف الأسطر التالية إلى الملف: ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;إن أردنا إعادة توجيه المرور عبر HTTP إلى HTTPS نستطيع إضافة هذه الكتلة الإضافيّة للخادوم في أعلى الملف (نضع معلوماتنا بدلًا من example.com): server { listen 80; server_name example.com; rewrite ^/(.*) https://example.com/$1 permanent; }نقوم بعدها بالحفظ والخروج. نعيد تشغيل خادوم Nginx الآن لتحميل الإعدادات الجديدة وتمكين TLS/SSL عبر HTTPS: sudo service nginx restartنختبر ذلك بالوصول إلى موقعنا عبر HTTPS، على سبيل المثال https://example.com. خادوم Apacheإن كنت ترغب باستخدام شهادتك مع خادوم Apache على Ubuntu فاتبع هذا القسم. نقوم بعمل نسخة احتياطيّة لملف إعداداتنا عن طريق نسخه، وبافتراض أنّ خادومنا يعمل على ملف إعدادات المُضيف الوهمي virtual الافتراضي، etc/apache2/sites-available/000-default.conf/، نستخدم هذه الأوامر لعمل النسخة: cd /etc/apache2/sites-available cp 000-default.conf 000-default.conf.origنفتح بعدها الملف لتحريره: sudo vi 000-default.confنبحث عن المُدخَل <VirtualHost *:80> ونقوم بتعديله بحيث يستمع خادوم الويب لدينا على المنفذ 443: <VirtualHost *:443>نقوم بعدها بإضافة الأمر التوجيهي ServerName إن لم يكن موجودًا مُسبقًا (نضع اسم نطاقنا هنا): ServerName example.comنضيف بعد ذلك الأسطر التالية لتحديد شهادتنا ومسارات المفاتيح (نضع مسارنا الفعلي هنا): SSLEngine on SSLCertificateFile /home/sammy/example.com.crt SSLCertificateKeyFile /home/sammy/example.com.keyإن كُنّا نستخدم Apache 2.4.8 أو أكثر نُحدِّد حزمة الشهادة الوسيطة لسلطة الشهادات بإضافة هذا السطر (نضع المسار الفعلي لدينا): SSLCACertificateFile /home/sammy/intermediate.crtإن كُنّا نستخدم إصدار أقدم من Apache نُحدِّد حزمة الشهادة الوسيطة لسلطة الشهادات بإضافة هذا السطر (نضع المسار الفعلي لدينا): SSLCertificateChainFile /home/sammy/intermediate.crtعند هذه النقطة أصبح خادومنا مُعدًّا ليستمع إلى HTTPS فقط (المنفذ 443)، لذا لن يتم تخديم طلبات HTTP (المنفذ 80)، لإعادة توجيه طلبات HTTP إلى HTTPS نضيف ما يلي إلى أعلى الملف (نكتب اسم نطاقنا بدلًا من example.com): <VirtualHost *:80> ServerName example.com Redirect permanent / https://example.com/ </VirtualHost>نقوم بالحفظ والخروج. نقوم بتمكين وحدة Apache SSL بتنفيذ هذا الأمر: sudo a2enmod sslنعيد تشغيل خادوم Apache الآن لتحميل الإعدادات الجديدة وتمكين TLS/SSL عبر HTTPS: sudo service apache2 restartنختبر ذلك بالوصول إلى موقعنا عبر HTTPS، على سبيل المثال https://example.com، نريد أيضًا اختبار الاتصال عبر HTTP، مثل http://example.com لنضمن أنّ إعادة التوجيه تعمل بشكل صحيح. الخاتمةنمتلك الآن فكرة جيّدة عن كيفيّة إضافة شهادة SSL موثوقة لتأمين خادوم الويب لدينا، احرص على أن تتسوّق من سلطة شهادات تجعلك مسرورًا معها. ترجمة -وبتصرّف- لـ How To Install an SSL Certificate from a Commercial Certificate Authority لصاحبه Mitchell Anicas.
-
TLS، أو حماية طبقة النقل (Transport Layer Security)، وسلفها SSL أو طبقة الحِزَم الآمنة (Secure Sockets Layer) هما عبارة عن بروتوكولات آمنة يتم إنشاؤها بهدف توجيه تدفّق البيانات العادية (traffic) ضمن طريق مشفّر وآمن أثناء تنقّلها، وقد قمنا سابقا بشرح كيفية إعداد SSL على خادوم Apache، سنقوم في هذا الدرس بشرح كيفية إعداده مع خادوم nginx. باستخدام هذه التكنولوجيا، يمكن للخواديم أن تقوم بإرسال تدفّق البيانات بشكل آمن بينها وبين الزائر دون الحاجة إلى القلق بخصوص وجود إمكانية لاعتراض تدفّق البيانات بينها وقراءتها بواسطة شخص ما من الخارج. يساعد نظام الشهادات المستخدمين على التحقق من هوية المواقع التي يزورونها أيضًا. في هذا الدرس، سنشرح كيفيّة إنشاء شهادة SSL موقّعة ذاتيًا لخادوم Nginx على Ubuntu 14.04، لن تسمح الشهادة الموقّعة ذاتيًا لمستخدميك من أن يتحققوا من هوية موقعك بما أنّها ليست موقّعة بواسطة واحدة من الجهات التي يثق بها متصفّحك، ولكنّها ستسمح لك بتشفير الاتصالات مع زوّارك. المتطلباتقبل أن تبدأ، يجب أن تهتم ببعض الإعدادات بالطبع. سنستخدم مستخدمًا غير مستخدم الجذر مع صلاحيات sudo في هذا الدرس. يمكنك إعداد واحد عبر اتباع الخطوات المذكورة في درسنا حول إعداد خادوم أوبونتو 14.04 الابتدائي. ستحتاج أيضًا إلى تثبيت خادوم Nginx. إذا كنت تريد إعداد خادوم LEMP كامل (Linux, Nginx, MySQL, PHP) فإنّه يمكنك مراجعة درسنا حول تثبيت LEMP على أوبونتو 14.04. إذا كنت تريد خادوم Nginx فقط، فيمكنك تثبيته بواسطة: sudo apt-get update sudo apt-get install nginxالخطوة الأولى: إنشاء شهادة SSLفلنبدأ عبر إنشاء مسار فرعي ضمن مجلّد إعدادات خادوم Nginx لنضع ملفّات الشهادة التي سنقوم بإنشائها فيه: sudo mkdir /etc/nginx/sslوالآن وبعد أن قمنا بإنشاء ذلك المسار، يمكننا أن نقوم بإنشاء تلك الملفّات بأمر واحد وهو: sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crtسيتم سؤالك عدّة أسئلة. قبل أن نتعرّف عليها، فلنتعرّف على ما يعنيه الأمر السابق: openssl: هذا هو الأمر الأساسي الذي يتم توفيره بواسطة OpenSSL لإنشاء وإدارة الشهادات، المفاتيح وطلبات التوقيع.. إلخ.req: يحدد هذا الأمر الفرعي أننا نريد استخدام إدارة طلبات توقيع الشهادة X.509. X.509 هو عبارة عن معيار بنية تحتية للمفتاح العمومي يحتاجه كلٌّ من SSL وTLS لإدار الشهادات. نريد أن نقوم بإنشاء شهادة X.509 جديدة، ولذلك فإننا سنستخدم هذا الأمر الفرعي.x509-: يقوم هذا أيضًا بتعديل الأمر السابق عبر إخبار الأداة أننا نريد إنشاء شهادة موقّعة ذاتيًا عوضًا عن إنشاء طلب توقيع شهادة، والذي كان ليحدث بالحالة العادية.nodes-: يخبر هذا الخيار OpenSSL بأننا لا نريد تأمين ملفّ المفتاح الخاصّ بنا بجملة مرور، لأنّ استخدام هذا الخيار سيعترض طريق خادوم nginx عندما يتم تشغيله تلقائيًا حيث أنّه يجب علينا إدخال جملة المرور في كلّ مرّة يبدأ فيها الخادوم وفي كلّ مرّة يتم فيها إعادة تشغيله.days 365-: يحدد هذا أنّ الشهادة التي سنقوم بإنشائها صالحة لمدّة 365 يومًا.newkey rsa:2048-: سينشئ هذا الخيار طلب الشهادة ومفتاحًا خاصًّا جديدًا في الوقت ذاته. هذا ضروري جدًا بما أننا لم نقم بإنشاء مفتاح خاصّ مسبقًا. يقوم rsa:2048 بإخبار OpenSSL بأن يقوم بتوليد مفتاح RSA بطول 2048 بت.keyout-: يسمّي هذا المُعامِل الملفّ الناتج لملفّ المفتاح الخاصّ الذي يتم إنشاؤه.out-: يسمّي هذا الخيار ملفّ الشهادة الناتج الذي نقوم بإنشائه.كما وضّحنا أعلاه، ستقوم هذه الخيارات بإنشاء ملفّ مفتاح وشهادة. سيتم سؤالنا بضع أسئلة عن خادومنا بهدف تضمين المعلومات بشكل صحيح في تلك الشهادة. قم بكتابة الأجوبة بشكل صحيح، أهمّ واحد منها هو جواب ذاك السؤال الذي يسألك عن: "Common Name (e.g. server FQDN or YOUR name)". يجب أن تقوم بإدخال اسم نطاقك الذي تريد استخدامه مع خادومك، أو عنوان الـIP العام إذا كنتَ لا تمتلك نطاقًا بعد. أجوبة الأسئلة ستبدو شيئًا كهذا: Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:New York Locality Name (eg, city) []:New York City Organization Name (eg, company) [Internet Widgits Pty Ltd]:Bouncy Castles, Inc. Organizational Unit Name (eg, section) []:Ministry of Water Slides Common Name (e.g. server FQDN or YOUR name) []:your_domain.com Email Address []:admin@your_domain.comسيتم إنشاء الشهادة والمفتاح في مسار etc/nginx/ssl/. الخطوة الثانية: إعداد Nginx ليستخدم SSLالآن وبعد أن أصبح ملفّا الشهادة والمفتاح متوفّرين في مسار إعدادات Nginx، نحتاج الآن فقط إلى تعديل إعدادات خادوم Nginx الخاصّة بنا ليستفيد من التغييرات الجديدة. يمكنك تعلّم المزيد عن إعدادات خادوم Nginx من خلال قراءة تصنيف nginx على أكاديمية حسوب. يستطيع الإصدار 0.7.14 والأعلى منه من Nginx (تأتي أوبونتو 14.04 بالإصدار 1.4.6) أن يقوم بتفعيل SSL في نفس كتلة الخادوم (Server Block) كتدفّق HTTP عادي. يسمح لنا هذا بإعداد الوصول إلى نفس الموقع بطريقةٍ مختصرة بشكل أكبر. قد تبدو إعدادات الخادوم الخاصّة بك كالتالي: server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /usr/share/nginx/html; index index.html index.htm; server_name your_domain.com; location / { try_files $uri $uri/ =404; } }الشيء الوحيد الذي يجب علينا فعله لنجعل SSL تعمل على نفس الخادوم مع السماح باتصالات HTTP العادية هو إضافة السطور التالية: server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; listen 443 ssl; root /usr/share/nginx/html; index index.html index.htm; server_name your_domain.com; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; location / { try_files $uri $uri/ =404; } }عندما تنتهي، احفظ الملفّ وأغلقه. الآن ستحتاج إلى إعادة تشغيل خادوم Nginx فقط لكي تأخذ التغييرات مجراها: sudo service nginx restartسيقوم هذا بإعادة تحميل إعدادات موقعك، وسيصبح قادرًا على الاستجابة إلى كل من طلبات HTTP وHTTPS. الخطوة الرابعة: اختبر إعداداتكيجب الآن أن تعمل وظيفة SSL بشكلٍ جيّد معك، ولكن يجب علينا اختبارها لنتأكّد من ذلك. أولًا، دعنا نتحقق أنّه ما يزال بإمكاننا الوصول إلى الموقع عبر بروتوكول HTTP العادي. في متصفّحك، قم بزيارة اسم نطاق الخادوم الخاصّ بك أو عنوان الـIP: http://اسم_النطاق_أو_عنوان_الآي_بييجب أن ترى الموقع العادي. في حالتي، سأرى رسالة Nginx الافتراضية فقط: إذا وصلت إلى هذه الصفحة، فهذا يعني أنّ خادومك ما يزال يخدم طلبات HTTP بشكل صحيح. الآن يمكننا التحقق مما إذا كان خادومنا قادرًا على استخدام SSL للتواصل أم لا. قم بذلك عبر كتابة بروتوكول https عوضًا عن http: https://اسم_النطاق_أو_عنوان_الآي_بيسترى رسالة تنبيه أن متصفّحك لم يتمكّن من التحقق من هوية خادومك لأنّه لم يتم توقيع الشهادة الخاصّة به من قبل جهة من الجهات التي يثق بها ذلك المتصفّح. هذه رسالة متوقّعة بمّا أنّ شهادتنا هي شهادة موقّعة ذاتيًا (self-signed). صحيح أّنّه لن يكون من الممكن استخدام شهادتنا للتحقق من هوية خادومنا، إلّا أنّ الخادوم سيزال قادرا على التواصل المشفّر. بمّا أنّ هذه الرسالة هي رسالة متوقّعة، فيمكنك الضغط على زرّ "المتابعة على كلّ حال" أو "Proceed anyway" أو أيّ خيار مشابه تجده أمامك للمتابعة. يجب أن ترى صفحة موقعك مجددًا: قد يظهر لك متصفّحك اسم بروتوكول "https" مشطوبًا في شريط العنوان أو محطّمًا أو بجانبه إشارة قفل مشطوبة. إذا ضغطت على أيقونة القفل، ستجد بعض المعلومات عن الاتصال: كما يمكنك أن ترى، المشكلة هي أنّ المتصفّح غير قادر على التحقق من هوية الخادوم بسبب أنّ شهادته ليست موقّعة من جهة إصدارات شهادات موثوقة بالنسبة إلى المتصفّح لا أكثر. يُظهر لك القسم الذي بالمنتصف أنّ الاتصال مشفّر، وهذا يعني أننا حققنا هدفنا على كلّ حال. الخاتمةلقد قمتَ الآن بإعداد خادوم Nginx الخاصّ بك ليعالج كلًّا من طلبات HTTP وSSL. سيساعدك هذا على التواصل مع زوّارك بشكل أأمن بالإضافة إلى جعل الجهات الخارجية غير قادرة على قراءة تدفّق البيانات الخاصّ بك. إذا كنتَ تخطط لإطلاق موقعٍ للعموم وتحتاج SSL، فإنّه يجب عليك شراء شهادة SSL من جهة شهادات موثوقة لموقعك لتجنّب ظهور رسالة التحذير الصفراء لزوّاك موقعك. ترجمة -وبتصرف- للمقال: How To Create an SSL Certificate on Nginx for Ubuntu 14.04 لصاحبه: Justin Ellingwood. حقوق الصورة البارزة: Designed by Freepik.
-
TLS، أو حماية طبقة النقل (Transport Layer Security)، وسلفها SSL أو طبقة الحِزَم الآمنة (Secure Sockets Layer) هما عبارة عن بروتوكولات آمنة يتم إنشاؤها بهدف توجيه تدفّق البيانات العادية (traffic) ضمن طريق مشفّر وآمن أثناء تنقّلها. تسمح هذه البروتوكولات للتدفّق بأن يتمّ إرساله بشكل آمن بين جهات بعيدة عن بعضها البعض دون وجود إمكانية لاعتراض تدفّق البيانات بينها وقراءتها بواسطة شخص ما في المنتصف. لها أيضًا دور فعّال في التحقق من هوّية النطاقات والخواديم الموجودة على الإنترنت عبر استخدامها كأداة للتحقق من هوية تلك الخواديم والنطاقات عبر جهة معيّنة تقوم بإصدار تلك الشهادات. في هذا الدرس، سنشرح كيفيّة إنشاء شهادة SSL موقّعة ذاتيًا لخادوم Apache على Ubuntu 14.04، والذي سيسمح لك بأن تقوم بتشفير التدفّق القادم إلى خادومك. صحيح أنّ هذا لن يوفّر لك ميّزة الاستفادة من استيثاق جهة ما من جهات الطرف الثالث (third-parties) لهويّة خادومك، إلّا أنّه يحقق هدف أولئك الذين يريدون نقل المعلومات بأمان وببساطة. المتطلباتقبل أن تبدأ، يجب أن تهتم ببعض الإعدادات بالطبع. سنستخدم مستخدمًا غير مستخدم الجذر مع صلاحيات sudo في هذا الدرس. يمكنك إعداد واحد عبر اتباع الخطوات المذكورة في درسنا حول إعداد خادوم أوبونتو 14.04 الابتدائي. ستحتاج أيضًا إلى تثبيت خادوم Apache. إذا لم تقم بالفعل بتثبيته وتشغيله فقم بتطبيق الأوامر التالية: sudo apt-get update sudo apt-get install apache2الخطوة الأولى: تفعيل وحدة SSLيأتي دعم SSL افتراضيًا بالواقع مع حزمة Apache على أوبونتو 14.04. نحتاج فقط أن نقوم بتفعيله بكلّ بساطة لكي نستفيد من مميزات SSL على خادومنا. لتفعيله، قم بالأمر التالي: sudo a2enmod sslبعد أن تقوم بتفعيل SSL، سيجب عليك إعادة تشغيل خادوم الويب ليتم تطبيق التغييرات: sudo service apache2 restartبعد هذا، سيكون خادومنا قادرًا على استخدام SSL في حال قمنا بضبطه ليقوم بذلك. الخطوة الثانية: إنشاء شهادة SSL موقعة ذاتيافلنبدأ عبر إنشاء مسار فرعي ضمن مجلّد إعدادات خادوم Apache لنضع ملفّات الشهادة التي سنقوم بإنشائها فيه: sudo mkdir /etc/apache2/sslوالآن وبعد أن قمنا بإنشاء ذلك المسار، يمكننا أن نقوم بإنشاء تلك الملفّات بأمر واحد وهو: sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crtفلنتعرّف على ما يعنيه الأمر السابق: openssl: هذا هو الأمر الأساسي الذي يتم توفيره بواسطة OpenSSL لإنشاء وإدارة الشهادات، المفاتيح وطلبات التوقيع.. إلخ.req: يقوم هذا بتحديد أمرٍ فرعي لإدارة طلب توقيع شهادة X.509 (CSR). X.509 هو معيار بنية تحتية للمفاتيح العمومية تستخدمه SSL لإدارة الشهادات والمفاتيح. بما أننا نريد إنشاء شهادة X.509 جديدة، فإنّ هذا هو ما نريده.x509-: يقوم هذا الخيار بتحديد أننا نريد إنشاء ملفّ شهادة موقّعة ذاتيًا عوضًا عن إنشاء طلب شهادة.nodes-: يخبر هذا الخيار OpenSSL بأننا لا نريد تأمين ملفّ المفتاح الخاصّ بنا بجملة مرور، لأنّ استخدام هذا الخيار سيعترض طريق خادوم أباتشي عندما يتم تشغيله تلقائيًا حيث أنّه يجب علينا إدخال جملة المرور في كلّ مرّة يبدأ فيها الخادوم وفي كلّ مرّة يتم فيها إعادة تشغيله.days 365-: يحدد هذا أنّ الشهادة التي سنقوم بإنشائها صالحة لمدّة 365 يومًا.newkey rsa:2048-: سينشئ هذا الخيار طلب الشهادة ومفتاحًا خاصًّا جديدًا في الوقت ذاته. هذا ضروري جدًا بما أننا لم نقم بإنشاء مفتاحٍ خاصّ مسبقًا. يقوم rsa:2048 بإخبار OpenSSL بأن يقوم بتوليد مفتاح RSA بطول 2048 بت.keyout-: يسمّي هذا المُعامِل الملفّ الناتج لملفّ المفتاح الخاصّ الذي يتم إنشاؤه.out-: يسمّي هذا الخيار ملفّ الشهادة الناتج الذي نقوم بإنشائه.عندما تقوم بضغط زرّ Enter فسيتم سؤالك بضع أسئلة. أهمّ واحدٍ منها هو ذاك السؤال الذي يسألك عن الـ"Common Name". يجب أن تقوم بإدخال اسم نطاقك الذي تريد استخدامه مع الشهادة هنا، أو عنوان الـIP العام إذا كنتَ لا تمتلك نطاقًا بعد. أجوبة الأسئلة ستبدو شيئًا كهذا: Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:New York Locality Name (eg, city) []:New York City Organization Name (eg, company) [Internet Widgits Pty Ltd]:Your Company Organizational Unit Name (eg, section) []:Department of Kittens Common Name (e.g. server FQDN or YOUR name) []:your_domain.com Email Address []:your_email@domain.comسيتم إنشاء الشهادة والمفتاح في مسار etc/apache2/ssl/. الخطوة الثالثة: إعداد Apache ليستخدم SSLالآن وبعد أن أصبح ملفّا الشهادة والمفتاح متوفّرين، يمكننا الآن ضبط خادوم أباتشي ليستخدم هذه الملفّات ضمن ملفّ مستضيف وهمي (virtual host file). يمكنك تعلّم المزيد عن كيفيّة إعداد واحد من موقعنا. عوضًا عن وضع إعداداتنا كلّها في ملفّ 000-default.conf في مجلّد sites-available الفرعي، فسنقوم بوضع هذه الإعدادات في ملفّ default-ssl.conf والذي يحوي إعدادات SSL الافتراضية. افتح الملفّ بصلاحيات الجذر عبر: sudo nano /etc/apache2/sites-available/default-ssl.confيجب أن يبدو الملفّ كالتالي (بعد إزالة التعليقات): <IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule>قد يبدو هذا معقّدًا قليلًا، ولكن لحسن الحظّ فإننا لا نحتاج إلى تعديل معظم الخيارات هنا. نريد فقط إعداد الأمور العادية التي نريدها ضبطها للمستضيف الوهمي (مدير الخادوم، اسم الخادوم، اختصار الخادوم، المسار الجذر.. إلخ) بالإضافة إلى تغيير المكان الذي يبحث فيه أباتشي عن شهادة الـSSL والمفتاح. في النهاية، سيبدو الملفّ كالتالي: <IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin admin@example.com ServerName your_domain.com ServerAlias www.your_domain.com DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/apache2/ssl/apache.crt SSLCertificateKeyFile /etc/apache2/ssl/apache.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule>احفظ الملفّ واخرج عندما تنتهي. الخطوة الرابعة: تفعيل شهادة SSL للمستضيف الوهميالآن وبعد أن قمنا بضبط المستضيف الوهمي الذي أعددناه ليستخدم SSL افتراضيًا، يجب عليك أن نقوم بتفعيله. يمكننا القيام بذلك ببساطة عبر تنفيذ: sudo a2ensite default-ssl.confومن ثمّ، سيجب عليك إعادة تشغيل خادوم أباتشي لتحميل ملفّ إعدادات المستضيف الجديد: sudo service apache2 restartيجب أن يتمَّ الآن تفعيل المستضيف الوهمي الجديد الخاصّ بك، والذي سيخدم المحتوى المشفّر باستخدام شهادة SSL التي قمتَ بإنشائها. الخطوة الخامسة: اختبر إعداداتكالآن وبعد أن قمتَ بإعداد كلّ شيء، يمكنك اختبار إعداداتك عبر زيارة اسم النطاق الخاصّ بك أو عنوان الـIP بعد كتابة //:https قبله، كالتالي: https://اسم_النطاق_أو_عنوان_الآي_بيسترى رسالة تنبيه أنّ متصفّحك لم يتمكّن من التحقق من هوية خادومك لأنّه لم يتم توقيع الشهادة الخاصّة به من قبل جهة من الجهات التي يثق بها ذلك المتصفّح. هذه رسالة متوقّعة بمّا أنّ شهادتنا هي شهادة موقّعة ذاتيًا (self-signed). صحيحٌ أّنّه لن يكون من الممكن استخدام شهادتنا للتحقق من هوية خادومنا، إلّا أنّ الخادوم سيزال قادرًا على التواصل المشفّر. بمّا أنّ هذه الرسالة هي رسالة متوقّعة، فيمكنك الضغط على زرّ "المتابعة على كلّ حال" أو "Proceed anyway" أو أيّ خيار مشابه تجده أمامك للمتابعة. سيتم أخذك بعدها إلى قيمة خيار DocumentRoot التي قمتَ بإعدادها مسبقًا في ملفّ إعدادات SSL الخاصّ بالمستضيف الوهمي. الآن هكذا، أصبح تدفّق البيانات الخاصّ بك مشفّرًا. يمكنك التحقق من ذلك عبر الضغط على أيقونة القفل الموجودة في شريط العنوان: يمكنك أن ترى ذلك القسم الأخضر في المنتصف الذي يخبرك أنّ الاتصال مشفّر. الخاتمةيجب أن تمتلك SSL مفعّلةً الآن على خادومك. ستساعدك على تأمين الاتصال بين موقعك وبين الزوّار، ولكنّ المتصفّحات ستقوم بتحذير كلّ مستخدم يزور موقعك بخصوص شهادة خادومك وأنّه غير قادر على التحقق منها. إذا كنتَ تخطط لإطلاق موقع للعموم وتحتاج SSL، فإنّه يجب عليك شراء شهادة SSL من جهة شهادات موثوقة لموقعك. يمكنك قراءة المزيد من الدروس حول كيفية إعداد خادوم أباتشي أو تأمين خادومك. ترجمة -وبتصرف- للمقال: How To Create a SSL Certificate on Apache for Ubuntu 14.04 لصاحبه: Justin Ellingwood. حقوق الصورة البارزة: Designed by Freepik.