تخطي إلى المحتوى الرئيسي

سيرفر مخصص: إنشاء شهادة SSL (Let's Encrypt) لسيرفر Linux

تم إنشاء هذا الدليل باستخدام المنتجات التالية:

(قد تختلف التفاصيل مع المنتجات من مزودين مختلفين ولكن المفاهيم الرئيسية تظل كما هي)

مقدمة

شهادات SSL هي جزء أساسي من الإنترنت، تضمن أن البيانات تُنقل بأمان بين العميل والمضيف. في هذا الدليل، سنستعرض كيفية إعداد أداة Certbot مفتوحة المصدر لطلب شهادات SSL مجانية من سلطة الشهادات غير الربحية Let's Encrypt.

التحضير

لاستخدام Certbot، تحتاج إلى سيرفر Linux ونطاق تملكه. يجب أن يكون لديك وصول إلى إعدادات DNS للنطاق ويجب عليك إنشاء سجل A في DNS يشير إلى عنوان IP الخاص بسيرفرك Linux لكل نطاق رئيسي أو نطاق فرعي تخطط لاستخدامه.

يحتوي Certbot أيضًا على إضافات (plugins) تتيح لك إعداد شهادة بنقرة واحدة بسهولة للنطاقات التي تعمل مع خوادم ويب مختلفة مثل Nginx أو Apache. نوصي باستخدام Nginx لأنه سيرفر ويب مفتوح المصدر عالي الأداء وشائع. راجع دليلنا الوكيل العكسي على Linux للمساعدة في الإعداد.

التثبيت

ابدأ بتثبيت حزمة Certbot مفتوحة المصدر، التي ستستخدمها لطلب شهادات SSL مجانية من Let's Encrypt.

sudo apt install certbot

بعد تثبيت Certbot، يمكنك البدء في طلب الشهادات لنطاقاتك. توفر Let's Encrypt وCertbot مجموعة متنوعة من تحديات ACME للتحقق من ملكية النطاق.

ننصح بشدة باستخدام طريقة HTTP-01 الافتراضية لأنها تسمح بالتجديد التلقائي. ولكن إذا واجهت مشاكل، يمكنك تجربة طريقة DNS-01 كبديل يدوي لا يدعم التجديد التلقائي لأنه يعتمد على التحقق عبر سجل DNS من نوع TXT.

استخدم إضافات خادم الويب

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

تحدي HTTP-01

بعد تثبيت Certbot، يمكنك طلب شهادات لنطاقاتك. في هذا المثال، سنستخدم الوضع المستقل (standalone) حيث يبدأ Certbot سيرفر ويب مؤقت لأداء الإجراءات اللازمة. هذا يعني أنه يجب فتح المنفذ 80 في جدارك الناري وألا يكون هناك سيرفر ويب أو خدمة تعمل على المنفذ 80 للسماح للسيرفر المؤقت بالعمل وجلب التحدي (ومن هنا جاء اسم التحدي HTTP).

في الأمر التالي، ستستخدم المعامل --standalone لإخبار Certbot بأنك تريد استخدام خيار السيرفر المؤقت.

# للنطاقات الرئيسية
certbot certonly --standalone -d [your_root_domain] -d www.[your_root_domain]

# للنطاقات الفرعية
certbot certonly --standalone -d [your_domain]

# الإعداد التفاعلي
certbot certonly --standalone

بعد تشغيل الأمر، قد يُطلب منك إكمال إعداد تفاعلي لأول مرة يطلب منك إدخال بريد إلكتروني للتواصل بخصوص الشهادة، يليها خيار الاشتراك في قائمة بريدية وشروط الاستخدام التي يجب قبولها.

سيقوم Certbot الآن بإنشاء تحدي ACME واستضافته عبر السيرفر المؤقت. ستقوم خوادم Let's Encrypt بمحاولة جلب هذا التحدي من سيرفرك، وعند النجاح سيتم إنشاء الشهادات وحفظها في المسار /etc/letsencrypt/live/[your_domain].

يمكنك الآن استخدام شهادات SSL في أي مكان تحتاجها ببساطة عبر توفير المسار المحلي للشهادات.

سجل TXT في DNS

إذا واجهت صعوبات في التحقق من نطاقك عبر طريقة HTTP-01، يمكنك بدلاً من ذلك استخدام طريقة DNS-01 التي تتطلب إنشاء سجل TXT في DNS بقيمة تقدمها Let's Encrypt.

كما ذُكر سابقًا، هذه الطريقة لا تدعم التجديد التلقائي إلا إذا قمت بإعداد بنية تحتية خاصة لإدارتها. لذلك يُنصح بشدة باستخدام طريقة HTTP-01 حيثما أمكن.

في الأمر التالي، ستستخدم المعامل --preferred-challenges لإخبار Certbot بأنك تريد استخدام طريقة DNS-01.

# للنطاقات الرئيسية
certbot certonly --preferred-challenges dns-01 -d [your_root_domain] -d www.[your_root_domain] --manual -m [your_root_domain] -m www.[your_root_domain]

# للنطاقات الفرعية
certbot certonly --preferred-challenges dns-01 -d [your_domain] --manual -m [your_domain]

# الإعداد التفاعلي
certbot certonly --preferred-challenges dns-01

بعد تشغيل الأمر، قد يُطلب منك إكمال إعداد تفاعلي لأول مرة يطلب منك إدخال بريد إلكتروني للتواصل بخصوص الشهادة، يليها خيار الاشتراك في قائمة بريدية وشروط الاستخدام التي يجب قبولها.

سيزودك Certbot بتعليمات لإنشاء سجل TXT في DNS بقيمة محددة يجب استخدامها. عادةً ما يكون الهدف _acme-challenge. متبوعًا بنطاقك (في هذا المثال، سيكون _acme-challenge.zapdocs.example.com) والقيمة التي يجب تعيينها ستظهر في الكونسول.

بعد إنشاء السجل، اضغط Enter للمتابعة. إذا كان كل شيء صحيحًا وتم نشر السجل، سيتم إنشاء الشهادات وحفظها في المسار /etc/letsencrypt/live/[your_domain].

ملاحظة

يرجى التحلي بالصبر لأن تغييرات سجلات DNS قد تستغرق بعض الوقت للانتشار. عادةً ما يحدث ذلك خلال دقائق، لكن في حالات نادرة قد يستغرق وقتًا أطول.

يمكنك الآن استخدام شهادات SSL في أي مكان تحتاجها ببساطة عبر توفير المسار المحلي للشهادات.

إضافات خادم الويب

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

كلا الطريقتين تستخدمان تحدي HTTP-01 وتعملان بنفس الطريقة تقريبًا. عند استخدام إحدى الإضافات، يبحث Certbot أولًا عن كتلة السيرفر المناسبة التي تحتوي على النطاق المطلوب كمعامل server_name. عند العثور عليها، ينشئ Certbot تحدي ACME ويضيف كتلة مؤقتة location /.well-known/acme-challenge/... في إعدادات السيرفر.

تحاول خوادم Let's Encrypt جلب هذا التحدي من سيرفرك، وعند النجاح يتم إنشاء الشهادة وتعديل إعدادات السيرفر تلقائيًا لاستخدام HTTPS (المنفذ 443) وإضافة المسارات للشهادة الجديدة.

إضافة Nginx

قبل استخدام الإضافة، تأكد من تثبيتها.

sudo apt install python3-certbot-nginx

لاستخدام إضافة Nginx، استخدم المعامل --nginx في الأمر كما يلي.

# للنطاقات الرئيسية
certbot --nginx -d [your_root_domain] -d www.[your_root_domain]

# للنطاقات الفرعية
certbot --nginx -d [your_domain]

# الإعداد التفاعلي
certbot --nginx
نصيحة

إذا أردت تعطيل التعديلات التلقائية "بنقرة واحدة" على إعدادات السيرفر من Certbot، يمكنك إضافة معامل certonly في الأمر مثل certbot certonly.

التجديد التلقائي

في معظم الحالات، يقوم Certbot تلقائيًا بإعداد تجديد الشهادات عبر cronjob و/أو مؤقت systemd. يمكنك التأكد من ذلك بتشغيل الأمر التالي الذي يستخدم معامل --dry-run لاختبار العملية.

certbot renew --dry-run
نصيحة

كما ذُكر سابقًا، طريقة DNS-01 لا تدعم التجديد التلقائي عبر Certbot إلا إذا أعددت بنية تحتية خاصة. لذلك يُنصح بشدة باستخدام طريقة HTTP-01.

يجب أن تنجح العملية إذا كان كل شيء مضبوطًا. إذا أردت عرض أو تعديل إعدادات التجديد التلقائي، ستجد الأمر في أحد المواقع التالية: /etc/crontab/، /etc/cron.*/* أو عبر systemctl list-timers.

إعداد Cronjob يدويًا

إذا لم يتم إعداد التجديد التلقائي، يمكنك إضافته بنفسك عبر cronjob. افتح قائمة crontab باستخدام crontab -e. إذا كانت هذه المرة الأولى، قد يُطلب منك اختيار محرر. اختر الخيار الأول، والذي عادةً ما يكون /bin/nano.

مع فتح الملف في nano، أضف السطر التالي لتشغيل التجديد يوميًا الساعة 6 صباحًا بالتوقيت المحلي.

0 6 * * * certbot renew

احفظ الملف واخرج من nano باستخدام CTRL + X، ثم Y للتأكيد وأخيرًا ENTER.

الخاتمة

لقد قمت بإعداد Certbot بنجاح لنطاقاتك عبر عدة طرق مثل الوضع المستقل، webroot أو باستخدام إحدى الإضافات، مما يوفر لموقعك نقل بيانات آمن عبر HTTPS. لأي أسئلة أو مساعدة إضافية، لا تتردد في التواصل مع فريق الدعم لدينا، المتوفر يوميًا لمساعدتك! 🙂