Let's Encrypt DomainFactory

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


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

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

ssh -p <port> <user>@example.com

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

curl https://get.acme.sh | sh -s email=me@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 وتعطيل المطابقة التلقائية.:

python3 -c "import sys;print(sys.argv[1].encode('idna').decode())" hallöle.de
acme.sh --issue -d xn--hallle-zxa.de -d www.xn--hallle-zxa.de -w ~/public_html
export DEPLOY_CPANEL_AUTO_ENABLED='false'
acme.sh --deploy -d xn--hallle-zxa.de --deploy-hook cpanel_uapi

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

عودة