مقدمة
Let’s Encrypt هي سلطة شهادات (CA) توفر وسيلة متاحة للحصول على شهادات TLS/SSL مجانية وتثبيتها، مما يمكن من تشفير HTTPS على خوادم الويب. يبسط العملية من خلال توفير عميل برمجيات يُدعى Certbot، الذي يحاول أتمتة معظم (إن لم يكن كل) الخطوات المطلوبة. حاليًا، العملية بأكملها للحصول على الشهادة وتثبيتها مُؤتمتة تمامًا على كل من Apache و Nginx.
في هذا البرنامج التعليمي، ستستخدم Certbot للحصول على شهادة SSL مجانية لـ Nginx على Rocky Linux 9 وإعداد الشهادة للتجديد تلقائيًا.
سيستخدم هذا البرنامج التعليمي ملف تكوين خادم Nginx منفصل بدلاً من الملف الافتراضي. يجب عليك إنشاء ملفات كتل خادم Nginx جديدة لكل نطاق لأنه يساعد في تجنب الأخطاء الشائعة والحفاظ على الملفات الافتراضية كتكوين احتياطي.
المتطلبات الأساسية
لمتابعة هذا البرنامج التعليمي، ستحتاج:
-
إعداد خادم Rocky Linux 9 وفقًا لهذا البرنامج التعليمي إعداد الخادم الأولي لـ Rocky Linux 9 ، بما في ذلك مستخدم بدون صلاحيات root وجدار نار.
-
اسم نطاق مسجل. سيتم استخدام
example.com
في هذا البرنامج التعليمي. يمكنك شراء اسم نطاق من Namecheap، الحصول على واحد مجانًا من Freenom، أو استخدام مسجل النطاق الخاص بك. -
تهيئة كل من سجلات DNS التالية لخادمك. إذا كنت تستخدم DigitalOcean، يرجى الرجوع إلى وثائق DNS الخاصة بنا للحصول على تفاصيل حول كيفية إضافتها.
- سجل A بـ
example.com
يشير إلى عنوان IP العام لخادمك. - سجل A بـ
www.example.com
يشير إلى عنوان IP العام لخادمك.
- سجل A بـ
-
قم بتثبيت Nginx باتباع كيفية تثبيت Nginx على Rocky Linux 9. تأكد من وجود كتلة خادم لنطاقك. سيستخدم هذا البرنامج التعليمي
/etc/nginx/sites-available/example.com
كمثال.
الخطوة 1 — تثبيت Certbot
أولاً، تحتاج إلى تثبيت حزمة البرنامج certbot
. قم بتسجيل الدخول إلى جهاز Rocky Linux 8 الخاص بك بوصفك كمستخدم غير جذري:
- ssh sammy@your_server_ip
حزمة certbot
غير متوفرة من خلال مدير الحزم افتراضيًا. ستحتاج إلى تمكين مستودع EPEL لتثبيت Certbot.
لإضافة مستودع Rocky Linux 9 EPEL، قم بتشغيل الأمر التالي:
- sudo dnf install epel-release
عندما يُطلَب منك تأكيد التثبيت، اكتب وأدخل y
.
الآن بما أن لديك الوصول إلى المستودع الإضافي، قم بتثبيت جميع الحزم المطلوبة:
- sudo dnf install certbot python3-certbot-nginx
سيقوم هذا بتثبيت Certbot نفسه وإضافة المكون الإضافي لـ Nginx لـ Certbot ، والذي يُطلب لتشغيل البرنامج.
سيطلب عملية التثبيت منك استيراد مفتاح GPG. قم بتأكيد ذلك حتى يتمكن التثبيت من الاكتمال.
الآن بعد أن قمت بتثبيت Certbot ، دعونا نشغله للحصول على شهادة.
الخطوة 2 — تأكيد تكوين Nginx
يحتاج Certbot إلى القدرة على العثور على كتلة الـ server
الصحيحة في تكوين Nginx الخاص بك ليتمكن من تكوين SSL تلقائيًا. يقوم بذلك عن طريق البحث عن توجيه server_name
الذي يتطابق مع النطاق الذي تطلب شهادة له.
إذا قمت باتباع خطوة إعداد كتلة الخادم في دليل تثبيت Nginx ، فيجب أن يكون لديك كتلة خادم لنطاقك في /etc/nginx/conf.d/example.com
مع توجيه server_name
مضبوطًا بالفعل بشكل صحيح.
للتحقق ، افتح ملف التكوين الخاص بنطاقك باستخدام nano
أو محرر النص المفضل لديك:
- sudo nano /etc/nginx/conf.d/example.com
ابحث عن سطر server_name
الموجود. يجب أن يبدو هكذا:
...
server_name example.com www.example.com;
...
إذا كان الأمر كذلك ، فأغلق المحرر الخاص بك وانتقل إلى الخطوة التالية.
إذا لم يكن كذلك ، فقم بتحديثه ليتطابق. ثم احفظ الملف ، وأغلق المحرر الخاص بك ، وتحقق من صحة تحريرات التكوين الخاصة بك:
- sudo nginx -t
إذا واجهت خطأ، أعد فتح ملف تكوين الخادم وتحقق من وجود أي أخطاء إملائية أو أحرف مفقودة. بمجرد أن يكون بناء ملف التكوين صحيحًا من الناحية الصحيحة، أعد تحميل Nginx لتحميل التكوين الجديد:
- sudo systemctl reload nginx
يمكن لـ Certbot الآن العثور على كتلة server
الصحيحة وتحديثها تلقائيًا.
بعد ذلك، دعونا نقوم بتحديث جدار الحماية للسماح بحركة المرور عبر HTTPS.
الخطوة 3 — تحديث قواعد جدار الحماية
نظرًا لأن إعدادات السابقة تمكن من firewalld
، ستحتاج إلى ضبط إعدادات جدار الحماية للسماح بالاتصالات الخارجية على خادم الويب Nginx الخاص بك.
للتحقق من الخدمات التي تم تمكينها بالفعل، قم بتشغيل الأمر:
- sudo firewall-cmd --permanent --list-all
ستتلقى إخراجًا مثل هذا:
Outputpublic
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client http ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
إذا لم ترى http
في قائمة الخدمات، قم بتمكينها عبر الأمر التالي:
- sudo firewall-cmd --permanent --add-service=http
للسماح بحركة المرور عبر https
، قم بتشغيل الأمر التالي:
- sudo firewall-cmd --permanent --add-service=https
لتطبيق التغييرات، ستحتاج إلى إعادة تحميل خدمة الجدار الناري:
- sudo firewall-cmd --reload
الآن بعد أن قمت بفتح الخادم الخاص بك لحركة المرور عبر https، أنت الآن جاهز لتشغيل Certbot واسترداد الشهادات الخاصة بك.
الخطوة 4 — الحصول على شهادة SSL
يوفر Certbot مجموعة متنوعة من الطرق للحصول على شهادات SSL من خلال الوصلات الإضافية. سيقوم وصلة Nginx بإعادة تكوين Nginx وإعادة تحميل التكوين عند الضرورة. لاستخدام هذه الوصلة، اكتب ما يلي:
- sudo certbot --nginx -d example.com -d www.example.com
يقوم هذا بتشغيل certbot
مع الوصلة --nginx
، باستخدام -d
لتحديد أسماء النطاقات التي تحتاج إلى أن تكون الشهادة صالحة لها.
عند تشغيل الأمر، ستُطلب منك إدخال عنوان بريد إلكتروني والموافقة على شروط الخدمة. بعد القيام بذلك، يجب أن ترى رسالة تخبرك بأن العملية نجحت ومكان تخزين شهاداتك:
OutputSuccessfully 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-12-15.
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/nginx/conf.d/your_domain.conf
Successfully deployed certificate for www.your_domain to /etc/nginx/conf.d/your_domain.conf
Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain
…
تم تنزيل شهاداتك، وتثبيتها، وتحميلها، وستقوم إعدادات Nginx الخاصة بك الآن بإعادة توجيه جميع طلبات الويب تلقائيًا إلى https://
. جرب إعادة تحميل موقع الويب الخاص بك ولاحظ مؤشر أمان المتصفح الخاص بك. يجب أن يشير إلى أن الموقع مؤمَّن بشكل صحيح، عادةً مع رمز القفل. إذا قمت بتجربة خادمك باستخدام اختبار SSL Labs Server Test، ستحصل على درجة A.
لننهي بفحص عملية التجديد.
الخطوة 5 — التحقق من تجديد Certbot تلقائيًا
تعتبر شهادات Let’s Encrypt صالحة لمدة 90 يومًا، ولكن من المُوصى به تجديدها كل 60 يومًا للسماح بفرصة لحدوث أي أخطاء. يحتوي عميل Certbot Let’s Encrypt على أمر renew
الذي يقوم تلقائيًا بالتحقق من الشهادات المثبتة حاليًا ومحاولة تجديدها إذا كانت أقل من 30 يومًا عن تاريخ الانتهاء.
يمكنك اختبار التجديد التلقائي لشهاداتك عن طريق تشغيل هذا الأمر:
- sudo certbot renew --dry-run
سيكون الإخراج مشابهًا لهذا:
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/your_domain.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator nginx, Installer nginx
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for monitoring.pp.ua
Waiting for verification...
Cleaning up challenges
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/your_domain/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates below have not been saved.)
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/your_domain/fullchain.pem (success)
...
يرجى ملاحظة أنه إذا قمت بإنشاء شهادة مُجمعة تحتوي على عدة نطاقات، سيظهر اسم النطاق الأساسي فقط في الإخراج، ولكن التجديد سيعمل لجميع النطاقات المدرجة في هذه الشهادة.
A practical way to ensure your certificates will not get outdated is to create a cron
job that will periodically execute the automatic renewal command for you. Since the renewal first checks for the expiration date and only executes the renewal if the certificate is less than 30 days away from expiration, it is safe to create a cron job that runs every week, or even every day.
قم بتعديل الـ crontab لإنشاء وظيفة جديدة ستعمل على تجديد الشهادة مرتين في اليوم. لتعديل الـ crontab لمستخدم الجذر، قم بتشغيل الأمر التالي:
- sudo crontab -e
سيفتح محرر النصوص الخاص بك ملف الـ crontab الافتراضي، الذي هو ملف نصي فارغ في هذه النقطة. ادخل في وضع الإدراج عن طريق الضغط على i
وأضف السطر التالي:
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew --quiet
عند الانتهاء، اضغط على ESC
للخروج من وضع الإدراج، ثم اكتب :wq
واضغط على ENTER
لحفظ التغييرات والخروج من الملف. لمعرفة المزيد عن محرر النصوص Vi وخليفته Vim، تفضل بزيارة الدليل التعليمي لدينا حول تثبيت واستخدام محرر النصوص Vim على خادم سحابي.
سينشئ هذا وظيفة cron جديدة تقوم بالتنفيذ في منتصف النهار ومنتصف الليل يوميًا. python -c 'import random; import time; time.sleep(random.random() * 3600)'
سيختار دقيقة عشوائية داخل الساعة لمهام التجديد الخاصة بك.
الأمر renew
لـ Certbot سيتحقق من جميع الشهادات المثبتة على النظام وسيحدث أي شهادة تنتهي صلاحيتها في أقل من ثلاثين يومًا. --quiet
يُخبر Certbot بعدم إخراج المعلومات أو انتظار إدخال المستخدم.
يمكن العثور على مزيد من المعلومات المفصلة حول التجديد في توثيق Certbot.
الاستنتاج
في هذا الدليل، قمت بتثبيت عميل Let’s Encrypt Certbot، وقمت بتنزيل شهادات SSL لنطاقك، وأعدت إعداد تجديد الشهادة تلقائيًا. إذا كان لديك أي أسئلة حول استخدام Certbot، يمكنك التحقق من الـ توثيق Certbot الرسمي.
يمكنك أيضًا التحقق من مدونة Let’s Encrypt الرسمية للتحديثات المهمة من وقت لآخر.