تتوقع المتصفحات ومحركات البحث وجود HTTPS، وتوفر Let's Encrypt الشهادات مجانًا. على VPS Linux Infrawire بنظام AlmaLinux 9 يستطيع Certbot الحصول على الشهادة وتعديل إعداد Apache وتجديدها تلقائيًا. تصلح الخطوات نفسها لنظام Rocky Linux 9.
📋 المتطلبات
- خادم VPS بنظام AlmaLinux 9 مع صلاحية root أو sudo (عنوان IP وكلمة المرور في منطقة العميل).
- نطاق
example.comيشير سجل A فيه (وAAAA لـ IPv6) إلىVPS_IP. انتظر انتشار DNS أولًا. - Apache (httpd) يخدم الموقع عبر HTTP على المنفذ 80.
1. تثبيت Apache وفتح الجدار الناري
إذا لم يكن Apache مثبتًا فثبّته وشغّله. ثم افتح HTTP وHTTPS في firewalld؛ المنفذ 80 مطلوب للتحقق من Let's Encrypt.
Bashdnf install -y httpd systemctl enable --now httpd firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload firewall-cmd --list-services
2. إنشاء مضيف افتراضي لنطاقك
يبحث Certbot عن ServerName يطابق نطاقك، لذا أنشئ مضيفًا افتراضيًا مخصصًا.
Bashmkdir -p /var/www/example.com/public_html echo "Hello" > /var/www/example.com/public_html/index.html
أنشئ الملف /etc/httpd/conf.d/example.com.conf:
Apache1<VirtualHost *:80> 2 ServerName example.com 3 ServerAlias www.example.com 4 DocumentRoot /var/www/example.com/public_html 5</VirtualHost>
افحص الصياغة ثم أعد التحميل:
Bashapachectl configtest systemctl reload httpd
3. تثبيت Certbot وmod_ssl
يأتي Certbot من مستودع EPEL. توفر mod_ssl وحدة TLS لـ Apache وشهادة افتراضية يحتاجها httpd للاستماع على المنفذ 443.
Bashdnf install -y epel-release dnf install -y certbot python3-certbot-apache mod_ssl
4. طلب الشهادة
شغّل Certbot مع إضافة Apache. يتحقق من النطاق عبر HTTP، ويكتب مضيفًا افتراضيًا جديدًا باسم *-le-ssl.conf، ويمكنه إضافة إعادة التوجيه من HTTP إلى HTTPS.
Bashcertbot --apache -d example.com -d www.example.com
أدخل بريدًا إلكترونيًا حقيقيًا (يُستخدم لتنبيهات الانتهاء) ووافق على الشروط واختر إعادة التوجيه عند السؤال. يجب أن يشير كل اسم تمرره مع -d إلى هذا الخادم وإلا فشل التحقق.
إذا كان SELinux في وضع enforcing (الافتراضي) فلا حاجة إلى إجراء خاص في الإعداد القياسي. لا تعطّله لتجاوز خطأ.
5. التحقق من التجديد التلقائي
تدوم شهادات Let's Encrypt مدة 90 يومًا. على AlmaLinux 9 تثبّت الحزمة مؤقّت systemd يعمل مرتين يوميًا ويجدد فقط الشهادات القريبة من الانتهاء.
Bashsystemctl list-timers | grep certbot systemctl status certbot-renew.timer
إذا لم يظهر المؤقّت في القائمة ففعّله:
Bashsystemctl enable --now certbot-renew.timer
حاكِ عملية تجديد دون المساس بالشهادة الحقيقية:
Bashcertbot renew --dry-run
يجب أن يشير السطر الأخير إلى نجاح جميع عمليات التجديد المحاكاة. يُعاد تحميل Apache تلقائيًا بعد التجديد الفعلي.
التحقق
Bashcertbot certificates curl -I https://example.com curl -I http://example.com
يسرد الأمر الأول النطاقات وتاريخ الانتهاء. يجب أن يعيد طلب HTTPS الرمز 200، وأن يرد طلب HTTP بالرمز 301 نحو عنوان HTTPS. في المتصفح يجب أن يُظهر القفل شهادة صالحة صادرة عن Let's Encrypt. لرؤية السلسلة كاملة شغّل openssl s_client -connect example.com:443 -servername example.com.
استكشاف الأخطاء
- فشل التحدي أو انتهاء المهلة أثناء التحقق: لا يشير DNS إلى الخادم بعد أو أن المنفذ 80 محجوب. افحص
dig +short example.comوfirewall-cmd --list-servicesوأي جدار ناري أمام الـ VPS. - لا يجد Certbot مضيفًا افتراضيًا مطابقًا: لا يطابق
ServerNameأوServerAliasفي/etc/httpd/conf.d/النطاق الذي مررته. صحّح ذلك وشغّلapachectl configtestثم أعد المحاولة. يمكنك أيضًا استخدامcertbot certonly --apacheوضبط المسارات بنفسك. - عدد كبير من الشهادات أو محاولات تحقق فاشلة (حد المعدل): تحدّ Let's Encrypt من المحاولات المتكررة. اختبر أولًا بـ
certbot --apache --dry-runوانتظر قبل إعادة المحاولة. - الموقع لا يعمل على 443 بعد التثبيت: HTTPS غير مفتوح في firewalld أو لم يُعد تحميل httpd. شغّل
firewall-cmd --permanent --add-service=httpsوfirewall-cmd --reloadوsystemctl restart httpd.
🔐 موقع Apache على AlmaLinux 9 يقدّم الآن HTTPS ويجدد شهادته بنفسه.