در این مقاله قصد داریم به آموزش نصب SSL با acme.sh بپردازیم. اگر در حال کانفیگ سرور لینوکس هستید و برای نصب گواهی SSL رایگان سراغ ابزار قدرتمند acme.sh رفتهاید، احتمالاً با یک ارور به شدت روی اعصاب مواجه شدهاید: خطای curl error 28 یا Timeout شدن درخواستها.
این خطا معمولاً به خاطر محدودیتهای شبکه (مخصوصاً در سرورهای ایران) و گیر کردن acme.sh روی سرور پیشفرضش یعنی ZeroSSL رخ میدهد. در این مقاله آموزشی از آکادمی کوکارو، قرار نیست وقت شما را با تعریف «SSL چیست» تلف کنیم! مستقیم میرویم سراغ اصل مطلب: نصب صفر تا صد SSL با acme.sh روی آپاچی (AlmaLinux/CentOS) و دور زدن قطعی خطای تحریم و تایماوت.

پیشنیازها: قبل از شروع کانفیگ
قبل از اینکه دست به ترمینال ببرید، این ۴ مورد را چک کنید:
۱. دسترسی ریشه: به سرور خود دسترسی root (یا sudo) داشته باشید.
۲. اتصال دامنه: دامنه شما باید دقیقاً به آیپی سرور اشاره کند (با دستور ping yourdomain.com مطمئن شوید که آیپی سرور پینگ میشود).
۳. وبسرور آپاچی: Apache باید نصب و فعال باشد و مسیر سایت شما مشخص باشد (مثلاً /var/www/[yourdomain.com/public_html](https://yourdomain.com/public_html)).
۴. پورتهای آزاد: پورتهای 80 (HTTP) و 443 (HTTPS) روی فایروال سرور شما باز باشند.
مراحل نصب SSL با acme.sh در لینوکس
مرحله ۱: نصب کلاینت acme.sh
اگر هنوز این ابزار را نصب نکردهاید، با اجرای یکی از دستورات زیر آن را مستقیم از مخزن اصلی دریافت و نصب کنید:
یا:
بعد از نصب، برای اینکه دستورات در همین سشن ترمینال فعال شوند، سورس را مجدداً لود کنید:
مرحله ۲: کلید طلایی! تغییر سرور به Let’s Encrypt
این دقیقاً همان مرحلهای است که ۹۰ درصد آموزشها جا میاندازند و باعث بروز خطای curl error: 28 میشوند. کلاینت acme.sh مدتی است که مرجع صدور پیشفرض خود را روی ZeroSSL قرار داده که در شبکههای ایران به شدت دچار اختلال است.
با این دستور صراحتاً سرور را به Let’s Encrypt تغییر دهید تا مشکل تایماوت برای همیشه حل شود:
مرحله ۳: دریافت گواهی (Issue Certificate)
حالا به acme.sh دستور میدهیم که یک فایل چالشی (Challenge) در روت سایت ما بسازد تا مالکیت دامنه را تأیید کند.
(توجه: در کدهای زیر، دامنه و مسیر public_html را با اطلاعات سایت خودتان جایگزین کنید).
اگر کانفیگ درست باشد، در خروجی ترمینال پیام سبز رنگ Cert success را به همراه مسیر ذخیرهسازی فایلها مشاهده خواهید کرد.

مرحله ۴: آمادهسازی پوشههای امن سیستمی
گواهیهای تولید شده بهطور پیشفرض در پوشه مخفی /root/.acme.sh/ ذخیره میشوند. برای اینکه وبسرور آپاچی بتواند بهصورت استاندارد و امن به آنها دسترسی داشته باشد، پوشههای زیر را میسازیم و پرمیشن امنیتی 700 را به کلید خصوصی میدهیم:
مرحله ۵: نصب و کپی گواهی در مسیر استاندارد
با اجرای دستور زیر، گواهیها را به پوشههای استانداردی که ساختیم کپی کرده و به acme.sh میگوییم بعد از هر بار تمدید، آپاچی را بهصورت خودکار ریلود کند:
مرحله ۶: تنظیم هاست مجازی (VirtualHost) آپاچی برای HTTPS
گواهی صادر شده است، اما آپاچی هنوز نمیداند چطور باید با پورت ۴۴۳ کار کند. باید فایل کانفیگ سایت را ویرایش کنیم.
یک فایل جدید در مسیر کانفیگهای آپاچی بسازید:
سپس کدهای زیر را درون آن قرار دهید (فراموش نکنید که ServerName و DocumentRoot را با دیتای سرور خودتان تغییر دهید):
مرحله ۷: تست و بارگذاری مجدد سرور
حالا که همهچیز تنظیم شده، یکبار آپاچی را ریلود کنید تا گواهیهای جدید را بخواند:
برای تست نهایی، میتوانید از دستور curl در ترمینال استفاده کنید. اگر خروجی شامل کدهای HTML سایتتان بود، یعنی SSL با موفقیت فعال شده است:
مرحله ۸: فورس ریدایرکت HTTP به HTTPS
برای اینکه تمام ورودیهای سایت بهصورت خودکار و ایمن به نسخه https منتقل شوند، قطعه کد زیر را در انتهای فایل .htaccess که در ریشه سایتتان قرار دارد وارد کنید:
مرحله ۹: اطمینان از تمدید خودکار (Auto-Renewal)
گواهیهای Let’s Encrypt فقط ۹۰ روز اعتبار دارند. ابزار acme.sh معمولاً خودش یک کرونجاب (Cron Job) برای تمدید خودکار تنظیم میکند. برای اطمینان از وجود آن دستور زیر را بزنید:
اگر خروجی خالی بود و کرونجاب ست نشده بود، با این دستور آن را فعال کنید:
جدول عیبیابی سریع خطاهای acme.sh و آپاچی
اگر در هر یک از مراحل بالا به بنبست خوردید، نگاهی به این جدول بیندازید:
| خطای مشاهده شده در ترمینال | علت مشکل | راهحل سریع |
curl error: 28 | عدم دسترسی به سرور ZeroSSL به دلیل تحریم یا اختلال شبکه. | طبق مرحله ۲، سرور دیفالت را به letsencrypt تغییر دهید. |
No such file or directory | پوشه /etc/ssl/private/ در سرور شما وجود ندارد. | طبق مرحله ۴ پوشه را بسازید و سطح دسترسی 700 به آن بدهید. |
SSLEngine not allowed here | ماژول mod_ssl روی آپاچی سرور شما نصب یا فعال نیست. | با دستور yum install mod_ssl آن را نصب و آپاچی را ریاستارت کنید. |
| نمایش صفحه پیشفرض آپاچی (Test Page) | کانفیگ VirtualHost یا مسیر DocumentRoot اشتباه ست شده است. | مسیر DocumentRoot در مرحله ۶ را دقیقاً با ریشه سایت خود (محل فایل index.php) تطبیق دهید. |
سخن پایانی کانفیگ سرورهای لینوکسی و نصب SSL با acme.sh همیشه پر از چالشهای ریز و درشت است. با استفاده از این روش، بدون نیاز به نصب پنلهای سنگین مدیریتی، امنیت سایت خود را با یک کلاینت سبک تضمین کردهاید. اگر در طول نصب با ارور جدیدی برخورد کردید که در جدول بالا نبود، ارور را در بخش نظرات همین صفحه کامنت کنید تا با هم آن را بررسی کنیم.
راستی اگر SSL خودتون رو از ابرآروان گرفتید و در ادامه با ارور ۵۰۲ مواجه شدید، [مقالهی آموزش حل خطای ۵۰۲ ابرآروان و مشکل قطعی SSL] را حتماً مشاهده کنید.