تثبيت SSL في Apache وإعادة التوجيه إلى HTTPS عبر .htaccess

لا يزال Apache HTTP Server أحد أكثر خوادم الويب انتشارًا، ويوفّر دعم SSL عبر وحدة mod_ssl. في هذا الدليل، سنرى خطوة بخطوة كيفية تعريف شهادتك داخل VirtualHost وكيفية إعادة التوجيه من HTTP إلى HTTPS عبر .htaccess.

الملفات والوحدة المطلوبة

يتوقّع Apache أجزاء الشهادة عبر توجيهات منفصلة:

  • SSLCertificateFilecertificate.crt (شهادة الخادم)
  • SSLCertificateKeyFileprivate.key (المفتاح الخاص)
  • SSLCertificateChainFileca_bundle.crt (السلسلة الوسيطة)

إذا لم تكن تملك هذه الملفات، يمكنك التحقق من اسم نطاقك عبر معالج SSL المجاني لدينا وتنزيل هذه الملفات الثلاثة (وإن شئت ملف fullchain.pem الموحّد) من حزمة ZIP.

تأكد أولاً من تفعيل وحدة mod_ssl:

sudo a2enmod ssl
sudo systemctl restart apache2

الخطوة 1 — ضع الملفات في مكانها

sudo mkdir -p /etc/apache2/ssl/alanadiniz.com
sudo cp certificate.crt /etc/apache2/ssl/alanadiniz.com/
sudo cp private.key      /etc/apache2/ssl/alanadiniz.com/
sudo cp ca_bundle.crt    /etc/apache2/ssl/alanadiniz.com/
sudo chmod 600 /etc/apache2/ssl/alanadiniz.com/private.key

الخطوة 2 — اضبط VirtualHost

عرّف خادمًا افتراضيًا للمنفذ 443 (مثل /etc/apache2/sites-available/alanadiniz-ssl.conf):

<VirtualHost *:443>
    ServerName alanadiniz.com
    ServerAlias www.alanadiniz.com
    DocumentRoot /var/www/alanadiniz.com

    SSLEngine on
    SSLCertificateFile      /etc/apache2/ssl/alanadiniz.com/certificate.crt
    SSLCertificateKeyFile   /etc/apache2/ssl/alanadiniz.com/private.key
    SSLCertificateChainFile /etc/apache2/ssl/alanadiniz.com/ca_bundle.crt

    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1

    <Directory /var/www/alanadiniz.com>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

ملاحظة: في Apache 2.4.8 وما بعده، يصحّ أيضًا استخدام fullchain.pem الذي تُدمج فيه السلسلة الوسيطة مباشرةً ضمن SSLCertificateFile بدلاً من SSLCertificateChainFile.

صورة: <إعداد VirtualHost في Apache داخل محرر>
VirtualHost مُعدّ بتوجيهات SSL للمنفذ 443.

الخطوة 3 — فعّل الموقع واختبره

sudo a2ensite alanadiniz-ssl.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

يجب أن يُظهر ناتج configtest عبارة Syntax OK. في أنظمة RHEL/CentOS، يكون اسم الخدمة httpd والمجلد /etc/httpd/.

الخطوة 4 — إعادة التوجيه إلى HTTPS عبر .htaccess

أضف القاعدة التالية إلى ملف .htaccess في المجلد الجذري لموقعك. تنقل هذه القاعدة كل طلبات HTTP بشكل دائم (301) إلى HTTPS:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

تحقّق من عمل إعادة التوجيه من الطرفية:

curl -I http://alanadiniz.com

يجب أن ترى في الاستجابة سطري 301 Moved Permanently وLocation: https://....

المشكلات الشائعة

  • "AH02572: Failed to configure ... no private key": مسار SSLCertificateKeyFile خاطئ أو المفتاح تالف.
  • تحذير السلسلة في المتصفح: لم يُعرّف SSLCertificateChainFile؛ أضف ca_bundle.crt.
  • تجاهل ملف .htaccess: يجب أن يكون AllowOverride All معرّفًا في كتلة Directory المعنية.

الخلاصة

يقتصر SSL في Apache على أن تشير التوجيهات الثلاثة (SSLCertificateFile وSSLCertificateKeyFile وSSLCertificateChainFile) إلى الملفات الصحيحة، وعلى إعداد إعادة التوجيه 301 عبر .htaccess. يمكنك إنشاء ملفاتك عبر معالج SSL المجاني لدينا وتنزيلها من حزمة ZIP.