كيفية تشفير Apache باستخدام Let’s Encrypt على Ubuntu

مقدمة

Let’s Encrypt هو مصدر قوة الشهادات (CA) الذي يسهل الحصول على وتثبيت شهادات TLS/SSL مجانية، مما يمكّن من تمكين HTTPS المشفر على سرفرات الويب. يبسط العملية عن طريق توفير عميل برمجي، Certbot، الذي يحاول أتمتة معظم (إن لم يكن كل) الخطوات المطلوبة. حاليًا، تكون العملية الكاملة للحصول على وتثبيت الشهادة متوقعة تلقائيًا على كلا Apache وNginx.

في هذا الدليل، ستستخدم Certbot للحصول على شهادة SSL مجانية لـ Apache على Ubuntu وتأكد من أن هذه الشهادة مجهزة للتجدد تلقائيًا.

يستخدم هذا الدرس ملف مضيف افتراضي منفصل بدلاً من ملف التكوين الافتراضي لـ Apache لإعداد الموقع الإلكتروني الذي سيتم تأمينه بواسطة Let’s Encrypt. نوصي ب إنشاء ملفات مضيف افتراضي جديدة لـ Apache لكل مجموعة تحتوي على مجموعة مضيفة في الخادم لأن ذلك يساعد في تجنب الأخطاء الشائعة ويحافظ على ملفات التكوين الافتراضي كإعداد احتياطي.

كيفية تأمين Apache باستخدام Let’s Encrypt على Ubuntu

  1. تثبيت Certbot
  2. التحقق من تكوين مستضيف Apache الافتراضي
  3. السماح بـ HTTPS عبر الجدار الناري
  4. الحصول على شهادة SSL
  5. التحقق من تجديد Certbot تلقائيًا

المتطلبات الأساسية

لتتبع هذا الدليل، ستحتاج إلى:

  • خادم واحد لأوبونتو قد تم إعداده بمستخدم غير جذر يمتلك صلاحيات الإدارة بواسطة sudo وتم تفعيل الجدار الناري. يمكنك إعداد ذلك عن طريق اتباع دليلنا إعداد الخادم الأولي لأوبونتو.

  • اسم مجموعة مسجل بالكامل. سيستخدم هذا الدليل your_domain كمثال طوال الوقت. يمكنك شراء اسم مجموعة على Namecheap، أو الحصول على واحد مجاني على Freenom، أو استخدام مسجل المجموعات المفضل لديك.

  • تم إعداد كل من السجلات DNS التاليين لخادمك. يمكنك اتباع هذا الدليل لـ DigitalOcean DNS للحصول على تفاصيل حول كيفية إضافتهما.

    • سجل A مع your_domain يشير إلى عنوان IP عام لخادمك.
    • سجل A مع www.your_domain يشير إلى عنوان IP عام لخادمك.
  • تم تثبيت Apache باتباع كيفية تثبيت Apache على Ubuntu. تأكد من أن لديك ملف مضيف افتراضي لعملتك. سيستخدم هذا الدليل /etc/apache2/sites-available/your_domain.conf كمثال.

الخطوة 1 — تثبيت Certbot

للحصول على شهادة SSL باستخدام Let’s Encrypt، تحتاج إلى تثبيت برنامج Certbot على الخادم الخاص بك. ستستخدم مستودعات حزم Ubuntu الافتراضية لذلك.

أولاً، قم بتحديث فهرس الحزم المحلي:

  1. sudo apt update

تحتاج إلى حزمين: certbot، و python3-certbot-apache. الأخير هو مكتبة تدمج Certbot مع Apache، مما يتيح تلقائية الحصول على الشهادة وتكوين HTTPS داخل خادم الويب الخاص بك باستخدام أمر واحد:

  1. sudo apt install certbot python3-certbot-apache

سيطلب منك تأكيد التثبيت بالضغط على Y، ثم ENTER.

الآن تم تثبيت Certbot على الخادم الخاص بك. في الخطوة التالية، ستقوم بالتحقق من تكوين Apache للتأكد من أن مضيف الافتراضي الخاص بك قد تم ضبطه بشكل صحيح. سيضمن ذلك أن سكربت عميل certbot سيتمكن من اكتشاف دمائنك وإعادة تكوين الخادم الويبي الخاص بك لاستخدام شهادة SSL التي تم توليدها حديثًا تلقائيًا.

الخطوة 2 — التحقق من تكوين مضيف الافتراضي الخاص بك لApache

للحصول على SSL وتكوينه تلقائيًا لخادم الويب الخاص بك، يحتاج Certbot إلى إيجاد مضيف الافتراضي الصحيح داخل ملفات تكوين Apache الخاصة بك. سيتم استرجاع اسم(أسماء) النطاق الخاص بكم من التوجيهات ServerName و ServerAlias المعرفة داخل блок تكوين VirtualHost الخاص بك.

إذا اتبعتم خطوة إعداد مضيف الافتراضي في دليل تثبيت Apache، يجب أن يكون لديكم بلوك VirtualHost قد تم إعداده لنطاقكم على /etc/apache2/sites-available/اسم_النطاق.conf مع توجيهات ServerName و أيضًا ServerAlias قد تم تعيينها بشكل صحيح بالفعل.

لتأكيد ذلك، افتح ملف مضيف الافتراضي الخاص بنطاقكم باستخدام nano أو محرر النصوص المفضل بواسطةك:

  1. sudo nano /etc/apache2/sites-available/your_domain.conf

تجد خطوط ServerName و ServerAlias الموجودة. يجب أن تكون مدرجة كالتالي:

/etc/apache2/sites-available/your_domain.conf
...
ServerName your_domain
ServerAlias www.your_domain
...

إذا كان لديك بالفعل ServerName و ServerAlias معينتين كهذا، يمكنك الخروج من محرر النصوص والانتقال إلى الخطوة التالية. إذا لم تتطابق إعداد الخادم الافتراضي الحالي بالمثال، قم بتحديثه وفقًا لذلك. إذا كنت تستخدم nano، يمكنك الخروج عن طريق الضغط على CTRL+X، ثم Y و ENTER لتأكيد التغييرات إذا كانت موجودة. ثم، قم بتشغيل الأمر التالي لتحقق من التغييرات:

  1. sudo apache2ctl configtest

يجب أن تتلقى Syntax OK كرد. إذا حدث خطأ، افتح ملف الخادم الافتراضي مرة أخرى وتحقق من أي أخطاء اطباعية أو أحرف مفقودة. بمجرد أن تكون صيغة ملف الإعداد صحيحة، أعد تحميل Apache حتى تأخذ التغييرات مؤثرًا:

  1. sudo systemctl reload apache2

مع هذه التغييرات، سيتمكن Certbot من العثور على الكتلة VirtualHost الصحيحة وتحديثها.

الخطوة التالية، ستقوم بتحديث الجدار الناري للسماح بتدفق البيانات HTTPS.

الخطوة 3 — السماح بتدفق HTTPS من خلال الجدار الناري

إذا كان لديك الجدار الناري UFW مفعلاً، كما موصى به بواسطة دليلات الشروط الأساسية، ستحتاج إلى تعديل الإعدادات للسماح بتدفق البيانات HTTPS. عند التثبيت، يقوم Apache بتسجيل عدة ملفات تعريفات UFW للتطبيق. يمكنك استخدام ملف تعريف Apache Full للسماح بتدفق HTTP وHTTPS على الخادم الخاص بك.

للتحقق من نوع الtrafic الذي يُسمح حاليًا على الخادم الخاص بك، تحقق من الحالة:

  1. sudo ufw status

إذا اتبعت إحدى دليلات التثبيت الخاصة بنا لـ Apache، ستحصل على مخرج مشابه لما يلي، مما يعني أن الtrafic الخاص بـ HTTP فقط على المنفذ 80 مسموح حاليًا:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)

للسماح بالtrafic الخاص بـ HTTPS، اسمح بملف الملف الشامل لـ “Apache”:

  1. sudo ufw allow 'Apache Full'

ثم احذف ملف “Apache” الزائد:

  1. sudo ufw delete allow 'Apache'

ستعرض الحالة كما يلي:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)

أنت الآن مستعد لتشغيل Certbot والحصول على الشهادات الخاصة بك.

الخطوة 4 — الحصول على شهادة SSL

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

  1. sudo certbot --apache

سيطلب هذا النص سؤالك للإجابة على سلسلة من الأسئلة لتكوين شهادة SSL الخاصة بك. أولاً، سيطلب منك عنوان بريد إلكتروني صالح. سيتم استخدام هذا البريد الإلكتروني لإشعارات التجديد والإشعارات الأمنية:

Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): you@your_domain

بعد تزويدي بعنوان بريد إلكتروني صالح، اضغط على ENTER للانتقال إلى الخطوة التالية. سيطلب منك ثم عدم زيادة إذا كنت توافق على شروط خدمة Let’s Encrypt. يمكنك الالتزام عن طريق الضغط على Y ثم ENTER:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

التالي، سيتم سؤالك إذا كنت ترغب في مشاركة بريدك الإلكتروني مع مؤسسة الهوية الإلكترونية لتلقي الأخبار ومعلومات أخرى. إذا لم ترغب في الاشتراك في محتواهم، اكتب N. وإلا، اكتب Y ثم اضغط على ENTER للانتقال إلى الخطوة التالية:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N

سيقوم الخطوة التالية بطلب منك تبليغ Certbot عن أي الأماكن التي ترغب في تفعيل HTTPS لها. تم جمع أسماء الأماكن المدرجة تلقائيًا من تكوين خادم الافتراضي لأباشي الخاص بك، لذا من المهم التأكد من أن لديك إعدادات ServerName وServerAlias صحيحة في خادم الافتراضي الخاص بك. إذا كنت ترغب في تمكين HTTPS لجميع الأماكن المدرجة (موصى به), يمكنك ترك العلامة سفليًا واضغط على ENTER للانتقال. وإلا، اختر الأماكن التي ترغب في تمكين HTTPS لها عن طريق ذكر كل رقم مناسب، مفصولًا بفواصل أو مسافات، ثم اضغط على ENTER:

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 

بعد هذا الخطو، يتم الانتهاء من تكوين Certbot، وسيتم تقديم الملاحظات النهائية حول شهادتك الجديدة وموقع الملفات التي تم إنشاؤها:

Output
Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem This certificate expires on 2022-07-10. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf Successfully deployed certificate for www.your_domain.com to /etc/apache2/sites-available/your_domain-le-ssl.conf Congratulations! You have successfully enabled HTTPS on https:/your_domain and https://www.your_domain.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

تم تثبيت شهادتك الآن وتحميلها إلى تكوين Apache. حاول إعادة تحميل موقعك باستخدام https:// ولاحظ مؤشر الأمان لمتصفحك. يجب أن يشير إلى أن موقعك مأمون بشكل صحيح، عادة عن طريق أيقونة القفل في شريط العنوان.

يمكنك استخدام SSL Labs Server Test للتحقق من درجة شهادتك والحصول على معلومات مفصلة حولها، من وجهة نظر خدمة خارجية.

في الخطوة القادمة والأخيرة، ستقوم باختبار ميزة التجديد الآلي لـ Certbot، التي تضمن أن сертиفيكاتك سيتم تجديدها تلقائيًا قبل تاريخ انتهائها.

الخطوة 5 — التحقق من التجديد الآلي لـ Certbot

تصاريح Let’s Encrypt فقط صالحة لمدة تسعين يومًا. هذا لتشجيع المستخدمين على تلقائية عملية تجديد серتيفكاتهم، بالإضافة إلى ضمان أن الشهادات المسخرة أو المفتقدة للمفاتيح ستنتهي صلاحيتها قريبًا بدلاً من أن تكون بعيدًا.

الحزمة certbot التي قمت بتثبيتها تعتني بالتجديدات من خلال تضمين سكربت تجديد في /etc/cron.d، والذي يتم إدارته بواسطة خدمة systemctl تُدعى certbot.timer. يتم تشغيل هذا السكربت مرتين يومًا وسيقوم بتجديد أي شهادة تكون بموعد انتهائها غضون ثلاثين يومًا تلقائيًا.

للتحقق من حالة هذه الخدمة والتأكد من أنها نشطة، انقر التالي:

  1. sudo systemctl status certbot.timer

سيكون خرجك مشابهًا لما يلي:

Output
● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset:> Active: active (waiting) since Mon 2022-04-11 20:52:46 UTC; 4min 3s ago Trigger: Tue 2022-04-12 00:56:55 UTC; 4h 0min left Triggers: ● certbot.service Apr 11 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.

لاختبار عملية التجديد، يمكنك إجراء تجربة جافية مع certbot:

  1. sudo certbot renew --dry-run
Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/your_domain.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Account registered. Simulating renewal of an existing certificate for your_domain and www.your_domain.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations, all simulated renewals succeeded: /etc/letsencrypt/live/your_domain/fullchain.pem (success) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

إذا لم تتلقى أي أخطاء، فأنت جاهز. عند الحاجة، سيقوم Certbot بتجديد серتيفكاتك وإعادة تحميل Apache للحصول على التغييرات. إذا فشلت عملية التجديد الآلي أبدًا، سيرسل Let’s Encrypt رسالة إلى البريد الإلكتروني الذي ذكرته، ويحذرك عندما تكون شهادتك على وشك انتهائها.

الخاتمة

في هذا الدليل، قمت بتثبيت عميل Let’s Encrypt certbot، وتكوين وتثبيت شهادة SSL للمجال الخاص بك، والتحقق من أن خدمة التجديد الآلي لـ Certbot نشطة داخل systemctl. إذا كانت لديك أسئلة إضافية حول استخدام Certbot، توثيقهم هو مكان جيد للبدء.

Source:
https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu