- وقتی گواهی SSL منقضی شود، کروم خطای Your connection is not private با کد NET::ERR_CERT_DATE_INVALID نشان میدهد و تقریباً هیچ بازدیدکنندهای وارد سایت نمیشود.
- Let's Encrypt عمر گواهیها را از ۹۰ روز به ۶۴ روز در فوریه ۲۰۲۷ و ۴۵ روز در فوریه ۲۰۲۸ میرساند، پس تمدید گواهی SSL چند بار در سال تکرار میشود.
- رایجترین علتهای شکست تمدید خودکار گواهی SSL تغییر DNS یا CDN، بسته بودن پورت ۸۰، اختلال اینترنت بینالملل و بارگذاری نشدن وبسرور بعد از تمدید هستند.
تا چند سال پیش گواهی SSL را سالی یک بار تمدید میکردند و اگر یادشان میرفت، سالی یک بار به دردسر میافتادند. این دوره تمام شده است. Let’s Encrypt که بیشتر سایتهای ایرانی از گواهی رایگان آن استفاده میکنند، عمر گواهیهایش را از ۹۰ روز به ۴۵ روز میرساند و سقف عمر گواهیهای پولی هم از سال ۲۰۲۶ کم شدن را شروع کرده است. یعنی تمدید گواهی SSL چند بار در سال تکرار میشود و هر بار ممکن است خطا بدهد.
در این مقاله توضیح میدهیم وقتی گواهی SSL منقضی میشود چه اتفاقی برای سایت میافتد، چرا تمدید خودکار گواهی گاهی بیصدا شکست میخورد، تاریخ انقضا را چطور ببینید و چطور جلوی منقضی شدن گواهی SSL را بگیرید.
#گواهی SSL چیست و چرا منقضی میشود؟
گواهی SSL فایلی است که هویت سایت را تأیید میکند و باعث میشود ارتباط مرورگر با سایت از طریق HTTPS رمزنگاری شود. هر گواهی SSL تاریخ شروع و پایان اعتبار دارد و بعد از تاریخ پایان، مرورگرها دیگر آن را قبول نمیکنند. کوتاه بودن عمر گواهی عمدی است: اگر کلید یک گواهی لو برود، گواهی کوتاهمدت زودتر از کار میافتد.
عمر گواهیها هر سال کوتاهتر میشود. طبق مصوبه CA/Browser Forum، حداکثر عمر گواهی SSL از مارس ۲۰۲۶ کم شدن را شروع کرده و تا مارس ۲۰۲۹ از ۳۹۸ روز به ۴۷ روز میرسد. Let’s Encrypt هم طبق اعلام رسمی خود این برنامه را دارد:
| تاریخ | عمر پیشفرض گواهی Let’s Encrypt |
|---|---|
| تا بهمن ۱۴۰۵ (فوریه ۲۰۲۷) | ۹۰ روز |
| از ۲۱ بهمن ۱۴۰۵ (۱۰ فوریه ۲۰۲۷) | ۶۴ روز |
| از ۲۷ بهمن ۱۴۰۶ (۱۶ فوریه ۲۰۲۸) | ۴۵ روز |
#وقتی گواهی SSL منقضی شود چه اتفاقی میافتد؟
وقتی گواهی SSL منقضی شود، مرورگر به جای سایت یک صفحه هشدار تمامصفحه نشان میدهد و بازدیدکننده را از ادامه دادن منع میکند. سایت از نظر فنی روشن است و سرور جواب میدهد، اما تقریباً هیچکس از صفحه هشدار رد نمیشود. این هشدار در مرورگرهای مختلف اینطور دیده میشود:
- کروم و Edge: عبارت Your connection is not private با کد خطای NET::ERR_CERT_DATE_INVALID.
- فایرفاکس: عبارت Warning: Potential Security Risk Ahead با کد SEC_ERROR_EXPIRED_CERTIFICATE.
- سافاری: عبارت This Connection Is Not Private.
اثر منقضی شدن گواهی SSL فقط به صفحه هشدار ختم نمیشود. برگشت مشتری از درگاه بانک به صفحه تأیید سفارش با همان هشدار روبهرو میشود و ممکن است پرداخت موفق ثبت نشود. اپلیکیشن موبایلی که با API سایت کار میکند، بهکلی از کار میافتد. ربات گوگل هم صفحهها را با خطا میبیند. برای همین گواهی SSL منقضیشده از نظر مشتری فرقی با قطعی کامل سایت ندارد.
#چرا تمدید خودکار گواهی SSL شکست میخورد؟
تمدید خودکار گواهی SSL معمولاً به این دلیل شکست میخورد که چیزی در سرور یا دامنه بعد از صدور گواهی عوض شده است. ابزار Certbot طبق مستندات خود وقتی کمتر از یکسوم عمر گواهی باقی مانده باشد آن را تمدید میکند، یعنی برای گواهی ۹۰ روزه حدود ۳۰ روز قبل از انقضا. اگر در این ۳۰ روز تمدید هر بار خطا بدهد، هیچکس خبردار نمیشود تا روزی که گواهی منقضی شود. رایجترین علتها اینهاست:
#۱. DNS یا CDN سایت عوض شده است
Let’s Encrypt برای تمدید گواهی، مالکیت دامنه را دوباره بررسی میکند. اگر سایت را پشت CDN بردهاید یا DNS را به سرور دیگری منتقل کردهاید، درخواست بررسی به سرور شما نمیرسد و تمدید شکست میخورد. در این حالت یا باید گواهی را در خود CDN فعال کنید یا روش بررسی را به DNS تغییر دهید.
#۲. پورت ۸۰ یا فایروال بسته است
روش رایج بررسی مالکیت دامنه از پورت ۸۰ و آدرس /.well-known/acme-challenge/ انجام میشود. اگر بعد از راهاندازی، پورت ۸۰ را بسته باشید، قانون فایروال جدیدی اضافه کرده باشید یا افزونه امنیتی وردپرس این مسیر را مسدود کند، تمدید انجام نمیشود.
#۳. اینترنت بینالملل قطع یا مختل بوده است
سرورهای Let’s Encrypt خارج از ایران هستند. اگر زمان تمدید خودکار با قطعی یا اختلال اینترنت بینالملل همزمان شود، سرور شما نمیتواند با Let’s Encrypt ارتباط بگیرد و Let’s Encrypt هم نمیتواند مالکیت دامنه را بررسی کند. اگر اختلال طولانی شود، گواهی سایتهایی که روی سرور داخل ایران هستند ممکن است منقضی شود. در مقاله قطعی اینترنت بینالملل و سایتهای داخلی اثرهای دیگر این وضعیت را توضیح دادهایم.
#۴. گواهی تمدید شده اما وبسرور آن را نخوانده است
گاهی تمدید با موفقیت انجام میشود، اما Nginx یا آپاچی بعد از تمدید دوباره بارگذاری نشده و هنوز گواهی قدیمی را به مرورگرها نشان میدهد. در این حالت فایل گواهی روی سرور جدید است و سایت با گواهی منقضیشده بالا میآید.
#۵. گواهی پولی است و کسی یادش نبوده
گواهیهای پولی معمولاً تمدید خودکار ندارند. فردی که گواهی را خریده ممکن است دیگر در شرکت نباشد یا ایمیل یادآوری به صندوقی برود که کسی آن را نمیخواند. با کوتاه شدن عمر گواهیهای پولی، این مشکل هم بیشتر تکرار میشود.
#جدول عیبیابی منقضی شدن گواهی SSL
| علت | نشانه | راهحل |
|---|---|---|
| تغییر DNS یا CDN | خطای بررسی دامنه در گزارش Certbot | فعال کردن گواهی در CDN یا بررسی از طریق DNS |
| پورت ۸۰ یا فایروال بسته | خطای Timeout یا Connection refused هنگام تمدید | باز کردن پورت ۸۰ برای مسیر acme-challenge |
| اختلال اینترنت بینالملل | تمدید در همان روزهای اختلال شکست خورده است | اجرای دستی تمدید بعد از برقراری ارتباط |
| بارگذاری نشدن وبسرور | فایل گواهی جدید است اما مرورگر گواهی قدیمی را میبیند | بارگذاری دوباره Nginx یا آپاچی بعد از هر تمدید |
| گواهی پولی | تمدید خودکار وجود ندارد | یادآوری تقویمی و مانیتورینگ تاریخ انقضا |
#تاریخ انقضای گواهی SSL را چطور ببینیم؟
تاریخ انقضای گواهی SSL را میتوانید از مرورگر یا با یک دستور روی سرور ببینید:
- از مرورگر: روی نماد کنار آدرس سایت کلیک کنید، بخش امنیت اتصال و بعد گواهی را باز کنید. تاریخ پایان اعتبار در بخش Validity یا Expires on آمده است.
- با openssl: دستور
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddateتاریخ انقضای گواهیای را که سرور واقعاً به مرورگرها نشان میدهد چاپ میکند. - با Certbot: دستور
certbot certificatesهمه گواهیهای سرور و تعداد روزهای باقیمانده را نشان میدهد وcertbot renew --dry-runبدون تمدید واقعی امتحان میکند که تمدید بعدی موفق میشود یا نه.
#اگر گواهی SSL منقضی شد چه کنیم؟
- تمدید دستی را اجرا کنید. روی سرور خودتان
certbot renewرا بزنید و پیام خطای آن را بخوانید. در هاست اشتراکی از بخش SSL کنترلپنل گواهی را دوباره صادر کنید. - علت شکست را برطرف کنید. با جدول بالا علت را پیدا کنید، وگرنه دفعه بعد هم تمدید خودکار شکست میخورد.
- وبسرور را دوباره بارگذاری کنید. مثلاً با
systemctl reload nginx. - نتیجه را از بیرون بررسی کنید. سایت را در یک پنجره ناشناس باز کنید و تاریخ گواهی را با openssl دوباره ببینید.
تمدید خودکار گواهی SSL وقتی شکست میخورد، معمولاً هیچ پیامی به صاحب سایت نمیدهد. تنها راه مطمئن این است که تاریخ انقضای گواهی را از بیرون سرور زیر نظر بگیرید.
#چطور جلوی منقضی شدن گواهی SSL را بگیریم؟
- تمدید خودکار را فعال کنید و هر بار بعد از تغییر DNS، CDN یا فایروال با
certbot renew --dry-runامتحانش کنید. - یک دستور بارگذاری دوباره وبسرور به تنظیمات تمدید اضافه کنید تا گواهی جدید همان لحظه استفاده شود.
- برای گواهی پولی، تاریخ انقضا را در تقویم تیم ثبت کنید و ایمیل یادآوری را به آدرسی بدهید که همیشه خوانده میشود.
- تاریخ انقضای گواهی SSL را با یک ابزار مانیتورینگ سایت از بیرون سرور بررسی کنید تا اگر تمدید شکست خورد، قبل از انقضا خبردار شوید.
#مانیتورینگ گواهی SSL با بینا
بینا، سرویس مانیتورینگ سایت، هر روز گواهی SSL سایت شما را از بیرون بررسی میکند، همان گواهیای که مرورگر بازدیدکنندهها میبیند. اگر کمتر از ۱۴ روز به انقضای گواهی مانده باشد، بینا در تلگرام، پیامک یا ایمیل هشدار میدهد: «گواهی SSL سایت تمدید نشده است و بهزودی منقضی میشود».
عدد ۱۴ روز عمدی است. تمدید خودکار معمولاً حدود ۳۰ روز قبل از انقضا انجام میشود، پس گواهیای که ۱۴ روز به انقضایش مانده یعنی تمدید خودکار حدود دو هفته است شکست میخورد. این هشدار به شما دو هفته فرصت میدهد که علت را پیدا کنید. بعد از تمدید هم بینا خبر میدهد که گواهی SSL سایت تمدید شد.
#جمعبندی
وقتی گواهی SSL منقضی شود، مرورگرها به جای سایت صفحه هشدار نشان میدهند و از نظر مشتری سایت از کار افتاده است. با کوتاه شدن عمر گواهیها تا ۴۵ و ۴۷ روز، تمدید چند بار در سال تکرار میشود و هر بار ممکن است به دلیل تغییر DNS، بسته بودن پورت ۸۰، اختلال اینترنت بینالملل یا بارگذاری نشدن وبسرور شکست بخورد.
تمدید خودکار را فعال و امتحان کنید، بعد از هر تمدید وبسرور را دوباره بارگذاری کنید و تاریخ انقضای گواهی SSL را از بیرون سرور زیر نظر بگیرید تا شکست تمدید را قبل از مشتریها ببینید.
پرسشهای متداول
اگر گواهی SSL منقضی شود چه اتفاقی میافتد؟
اگر گواهی SSL منقضی شود، مرورگرها به جای سایت یک صفحه هشدار تمامصفحه نشان میدهند، برگشت از درگاه پرداخت ممکن است خطا بدهد و اپلیکیشنهایی که با API سایت کار میکنند از کار میافتند.
خطای NET::ERR_CERT_DATE_INVALID یعنی چه؟
خطای NET::ERR_CERT_DATE_INVALID یعنی تاریخ گواهی SSL سایت معتبر نیست. رایجترین علت آن منقضی شدن گواهی است و گاهی هم تاریخ و ساعت اشتباه دستگاه کاربر باعث آن میشود.
گواهی SSL Let's Encrypt چند روز اعتبار دارد؟
گواهی SSL Let's Encrypt الان ۹۰ روز اعتبار دارد. طبق برنامه Let's Encrypt، عمر پیشفرض در فوریه ۲۰۲۷ به ۶۴ روز و در فوریه ۲۰۲۸ به ۴۵ روز میرسد.
چرا تمدید خودکار گواهی SSL انجام نشد؟
تمدید خودکار گواهی SSL معمولاً به دلیل تغییر DNS یا CDN، بسته بودن پورت ۸۰، قطعی اینترنت بینالملل یا بارگذاری نشدن وبسرور بعد از تمدید انجام نمیشود.
تاریخ انقضای گواهی SSL را چطور ببینم؟
تاریخ انقضای گواهی SSL را میتوانید با کلیک روی نماد کنار آدرس سایت در مرورگر، با دستور openssl روی سرور یا با دستور certbot certificates ببینید.
آیا قطعی اینترنت بینالملل روی تمدید SSL اثر دارد؟
قطعی اینترنت بینالملل روی تمدید SSL اثر دارد، چون سرورهای Let's Encrypt خارج از ایران هستند. اگر زمان تمدید با قطعی همزمان شود و قطعی طولانی شود، گواهی ممکن است منقضی شود.
چطور قبل از منقضی شدن گواهی SSL خبردار شوم؟
با یک سرویس مانیتورینگ سایت مثل بینا، تاریخ انقضای گواهی SSL هر روز بررسی میشود و اگر کمتر از ۱۴ روز مانده باشد، در تلگرام، پیامک یا ایمیل هشدار میگیرید.
نظرها