Let's Encrypt DomainFactory

بعض باقات الاستضافة المشتركة المزودة بلوحة تحكم cPanel لا توفر خاصية AutoSSL ، أو أنها متوفرة فقط في الباقات الأعلى سعرًا. ونتيجةً لذلك، لا يمكنك إصدار شهادة Let's Encrypt مجانية عبر واجهة cPanel، وستبقى جميع النطاقات مُقيدة بشهادة موقعة ذاتيًا . يعرض المتصفح الصفحة على أنها "غير آمنة". الحل: احصل على الشهادة بنفسك باستخدام acme.sh وقم بتثبيتها عبر واجهة برمجة تطبيقات المستخدم (UAPI) الخاصة بـ cPanel. سيتم تجديدها تلقائيًا، دون الحاجة إلى AutoSSL.


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

1. تسجيل الدخول عبر SSH

ssh -p <port> <cpanel-user>@<host>

2. قم بتثبيت acme.sh

curl https://get.acme.sh | sh -s email=du@example.com
source ~/.bashrc

3. تعيين Let's Encrypt كجهة إصدار الشهادات

acme.sh --set-default-ca --server letsencrypt

4. إصدار الشهادة

acme.sh --issue -d example.com -d www.example.com -w ~/public_html

5. التثبيت في لوحة التحكم cPanel

acme.sh --deploy -d example.com --deploy-hook cpanel_uapi

6. تحقق

uapi SSL installed_hosts
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null \
     | openssl x509 -noout -issuer -dates

يقوم البرنامج بكتابة الشهادة إلى المضيف الافتراضي المناسب عبر واجهة برمجة تطبيقات المستخدم (UAPI). يتم حفظ إعدادات النشر، ومن الآن فصاعدًا، سيقوم برنامج cron بتجديد كل شيء وتثبيته تلقائيًا قبل انتهاء صلاحيته. يجب أن تكون جهة الإصدار "Let's Encrypt"، ويجب أن يكون تاريخ انتهاء الصلاحية بعد حوالي 90 يومًا. إذا استمرت الشهادة القديمة الموقعة ذاتيًا في الظهور، فعادةً ما يُفيد إعادة تحميل الصفحة بالكامل في المتصفح، حيث قد تكون الشهادة السابقة مخزنة مؤقتًا.

بعض شركات الاستضافة تدير خطاف cPanel الخاص بها. install_ssl ويرد بشيء من هذا القبيل adminbin Cpanel/hooks2/...: exit 255. لا يزال موقع acme.sh يُشير إلى "نجاح عملية النشر" - وهذا صحيح في الغالب. في هذه الحالة، يفشل الربط بسبب خطوة لاحقة - مثل إشعار داخلي أو مهمة مزامنة من قِبل مزود الاستضافة - وليس بسبب عملية التثبيت نفسها.

بالنسبة للنطاقات التي تحتوي على أحرف umlauts، يقوم acme.sh بتخزين الشهادة داخليًا بصيغة Punycode (xn--…بينما يقوم مُطابق الخطاف التلقائي بمقارنة صيغة Unicode، تظهر النتيجة: "تم النشر على 0 من 0 مواقع" - لم يتم تثبيت أي شيء. المشكلة تكمن في أن acme.sh يُبلغ أيضًا عن "نجاح" هنا، مما يجعل الخطأ سهل التغاضي عنه. الحل: التعامل مباشرةً مع نطاق Punycode وتعطيل المطابقة التلقائية.:

# Punycode-Form der Domain vorher ermitteln (z. B. via idn-Tool oder Online-Konverter)
acme.sh --issue -d xn--<punycode> -d www.xn--<punycode> -w ~/public_html
export DEPLOY_CPANEL_AUTO_ENABLED='false'
acme.sh --deploy -d xn--<punycode> --deploy-hook cpanel_uapi

مع إمكانية الوصول عبر SSH، لست بحاجة إلى AutoSSL: يقوم acme.sh بإصدار الشهادة، والتي cpanel_uapiيقوم برنامج -Hook بتثبيته، وتُبقي مهمة cron المرفقة عليه مُحدّثًا تلقائيًا. بمجرد الإعداد، تعمل خدمة HTTPS المجانية باستمرار دون أي تدخل. أولئك الذين يبذلون الجهد الأولي يوفرون على أنفسهم عناء التجديد اليدوي في المستقبل، ويمكنهم توسيع نطاق الحل نفسه ليشمل أي نطاق إضافي في نفس الحساب بأمر واحد.

عودة