كيفية تثبيت شهادة Let’s Encrypt SSL لتأمين Apache على RHEL/CentOS 7/6

تمديد الدرس الأخير دليل تشفير Let’s Encrypt بخصوص شهادات SSL/TLS المجانية، في هذا المقال سنقوم بشرح كيفية الحصول على شهادات SSL/TLS المجانية وتثبيتها التي تصدرها سلطة تشفير Let’s Encrypt لخادم الويب Apache على توزيعات CentOS/RHEL 7/6 و Fedora أيضًا.

إذا كنت ترغب في تثبيت Let’s Encrypt لـ Apache على Debian و Ubuntu، اتبع الدليل أدناه:

إعداد Let’s Encrypt لتأمين Apache على Debian و Ubuntu

بيئة الاختبار
Install Lets Encrypt for Apache on CentOS and RHEL

المتطلبات

  1. A registered domain name with valid A records to point back to your server public IP Address.
  2. يجب أن يكون خادم Apache مثبتًا مع وحدة SSL ممكّنة وتمكين الاستضافة الافتراضية في حال كنت تستضيف نطاقات أو نطاقات فرعية متعددة.

الخطوة 1: تثبيت خادم الويب Apache

1. إذا لم يكن مثبتًا بالفعل، يمكن تثبيت خدمة httpd عبر إصدار الأمر التالي:

# yum install httpd

2. لضمان عمل برنامج Let’s Encrypt مع Apache، تأكد من تثبيت وحدة SSL/TLS عبر إصدار الأمر التالي:

# yum -y install mod_ssl

3. أخيرًا، قم بتشغيل خادم Apache بالأمر التالي:

# systemctl start httpd.service          [On RHEL/CentOS 7]
# service httpd start                    [On RHEL/CentOS 6]

الخطوة 2: تثبيت شهادة Let’s Encrypt SSL

٤. أبسط طريقة لتثبيت عميل Let’s Encrypt هي عن طريق استنساخ مستودع github في نظام الملفات الخاص بك. لتثبيت git على نظامك يجب عليك تمكين مستودعات Epel باستخدام الأمر التالي.

# yum install epel-release

٥. بمجرد أن يتم إضافة مستودعات Epel في نظامك، قم بتثبيت عميل git عن طريق تشغيل الأمر التالي:

# yum install git

٦. الآن، بمجرد أن تكون قد قمت بتثبيت جميع التبعيات المطلوبة للتعامل مع Let’s Encrypt، انتقل إلى الدليل /usr/local/ وابدأ في استحضار عميل Let’s Encrypt من مستودع github الرسمي باستخدام الأمر التالي:

# cd /usr/local/
# git clone https://github.com/letsencrypt/letsencrypt

الخطوة ٣: الحصول على شهادة SSL مجانية من Let’s Encrypt لـ Apache

٧. عملية الحصول على شهادة Let’s Encrypt مجانية لـ Apache مؤتمتة لـ CentOS/RHEL بفضل إضافة apache.

لنقم بتشغيل أمر النص البرمجي Let’s Encrypt للحصول على شهادة SSL. انتقل إلى دليل تثبيت Let’s Encrypt من /usr/local/letsencrypt وقم بتشغيل الأمر letsencrypt-auto عن طريق تقديم الخيار --apache والعلم -d لكل نطاق فرعي تحتاج إلى شهادة.

# cd /usr/local/letsencrypt
# ./letsencrypt-auto --apache -d your_domain.tld 
Create Lets Encrypt SSL Certificate for Apache

٨. قم بتقديم عنوان البريد الإلكتروني الذي سيتم استخدامه من قبل Let’s Encrypt لاستعادة مفتاحك المفقود أو للإشعارات العاجلة واضغط على Enter للمتابعة.

Add Email Address for Lets Encrypt

٩. وافق على شروط الترخيص عن طريق الضغط على مفتاح Enter.

Agree Lets Encrypt License

١٠. على CentOS/RHEL، بشكل افتراضي، لا يستخدم خادم Apache مفهوم فصل الدلائل للمضيفين الممكّنين عن المضيفين المتاحين (غير النشطين) كما تفعل توزيعات Debian.

أيضًا، يتم تعطيل الاستضافة الافتراضية بشكل افتراضي. البيان في Apache الذي يحدد اسم الخادم (ServerName) ليس موجودًا في ملف تكوين SSL.

لتنشيط هذا التوجيه، سيطلب منك Let’s Encrypt اختيار مضيف افتراضي. نظرًا لعدم وجود أي مضيف افتراضي متاح، حدد ملف ssl.conf ليتم تعديله تلقائيًا بواسطة عميل Let’s Encrypt واضغط Enter للمتابعة.

Active VirtualHost Directive and Select Mod_SSL

١١. بعد ذلك، اختر الطريقة Easy لطلبات HTTP واضغط Enter للمتابعة.

Allow Easy HTTP Requests

١٢. في النهاية، إذا كان كل شيء يسير بسلاسة، يجب عرض رسالة تهنئة على الشاشة. اضغط Enter لإطلاق البرومبت.

Lets Encrypt Enabled on Domain

هذا كل شيء! لقد قمت بنجاح بإصدار شهادة SSL/TLS لنطاقك. الآن يمكنك بدء تصفح موقع الويب الخاص بك باستخدام بروتوكول HTTPS.

الخطوة ٤: اختبار تشفير Let’s Encrypt المجاني على النطاق

١٣. من أجل اختبار استقامة توجيه SSL/TLS لنطاقك، قم بزيارة الرابط أدناه واختبر شهادتك على نطاقك.

https://www.ssllabs.com/ssltest/analyze.html
Verify Lets Encrypt Certificate on Domain

١٤. إذا تلقيت سلسلة من التقارير بشأن ثغرات نطاقك في الاختبارات التي أجريت، فعليك إصلاح تلك الثغرات الأمنية على وجه السرعة.

تصنيف C العام يجعل نطاقك غير آمن للغاية. لحل هذه المشاكل الأمنية، افتح ملف تكوين Apache SSL وقم بعمل التغييرات التالية:

# vi /etc/httpd/conf.d/ssl.conf

ابحث عن السطر الذي يحتوي على تعليمة SSLProtocol وأضف -SSLv3 في نهاية السطر.

Fix Apache SSL Configuration

انتقل أعمق في الملف، ابحث وقم بتعليق السطر الذي يحتوي على SSLCipherSuite عن طريق وضع علامة # أمامه وأضف المحتوى التالي تحت هذا السطر:

SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder     on
SSLOptions +StrictRequire
Configure SSL Configuration

15. بعد أن تقوم بجميع التغييرات السابقة، احفظ وأغلق الملف، ثم أعد تشغيل خدمة Apache لتطبيق التغييرات.

# systemctl restart httpd.service          [On RHEL/CentOS 7]
# service httpd restart                    [On RHEL/CentOS 6]

16. الآن، قم بفحص حالة تشفير نطاقك مرة أخرى، عن طريق زيارة نفس الرابط كما في الأعلى. لإجراء اختبارات مرة أخرى، اضغط على رابط مسح الذاكرة المؤقتة من الموقع.

https://www.ssllabs.com/ssltest/analyze.html 
Test Lets Encrypt SSL Certificate on Website

الآن يجب أن تحصل على تصنيف A العام، مما يعني أن نطاقك مؤمن للغاية.

الخطوة 4: تجديد تلقائي لشهادات Let’s Encrypt على Apache

17. هذا الإصدار التجريبي من برنامج Let’s Encrypt يصدر شهادات بتاريخ انتهاء صلاحيتها بعد 90 يومًا. لذلك، من أجل تجديد شهادة SSL، يجب عليك تنفيذ الأمر letsencrypt-auto مرة أخرى قبل تاريخ انتهاء الصلاحية، بنفس الخيارات والعلامات المستخدمة للحصول على الشهادة الأولية.

يتم تقديم مثال على كيفية تجديد الشهادة يدويًا أدناه.

# cd /usr/local/letsencrypt
# ./letsencrypt-auto certonly --apache --renew-by-default  -d your_domain.tld

١٨. لتتمكن من أتمتة هذه العملية، قم بإنشاء النص البرمجي التالي المقدم من github erikaheidi، في الدليل /usr/local/bin/ بالمحتوى التالي. (تم تعديل النص البرمجي قليلاً ليعكس دليل تثبيتنا لـ letsencrypt).

# vi /usr/local/bin/le-renew-centos

أضف المحتوى التالي إلى ملف le-renew-centos:

!/bin/bash

domain=$1
le_path='/usr/local/letsencrypt'
le_conf='/etc/letsencrypt'
exp_limit=30;

get_domain_list(){
        certdomain=$1
        config_file="$le_conf/renewal/$certdomain.conf"

        if [ ! -f $config_file ] ; then
                echo "[ERROR] The config file for the certificate $certdomain was not found."
                exit 1;
        fi

        domains=$(grep --only-matching --perl-regex "(?<=domains \= ).*" "${config_file}")
        last_char=$(echo "${domains}" | awk '{print substr($0,length,1)}')

        if [ "${last_char}" = "," ]; then
                domains=$(echo "${domains}" |awk '{print substr($0, 1, length-1)}')
        fi

        echo $domains;
}

if [ -z "$domain" ] ; then
        echo "[ERROR] you must provide the domain name for the certificate renewal."
        exit 1;
fi

cert_file="/etc/letsencrypt/live/$domain/fullchain.pem"

if [ ! -f $cert_file ]; then
        echo "[ERROR] certificate file not found for domain $domain."
        exit 1;
fi

exp=$(date -d "`openssl x509 -in $cert_file -text -noout|grep "Not After"|cut -c 25-`" +%s)
datenow=$(date -d "now" +%s)
days_exp=$(echo \( $exp - $datenow \) / 86400 |bc)

echo "Checking expiration date for $domain..."

if [ "$days_exp" -gt "$exp_limit" ] ; then
        echo "The certificate is up to date, no need for renewal ($days_exp days left)."
        exit 0;
else
        echo "The certificate for $domain is about to expire soon. Starting renewal request..."
        domain_list=$( get_domain_list $domain )
        "$le_path"/letsencrypt-auto certonly --apache --renew-by-default --domains "${domain_list}"
        echo "Restarting Apache..."
        /usr/bin/systemctl restart httpd
        echo "Renewal process finished for domain $domain"
        exit 0;
fi

١٩. قم بمنح صلاحيات التنفيذ للنص البرمجي، وقم بتثبيت حزمة bc وتشغيل النص البرمجي لاختباره. استخدم اسم النطاق الخاص بك كمعلمة موضعية للنص البرمجي. استخدم الأوامر التالية لإتمام هذه الخطوة:

# yum install bc
# chmod +x /usr/local/bin/le-renew-centos
# /usr/local/bin/le-renew-centos your_domain.tld

٢٠. وأخيرًا، باستخدام جدولة Linux، أضف وظيفة cron جديدة لتشغيل النص البرمجي كل شهرين، مضمنًا أن شهادتك ستُحدث قبل تاريخ انتهاء الصلاحية.

# crontab -e

أضف السطر التالي في نهاية الملف.

0 1 1 */2 * /usr/local/bin/le-renew-centos your_domain.tld >> /var/log/your_domain.tld-renew.log 2>&1

هذا كل شيء! خادم Apache الخاص بك الذي يعمل على نظام CentOS/RHEL الآن يقدم محتوى SSL باستخدام شهادة Let’s Encrypt SSL مجانية.

Source:
https://www.tecmint.com/install-lets-encrypt-ssl-certificate-to-secure-apache-on-rhel-centos/