انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

إعداد شهادة SSL/TLS: دليل Let's Encrypt الشامل

تثبيت شهادة SSL/TLS مجانية باستخدام Let's Encrypt وCertbot على Nginx وApache. التجديد التلقائي وإعداد HTTPS وحل المشكلات الشائعة.

وقت القراءة: 12 دقيقة إدارة الخادم
ssltlslets encryptcertbothttpsشهادةnginxapache

جدول المحتويات

إعداد شهادة SSL/TLS: دليل Let's Encrypt الشامل

تقوم شهادات SSL/TLS بتشفير الاتصال بين خادم الويب والزوار. أصبح HTTPS ضرورياً اليوم لتحسين محركات البحث وثقة المتصفح وأمان المستخدم. توفر Let's Encrypt شهادات مجانية وآلية ومفتوحة المصدر.

ما هو SSL/TLS؟

SSL (طبقة المقابس الآمنة) وخلفه الحديث TLS (أمان طبقة النقل) هما بروتوكولان تشفيريان لتأمين البيانات عبر الشبكة. عند استخدام HTTPS:

  • يتم تشفير البيانات أثناء النقل (السرية)
  • يتم التحقق من هوية الخادم (المصادقة)
  • لا يمكن التلاعب بالبيانات (النزاهة)

تُعلّم المتصفحات الحديثة مواقع HTTP بـ"غير آمن". تستخدم Google HTTPS كعامل ترتيب. على خوادم REXE، تثبيت SSL مجاني وسهل.

تثبيت Certbot

Certbot هو الأداة الرسمية للحصول على شهادات Let's Encrypt وتجديدها تلقائياً.

Debian/Ubuntu

hljs bash
# تحديث النظام
sudo apt update && sudo apt upgrade -y

# تثبيت Certbot مع إضافة Nginx
sudo apt install certbot python3-certbot-nginx -y

# لـ Apache
sudo apt install certbot python3-certbot-apache -y

RHEL/CentOS/AlmaLinux

hljs bash
# إضافة مستودع EPEL
sudo dnf install epel-release -y

# تثبيت Certbot
sudo dnf install certbot python3-certbot-nginx -y

التثبيت عبر Snap (موصى به)

hljs bash
# تثبيت snapd
sudo apt install snapd -y

# تثبيت Certbot عبر snap
sudo snap install --classic certbot

# إنشاء رابط رمزي
sudo ln -s /snap/bin/certbot /usr/bin/certbot

# التحقق من الإصدار
certbot --version

الحصول على شهادة SSL لـ Nginx

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

قبل الحصول على الشهادة:

  1. يجب أن يشير نطاقك إلى عنوان IP الخادم
  2. يجب أن تكون المنافذ 80 و443 مفتوحة
  3. يجب أن يكون Nginx يعمل
hljs bash
# التحقق من تحليل النطاق
nslookup example.com

# التحقق من حالة جدار الحماية
sudo ufw status
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

الإعداد التلقائي لـ Nginx

hljs bash
# الحصول على الشهادة وإعداد Nginx تلقائياً
sudo certbot --nginx -d example.com -d www.example.com

# الحصول على الشهادة فقط (إعداد يدوي)
sudo certbot certonly --nginx -d example.com -d www.example.com

# شهادة Wildcard (تتطلب تحقق DNS)
sudo certbot certonly --manual --preferred-challenges dns -d "*.example.com" -d example.com

إعداد SSL يدوي في Nginx

hljs nginx
# إعادة توجيه HTTP إلى HTTPS
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

# كتلة خادم HTTPS
server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;

    add_header Strict-Transport-Security "max-age=15768000" always;

    root /var/www/example.com/html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}
hljs bash
# اختبار الإعداد
sudo nginx -t

# إعادة تحميل Nginx
sudo systemctl reload nginx

الحصول على شهادة SSL لـ Apache

hljs bash
# تفعيل وحدة SSL
sudo a2enmod ssl
sudo a2enmod rewrite

# الحصول على الشهادة مع إضافة Apache
sudo certbot --apache -d example.com -d www.example.com

إعداد SSL يدوي في Apache

hljs apache
<VirtualHost *:443>
    ServerName example.com
    DocumentRoot /var/www/example.com

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
    Header always set Strict-Transport-Security "max-age=15768000"
</VirtualHost>

<VirtualHost *:80>
    ServerName example.com
    Redirect permanent / https://example.com/
</VirtualHost>

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

شهادات Let's Encrypt صالحة لمدة 90 يوماً. يُعدّ Certbot مؤقتاً لـ systemd أو مهمة cron للتجديد التلقائي.

hljs bash
# اختبار التجديد التلقائي
sudo certbot renew --dry-run

# التحقق من حالة المؤقت
sudo systemctl status certbot.timer

# التجديد اليدوي
sudo certbot renew

# إعادة تحميل Nginx بعد التجديد
sudo certbot renew --post-hook "systemctl reload nginx"

التجديد عبر Cron

hljs bash
# تعديل crontab
sudo crontab -e

# الفحص مرتين يومياً
0 0,12 * * * certbot renew --quiet --post-hook "systemctl reload nginx"

التحقق من حالة الشهادة

hljs bash
# سرد جميع الشهادات
sudo certbot certificates

# التحقق من تاريخ انتهاء الصلاحية
echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -dates

استكشاف الأخطاء وإصلاحها

المنفذ 80 محجوب

hljs bash
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo systemctl status nginx

خطأ في تحليل النطاق

hljs bash
nslookup example.com 8.8.8.8
dig example.com +short
curl -4 ifconfig.me

تطبّق Let's Encrypt حدوداً للمعدل: 5 محاولات فاشلة في الساعة. استخدم --staging للاختبار.

hljs bash
# بيئة الاختبار (بدون حدود)
sudo certbot --nginx --staging -d example.com

الخلاصة

مع Let's Encrypt وCertbot، يستغرق تثبيت شهادة SSL/TLS بضع دقائق فقط. يُزيل التجديد التلقائي القلق من انتهاء صلاحية الشهادة. استخدام HTTPS على خوادم REXE أمر بالغ الأهمية لكل من الأمان وأداء تحسين محركات البحث.