إنشاء شهادة SSL لخادوم Apache على Ubuntu 14.04


محمد هاني صباغ

TLS، أو حماية طبقة النقل (Transport Layer Security)، وسلفها SSL أو طبقة الحِزَم الآمنة (Secure Sockets Layer) هما عبارة عن بروتوكولات آمنة يتم إنشاؤها بهدف توجيه تدفّق البيانات العادية (traffic) ضمن طريق مشفّر وآمن أثناء تنقّلها.

ssl-apache_(1).thumb.png.d98534d30252182

 

تسمح هذه البروتوكولات للتدفّق بأن يتمّ إرساله بشكل آمن بين جهات بعيدة عن بعضها البعض دون وجود إمكانية لاعتراض تدفّق البيانات بينها وقراءتها بواسطة شخص ما في المنتصف. لها أيضًا دور فعّال في التحقق من هوّية النطاقات والخواديم الموجودة على الإنترنت عبر استخدامها كأداة للتحقق من هوية تلك الخواديم والنطاقات عبر جهة معيّنة تقوم بإصدار تلك الشهادات.

في هذا الدرس، سنشرح كيفيّة إنشاء شهادة 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://اسم_النطاق_أو_عنوان_الآي_بي

سترى رسالة تنبيه أنّ متصفّحك لم يتمكّن من التحقق من هوية خادومك لأنّه لم يتم توقيع الشهادة الخاصّة به من قبل جهة من الجهات التي يثق بها ذلك المتصفّح.

001.thumb.png.e8e5e6fed7a13f5588fc404ac1

هذه رسالة متوقّعة بمّا أنّ شهادتنا هي شهادة موقّعة ذاتيًا (self-signed). صحيحٌ أّنّه لن يكون من الممكن استخدام شهادتنا للتحقق من هوية خادومنا، إلّا أنّ الخادوم سيزال قادرًا على التواصل المشفّر.

بمّا أنّ هذه الرسالة هي رسالة متوقّعة، فيمكنك الضغط على زرّ "المتابعة على كلّ حال" أو "Proceed anyway" أو أيّ خيار مشابه تجده أمامك للمتابعة.

سيتم أخذك بعدها إلى قيمة خيار DocumentRoot التي قمتَ بإعدادها مسبقًا في ملفّ إعدادات SSL الخاصّ بالمستضيف الوهمي. الآن هكذا، أصبح تدفّق البيانات الخاصّ بك مشفّرًا. يمكنك التحقق من ذلك عبر الضغط على أيقونة القفل الموجودة في شريط العنوان:

002.thumb.png.f3b3fd244e285403c6f6dd6c95

يمكنك أن ترى ذلك القسم الأخضر في المنتصف الذي يخبرك أنّ الاتصال مشفّر.

الخاتمة

يجب أن تمتلك SSL مفعّلةً الآن على خادومك. ستساعدك على تأمين الاتصال بين موقعك وبين الزوّار، ولكنّ المتصفّحات ستقوم بتحذير كلّ مستخدم يزور موقعك بخصوص شهادة خادومك وأنّه غير قادر على التحقق منها.

إذا كنتَ تخطط لإطلاق موقع للعموم وتحتاج SSL، فإنّه يجب عليك شراء شهادة SSL من جهة شهادات موثوقة لموقعك.

يمكنك قراءة المزيد من الدروس حول كيفية إعداد خادوم أباتشي أو تأمين خادومك.

ترجمة -وبتصرف- للمقال: How To Create a SSL Certificate on Apache for Ubuntu 14.04 لصاحبه: Justin Ellingwood.

حقوق الصورة البارزة: Designed by Freepik.





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن