SSL و امنیت
رفع صادر نشدن AutoSSL cPanel و خطای DCV
AutoSSL cPanel قبل از صدور گواهی باید ثابت کند دامنه واقعا مال همین سرور است، و این مرحله را DCV می نامند. وقتی گواهی صادر نمی شود، تقریبا همیشه DCV رد شده است، و علتش را در بخش SSL/TLS Status یا لاگ AutoSSL می بینید.
اگر AutoSSL cPanel برای دامنه شما گواهی صادر نمی کند یا گواهی در حال انقضا را تمدید نمی کند، سریع ترین راه این است که در cPanel به SSL/TLS Status بروید و پیام کنار دامنه را بخوانید. در بیشتر موارد مشکل یکی از این هاست: رکورد DNS دامنه به این سرور اشاره نمی کند، فایل اعتبارسنجی در مسیر .well-known بسته شده یا یک ریدایرکت، فایروال یا رکورد CAA جلوی سازمان صادرکننده را می گیرد. هر کدام را با یک دستور می توانید تست کنید.
AutoSSL چطور گواهی می گیرد و DCV چیست
AutoSSL روزانه دامنه های حساب را بررسی می کند. برای هر دامنه که گواهی معتبر ندارد یا گواهی اش نزدیک انقضاست، از سازمان صادرکننده گواهی می خواهد. صادرکننده پیش از صدور باید مطمئن شود دامنه زیر کنترل درخواست دهنده است. به این مرحله Domain Control Validation یا DCV می گویند و دو شکل رایج دارد:
- HTTP DCV: سرور یک فایل متنی در مسیر
public_html/.well-known/pki-validation/می گذارد و صادرکننده آن را از روی اینترنت و با آدرس دامنه می خواند. - DNS DCV: اگر DNS دامنه روی همین سرور باشد، AutoSSL یک رکورد موقت در zone می نویسد. این روش برای دامنه هایی است که به هاست اشاره نمی کنند یا برای گواهی wildcard.
پس برای صدور موفق، دامنه باید در اینترنت به همین سرور برسد و آدرس اعتبارسنجی بدون مانع باز شود. سازمان صادرکننده پیش فرض در cPanel معمولا Sectigo است و روی بعضی سرورها افزونه Let's Encrypt هم فعال شده است. اینکه کدام فعال است را میزبان تعیین می کند و روی هاست اشتراکی قابل تغییر نیست.
اول وضعیت را ببینید و AutoSSL را دستی اجرا کنید
- وارد cPanel شوید و بخش SSL/TLS Status را باز کنید.
- کنار هر دامنه و زیر دامنه نوع گواهی و تاریخ انقضا را می بینید. دامنه ای که قفل قرمز یا هشدار دارد همان است که مشکل دارد.
- دکمه Run AutoSSL را بزنید. اجرا چند دقیقه طول می کشد.
- بعد از اجرا دوباره صفحه را باز کنید. اگر دامنه ای رد شده باشد، علت به شکل پیام DCV کنار آن نوشته می شود.
اگر VPS یا حساب reseller دارید و به WHM دسترسی دارید، از SSL/TLS، بخش Manage AutoSSL، زبانه Logs لاگ کامل هر اجرا را می بینید. از خط فرمان root هم برای یک حساب این دستور هست:
/usr/local/cpanel/bin/autossl_check --user=USERNAME
روی هاست اشتراکی به لاگ WHM دسترسی ندارید. پیام SSL/TLS Status را کپی کنید و در تیکت برای پشتیبانی بفرستید.
علت ها به ترتیب شیوع
رکورد DNS به این سرور اشاره نمی کند
شایع ترین علت. دامنه تازه ثبت شده، رکورد A هنوز به هاست قبلی اشاره می کند یا تغییر رکورد هنوز منتشر نشده است. چک کنید:
dig +short A example.com
dig +short A www.example.com
dig +short AAAA example.com
خروجی A باید IP همین هاست باشد. آن را در بخش General Information صفحه اصلی cPanel می بینید. به رکورد AAAA هم دقت کنید. اگر دامنه رکورد IPv6 دارد که به جای دیگری اشاره می کند، اعتبارسنجی از طریق IPv6 هم می رود و رد می شود. رکورد AAAA اضافی را در Zone Editor پاک کنید یا آن را درست کنید.
وقتی دامنه پشت Cloudflare است و پروکسی (ابر نارنجی) روشن است، خروجی dig IP خود Cloudflare را نشان می دهد. این به تنهایی خطا نیست، ولی رفتار AutoSSL با دامنه های پشت پروکسی به نسخه cPanel و تنظیمات Cloudflare بستگی دارد. اگر DCV رد شد، پروکسی را چند دقیقه خاکستری کنید، AutoSSL را اجرا کنید و دوباره روشن کنید.
مسیر .well-known بسته است
سه حالت دیده می شود. اول، ریدایرکت در .htaccess همه درخواست ها را، از جمله درخواست اعتبارسنجی را، به آدرس دیگر می برد. دوم، قانونی مثل Require all denied یا افزونه امنیتی وردپرس مسیر پوشه های مخفی را می بندد. سوم، پوشه .well-known یا pki-validation با مالک یا مجوز اشتباه ساخته شده است. با یک فایل آزمایشی بررسی کنید. در File Manager مسیر public_html/.well-known/pki-validation/ را بسازید و فایلی به نام test.txt با یک خط متن بگذارید. بعد:
curl -I http://example.com/.well-known/pki-validation/test.txt
باید 200 بگیرید. اگر 403 یا 404 آمد یا آدرس به دامنه دیگری ریدایرکت شد، .htaccess را بررسی کنید. ریدایرکت از http به https روی همان دامنه معمولا مشکل ایجاد نمی کند، ولی استثنا گذاشتن برای این مسیر امن ترین حالت است:
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/
این دو خط را بالای قانون ریدایرکت اصلی بگذارید. قبل از هر تغییر در .htaccess یک نسخه از آن بردارید.
رکورد CAA سازمان صادرکننده را نمی پذیرد
اگر دامنه رکورد CAA دارد، فقط سازمان های نام برده شده می توانند گواهی بدهند. با این دستور ببینید:
dig +short CAA example.com
خروجی خالی یعنی محدودیتی نیست. اگر رکورد هست و سازمان صادرکننده AutoSSL سرور شما را ندارد، یک رکورد CAA برای آن اضافه کنید یا رکورد را بردارید. نام سازمان صادرکننده را از پشتیبانی هاست بپرسید، چون روی هر سرور فرق می کند.
فایروال، ModSecurity یا مسدودسازی بر اساس کشور
سرورها و Cloudflare گاهی درخواست های خارجی یا ربات مانند را رد می کنند. درخواست اعتبارسنجی از سرورهای سازمان صادرکننده در خارج از ایران می آید. اگر برای دامنه قانونی دارید که فقط ترافیک ایران را قبول می کند، یا ModSecurity، Imunify360 یا یک قانون Cloudflare آن را مسدود کرده، DCV رد می شود. قانون محدودیت کشوری را برای مسیر /.well-known/ استثنا کنید. روی هاست اشتراکی از پشتیبانی بخواهید لاگ فایروال را برای مسیر اعتبارسنجی نگاه کند.
دامنه تازه اضافه شده یا زیر دامنه
برای دامنه یا زیر دامنه ای که همین الان در cPanel ساخته اید، AutoSSL باید یک بار اجرا شود تا آن را ببیند و گواهی اش را بگیرد. چند دقیقه بعد از ساخت Run AutoSSL را بزنید. در دامنه ای که رکورد www ندارد، AutoSSL معمولا www را رد می کند و فقط برای اسم های دیگر گواهی می گیرد. بنابراین رکورد www را هم بسازید تا گواهی نام www را هم بپوشاند.
محدودیت تعداد درخواست صادرکننده
سازمان صادرکننده در بازه زمانی مشخص تعداد گواهی صادرشده برای یک دامنه را محدود می کند. اگر پشت سر هم چند بار AutoSSL را اجرا کرده اید یا دامنه را بارها حذف و اضافه کرده اید، ممکن است پیام rate limit ببینید. عدد دقیق را در صفحه محدودیت های Let's Encrypt ببینید و برای Sectigo از میزبان بپرسید. تنها راه حل صبر کردن است.
هر بار Run AutoSSL را بزنید یک درخواست جدید به صادرکننده می رود. بعد از رد شدن DCV اول علت را برطرف کنید و بعد دوباره اجرا کنید. اجرای پی در پی بدون رفع علت فقط به محدودیت تعداد درخواست می رسد و وضعیت را بدتر می کند.
خلاصه خطاها در یک جدول
| نشانه | علت محتمل | چک |
|---|---|---|
| DCV برای دامنه رد شد، IP نادرست | رکورد A یا AAAA به سرور دیگر اشاره می کند | dig +short A و AAAA |
| پاسخ 403 یا 404 برای فایل اعتبارسنجی | قانون .htaccess یا افزونه امنیتی | curl -I روی مسیر آزمایشی |
| ریدایرکت به دامنه دیگر | قانون ریدایرکت بدون استثنا برای .well-known | curl -IL روی آدرس |
| خطای CAA | رکورد CAA سازمان صادرکننده را نمی پذیرد | dig +short CAA |
| timeout یا قطع اتصال | فایروال یا مسدودسازی کشوری | لاگ فایروال یا قانون Cloudflare |
| rate limit | تعداد درخواست بیش از حد | صبر کنید |
بعد از رفع علت چطور مطمئن شویم
بعد از رفع علت، Run AutoSSL را یک بار بزنید و صبر کنید. تاریخ انقضای تازه کنار دامنه در SSL/TLS Status باید ثبت شود. بعد آدرس را در مرورگر با https باز کنید و روی قفل بزنید. اگر هنوز خطای your connection is not private می بینید، نام دامنه یا زنجیره گواهی را بررسی کنید. اگر بعد از نصب گواهی صفحه بی نهایت ریدایرکت می شود، رفع ERR_TOO_MANY_REDIRECTS را بخوانید. برای دستور درست ریدایرکت http به https هم راهنمای htaccess ریدایرکت HTTPS و www را ببینید.
اگر سرور VPS دارید و AutoSSL ندارید یا گواهی را مستقیم روی Nginx و Apache می گیرید، نصب Let's Encrypt با Certbot روش جایگزین است. مستندات رسمی cPanel درباره AutoSSL در docs.cpanel.net هست. هاست های cPanel پیکوهاست SSL رایگان با AutoSSL دارند و اگر همه چک ها درست بود ولی گواهی صادر نشد، تیکت بزنید تا لاگ سرور بررسی شود.