برخی از بستههای میزبانی اشتراکی با cPanel، AutoSSL را ارائه نمیدهند، یا فقط در پلنهای گرانتر ارائه میدهند. در نتیجه، شما نمیتوانید از طریق رابط cPanel یک گواهی Let’s Encrypt رایگان صادر کنید، و همه دامنهها به یک گواهی خودامضا (self-signed) محدود میشوند. مرورگر صفحه را به عنوان "امن نیست" نمایش میدهد. راه حل: خودتان گواهی را با استفاده از acme.sh دریافت کنید و آن را از طریق cPanel UAPI نصب کنید - که به طور خودکار و کاملاً بدون AutoSSL تمدید میشود.
HTTPS مدتهاست که اجباری بوده است. وقتی بسته میزبانی وب شما راهی مناسب برای دریافت گواهی رایگان ارائه نمیدهد، ناامیدکنندهتر هم میشود. این اتفاق بیشتر از آنچه فکر میکنید رخ میدهد، به عنوان مثال با بستههای ارزان قیمت سطح مبتدی یا پس از تغییر برنامه که ناگهان دیگر گواهی در آن گنجانده نمیشود. با این حال، این شکاف را میتوان به زیبایی و به طور دائم تنها با چند خط کد در پوسته پر کرد - فرآیند کامل در زیر شرح داده شده است.
۱. از طریق SSH وارد شوید
ssh -p <port> <user>@example.com
۲. acme.sh را نصب کنید
curl https://get.acme.sh | sh -s email=me@example.com
source ~/.bashrc
۳. Let’s Encrypt را به عنوان CA تنظیم کنید
acme.sh --set-default-ca --server letsencrypt
۴. صدور گواهی
acme.sh --issue -d example.com -d www.example.com -w ~/public_html
۵. نصب در سیپنل
acme.sh --deploy -d example.com --deploy-hook cpanel_uapi
۶. بررسی کنید
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 hook مخصوص به خود را اجرا میکنند. install_ssl و با چیزی شبیه به این پاسخ میدهد adminbin Cpanel/hooks2/...: exit 255. acme.sh همچنان گزارش میدهد که «با موفقیت مستقر شده است» - و این درست است. در این حالت، قلاب به دلیل مرحله بعدی (مانند یک اعلان داخلی یا کار همگامسازی توسط ارائهدهنده خدمات میزبانی) از کار میافتد، نه نصب واقعی.
برای دامنههایی که دارای umlaut هستند، acme.sh گواهی را به صورت داخلی در قالب Punycode ذخیره میکند (xn--…)، در حالی که تطبیقدهنده خودکار هوک، فرم یونیکد را مقایسه میکند. نتیجه: "deployed to 0 of 0 sites" - هیچ چیزی نصب نشده است. نکتهی موذیانه این است که acme.sh در اینجا "Success" را نیز گزارش میدهد، بنابراین خطا به راحتی نادیده گرفته میشود. راه حل: مستقیماً با دامنه 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 job موجود، آن را به طور خودکار بهروزرسانی میکند. پس از راهاندازی، سرویس HTTPS رایگان به طور مداوم به صورت خودکار اجرا میشود. کسانی که تلاش اولیه را انجام میدهند، در آینده از هرگونه تمدید دستی جلوگیری میکنند - و میتوانند همین راهکار را با یک دستور واحد به هر دامنه اضافی در همان حساب کاربری گسترش دهند.