لوگوی هاکان سرور
لوگوی هاکان سرور

SSL چیست؟ انواع گواهی SSL، تفاوت رایگان و پولی و راهنمای انتخاب

قفل بزرگ روی نوار نشانی مرورگر کنار برگهٔ گواهی SSL با برچسب‌های DV، OV و EV
فهرست مطالب
  1. SSL چیست و دقیقاً چه کاری انجام می‌دهد؟
  2. سه کار اصلی: رمزنگاری، احراز هویت و یکپارچگی
  3. SSL یا TLS؟
  4. SSL چگونه کار می‌کند؟ دست‌دهی TLS به زبان ساده
  5. زنجیرهٔ اعتماد: ریشه، میانی و گواهی سایت
  6. انواع گواهی SSL
  7. بر اساس اعتبارسنجی: DV، OV و EV
  8. بر اساس پوشش: تک‌دامنه، Wildcard و چنددامنه
  9. مدت اعتبار گواهی SSL در ۲۰۲۶ و بعد از آن
  10. SSL رایگان یا پولی؟ تفاوت واقعی
  11. چه زمانی SSL رایگان کافی است؟
  12. چه زمانی گواهی پولی واقعاً ارزش دارد؟
  13. تحریم و صادرکننده‌های گواهی
  14. چطور گواهی SSL یک سایت را بررسی کنیم؟
  15. در مرورگر
  16. با خط فرمان: openssl و curl
  17. فعال‌سازی SSL در cPanel
  18. بررسی و اجرای AutoSSL
  19. نصب گواهی خریداری‌شده
  20. انتقال کامل به HTTPS
  21. نصب SSL رایگان روی سرور لینوکس با Certbot
  22. نصب گواهی پولی روی Nginx
  23. سرور داخل ایران و قطعی ارتباط بین‌الملل
  24. بعد از نصب: محتوای ترکیبی، HSTS و سئو
  25. رفع محتوای ترکیبی (Mixed Content)
  26. HSTS، CAA و Certificate Transparency
  27. SSL و سئو: اثر واقعی
  28. خطاهای رایج SSL و راه رفع
  29. تهیهٔ SSL و میزبانی در هاکان سرور
  30. پرسش‌های متداول
  31. آیا SSL رایگان به اندازهٔ SSL پولی امن است؟
  32. اعتبار گواهی SSL چند روز است؟
  33. آیا SSL روی سئو تأثیر دارد؟
  34. آیا نصب SSL سایت را کند می‌کند؟
  35. یک گواهی برای example.com و www.example.com کافی است؟
  36. برای دامنهٔ .ir هم می‌شود SSL گرفت؟
  37. اگر گواهی منقضی شود چه اتفاقی می‌افتد؟
  38. جمع‌بندی

اگر بخواهیم در یک جمله بگوییم SSL چیست: فناوری‌ای است که ارتباط مرورگر و سایت را رمزنگاری می‌کند و با یک «گواهی SSL» نشان می‌دهد واقعاً به همان دامنه‌ای وصل شده‌اید که در نوار نشانی می‌بینید. نتیجهٔ آن همان https:// و نماد اتصال امن کنار نشانی سایت است.

در این راهنما می‌بینید TLS چطور کار می‌کند، انواع گواهی چه فرقی دارند و چه وقت گواهی رایگان کافی است؛ همراه با قاعدهٔ تازهٔ عمر گواهی‌ها، بررسی و نصب گواهی در cPanel و با Certbot و نکته‌های مخصوص ایران. اگر جایی دربارهٔ گواهی دوساله یا «نوار سبز» EV خواندید، آن اطلاعات قدیمی است.

به‌طور خلاصه: SSL (که نام درست امروزی‌اش TLS است) داده را رمز می‌کند، هویت سرور را ثابت می‌کند و جلوی دست‌کاری داده در مسیر را می‌گیرد.

  • برای بیشتر سایت‌ها گواهی رایگان DV (Let’s Encrypt یا AutoSSL در cPanel) کافی است و از نظر رمزنگاری با گواهی پولی فرقی ندارد.
  • گواهی پولی وقتی ارزش دارد که هویت سازمان (OV یا EV)، پشتیبانی یا گواهی برای سیستمی بدون تمدید خودکار لازم باشد.
  • حداکثر اعتبار گواهی اکنون ۲۰۰ روز است و تا ۲۰۲۹ مرحله‌به‌مرحله به ۴۷ روز می‌رسد؛ پس تمدید خودکار ضروری است.
  • بعد از نصب، HTTP را با ریدایرکت ۳۰۱ به HTTPS ببرید، محتوای ترکیبی را رفع کنید و تاریخ انقضا را پایش کنید.

SSL چیست و دقیقاً چه کاری انجام می‌دهد؟

سه کار اصلی: رمزنگاری، احراز هویت و یکپارچگی

در اتصال HTTP، رمز عبور، فرم‌ها و کوکی ورود به‌صورت متن ساده عبور می‌کنند و هر کسی در مسیر، از وای‌فای عمومی تا یک تجهیز آلوده، می‌تواند آن‌ها را بخواند یا تغییر دهد. TLS سه کار می‌کند:

  1. رمزنگاری (Encryption): داده با کلیدی رمز می‌شود که فقط مرورگر و سرور آن را دارند.
  2. احراز هویت (Authentication): سرور گواهی‌ای نشان می‌دهد که یک مرجع صدور گواهی (Certificate Authority یا CA) امضا کرده و مرورگر بررسی می‌کند برای همین دامنه صادر شده باشد. بدون کلید خصوصی شما، یا گواهی دیگری که به‌ناحق برای دامنه‌تان صادر شده باشد، کسی نمی‌تواند خودش را جای سایت‌تان جا بزند؛ CAA و پایش Certificate Transparency که پایین‌تر آمده، برای همین حالت دوم است.
  3. یکپارچگی (Integrity): اگر کسی در مسیر حتی یک بایت را تغییر دهد، طرف مقابل متوجه می‌شود و اتصال را قطع می‌کند.

خود گواهی فایل کوچکی است (معمولاً در قالب متنی PEM) با کلید عمومی سرور، نام دامنه‌ها (فیلد Subject Alternative Name یا SAN)، صادرکننده و تاریخ اعتبار که CA امضایش کرده است. کلید خصوصی (Private Key) فقط روی سرور شما می‌ماند و نباید جایی فرستاده شود.

HTTPS همه‌چیز را پنهان نمی‌کند: IP سرور و معمولاً نام دامنه (SNI) در مسیر دیده می‌شود. نماد اتصال امن (قفل در Firefox و Safari) هم فقط یعنی ارتباط رمزنگاری شده، نه اینکه سایت قابل اعتماد است؛ سایت‌های فیشینگ هم گواهی رایگان می‌گیرند.

SSL یا TLS؟

SSL پروتکل قدیمی Netscape بود و همهٔ نسخه‌هایش سال‌هاست منسوخ‌اند؛ TLS 1.0 و TLS 1.1 هم از ۲۰۲۱ (RFC 8996) کنار رفته‌اند و نام SSL فقط از روی عادت مانده است. روی سرور فقط TLS 1.2 و TLS 1.3 (RFC 8446) را فعال نگه دارید.

SSL چگونه کار می‌کند؟ دست‌دهی TLS به زبان ساده

پیش از ارسال صفحه، مرورگر و سرور گفت‌وگویی به نام دست‌دهی (Handshake) انجام می‌دهند که در TLS 1.3 یک رفت‌وبرگشت (1-RTT) و در TLS 1.2 دو رفت‌وبرگشت طول می‌کشد:

  1. ClientHello: مرورگر نسخه‌ها و الگوریتم‌های پشتیبانی‌شده، نام دامنهٔ مقصد (SNI) و سهم خودش از تبادل کلید (Key Share) را می‌فرستد.
  2. ServerHello: سرور نسخه و الگوریتم را انتخاب می‌کند و سهم خودش را می‌فرستد؛ دو طرف کلید جلسه را حساب می‌کنند (معمولاً با ECDHE یا روش ترکیبی X25519MLKEM768 که در برابر کامپیوترهای کوانتومی هم مقاوم است) و بقیهٔ دست‌دهی رمزنگاری‌شده است.
  3. گواهی: سرور گواهی و گواهی‌های میانی را می‌فرستد و با کلید خصوصی‌اش امضایی (CertificateVerify) می‌سازد تا ثابت کند صاحب همان گواهی است.
  4. بررسی و Finished: مرورگر بررسی می‌کند نام دامنه در SAN باشد، تاریخ اعتبار نگذشته باشد و زنجیرهٔ امضاها به یک ریشهٔ مورد اعتماد برسد؛ سپس داده‌ها با الگوریتم متقارن سریعی مثل AES-GCM یا ChaCha20-Poly1305 رمز می‌شوند.

کلید جلسه برای هر اتصال تازه ساخته می‌شود؛ پس اگر کلید خصوصی سرور بعدها لو برود، ترافیک ضبط‌شدهٔ قبلی رمزگشایی نمی‌شود. این محرمانگی پیشرو (Forward Secrecy) در دست‌دهی کامل TLS 1.3 همیشه برقرار است (به‌جز داده‌های 0-RTT و برخی حالت‌های ازسرگیری جلسه).

زنجیرهٔ اعتماد: ریشه، میانی و گواهی سایت

مرورگرها و سیستم‌عامل‌ها فهرستی از گواهی‌های ریشه (Root) دارند و CAها معمولاً با یک گواهی میانی (Intermediate) امضا می‌کنند: گواهی سایت ← گواهی میانی ← گواهی ریشه. سرور باید گواهی سایت و میانی را با هم بفرستد (فایل fullchain یا CA Bundle). بدون میانی، سایت ممکن است در مرورگر دسکتاپ باز شود اما اپ موبایل، curl و درگاه پرداخت خطا بدهند؛ این از رایج‌ترین اشتباه‌های نصب دستی است.

انواع گواهی SSL

گواهی‌ها از دو جهت مستقل دسته‌بندی می‌شوند: سطح اعتبارسنجی و تعداد نام‌ها؛ یک گواهی می‌تواند هم DV باشد و هم Wildcard.

بر اساس اعتبارسنجی: DV، OV و EV

نوع چه چیزی بررسی می‌شود زمان معمول صدور مناسب برای
DV (Domain Validation) فقط کنترل دامنه، با رکورد DNS یا فایل روی سایت چند دقیقه بیشتر سایت‌ها، فروشگاه، پنل و API
OV (Organization Validation) کنترل دامنه و وجود قانونی سازمان معمولاً چند روز کاری شرکتی که نامش باید در گواهی بیاید
EV (Extended Validation) بررسی سخت‌گیرانه‌تر مدارک سازمان چند روز تا چند هفته سازمان با الزام قراردادی یا مقرراتی

سطح اعتبارسنجی اثری بر قدرت رمزنگاری ندارد و فرق فقط در اطلاعات هویتی داخل گواهی است. «نوار سبز» EV هم از ۲۰۱۹ (Chrome 77 و Firefox 70) حذف شده و کاربر عادی در ظاهر سایت فرقی میان DV و EV نمی‌بیند.

بر اساس پوشش: تک‌دامنه، Wildcard و چنددامنه

نوع نمونهٔ پوشش پوشش نمی‌دهد
تک‌دامنه example.com و معمولاً www.example.com زیردامنه‌های دیگر
Wildcard *.example.com مثل shop.example.com خود example.com (مگر جداً اضافه شود) و a.b.example.com
چنددامنه (SAN) example.com و example.ir در یک گواهی نامی که در فهرست نیست؛ افزودن نام یعنی صدور دوباره

Let’s Encrypt هم Wildcard و هم چنددامنه (بسته به پروفایل تا ۱۰۰ نام) صادر می‌کند، پس این دو به‌تنهایی دلیل خرید گواهی پولی نیستند؛ فقط Wildcard رایگان با اعتبارسنجی DNS (چالش DNS-01) صادر می‌شود و ابزار صدور باید بتواند رکورد TXT بسازد.

مدت اعتبار گواهی SSL در ۲۰۲۶ و بعد از آن

CA/Browser Forum، انجمن مشترک صادرکننده‌ها و مرورگرها، در ۲۰۲۵ کاهش مرحله‌ای عمر گواهی‌ها را تصویب کرد. طبق نسخهٔ فعلی الزامات پایه (Baseline Requirements):

تاریخ صدور حداکثر اعتبار گواهی حداکثر استفادهٔ دوباره از اعتبارسنجی دامنه
پیش از ۱۵ مارس ۲۰۲۶ ۳۹۸ روز ۳۹۸ روز
از ۱۵ مارس ۲۰۲۶ (۲۴ اسفند ۱۴۰۴) ۲۰۰ روز ۲۰۰ روز
از ۱۵ مارس ۲۰۲۷ (۲۴ اسفند ۱۴۰۵) ۱۰۰ روز ۱۰۰ روز
از ۱۵ مارس ۲۰۲۹ (۲۵ اسفند ۱۴۰۷) ۴۷ روز ۱۰ روز
  • گواهی یک‌ساله دیگر صادر نمی‌شود. «SSL یک‌ساله» یعنی دورهٔ اشتراک؛ در آن دوره گواهی چند بار دوباره صادر (Reissue) و نصب می‌شود، پس پیش از خرید بپرسید این کار خودکار است یا دستی. مثلاً گواهی nic.ir و shaparak.ir در آبان ۱۴۰۵ هر کدام ۱۹۹ روز اعتبار داشت.
  • اعتبارسنجی با ایمیل کنار می‌رود. ایمیل به نشانی‌های ساخته‌شده مثل admin@ و webmaster@ از ۱۵ مارس ۲۰۲۶ توصیه نمی‌شود (SHOULD NOT) و از ۱۵ مارس ۲۰۲۸ کاملاً ممنوع (MUST NOT) است؛ هنگام خرید، روش رکورد DNS یا فایل HTTP را انتخاب کنید.

Let’s Encrypt هم برنامهٔ خودش را دارد: گواهی پیش‌فرضش امروز ۹۰ روزه است، از ۱۰ فوریهٔ ۲۰۲۷ (۲۱ بهمن ۱۴۰۵) ۶۴ روزه و از ۱۶ فوریهٔ ۲۰۲۸ ۴۵ روزه می‌شود؛ پس هر تمدید دستی را از همین حالا خودکار کنید.

SSL رایگان یا پولی؟ تفاوت واقعی

ویژگی رایگان (Let’s Encrypt، AutoSSL) پولی
قدرت رمزنگاری یکسان یکسان
سطح اعتبارسنجی فقط DV DV، OV یا EV
Wildcard و چنددامنه دارد (Wildcard فقط با DNS-01) دارد
اعتبار هر گواهی ۹۰ روز (کمتر در آینده) تا سقف الزامات پایه (جدول بالا)
تمدید خودکار با پروتکل ACME بسته به فروشنده، گاهی دستی
پشتیبانی مستندات و انجمن پشتیبانی فروشنده و CA
ضمانت‌نامهٔ مالی (Warranty) ندارد دارد، با شرایط محدود

چه زمانی SSL رایگان کافی است؟

برای وبلاگ، سایت شرکتی، فروشگاه اینترنتی، پنل مدیریت و API، گواهی رایگان DV کافی است، به شرط اینکه تمدید خودکار کار کند؛ با AutoSSL یا Certbot، خرید گواهی DV معمولاً فقط کار دستی اضافه می‌سازد.

چه زمانی گواهی پولی واقعاً ارزش دارد؟

  • هویت سازمانی (OV یا EV): وقتی قرارداد، مقررات یا مشتری سازمانی صریحاً نام سازمان را در گواهی می‌خواهد.
  • سیستم بدون ACME: تجهیزات شبکه، نرم‌افزار قدیمی یا سروری با دسترسی محدود به اینترنت. عمر بلندتر گواهی پولی (تا مارس ۲۰۲۷ حداکثر ۲۰۰ روز و پس از آن ۱۰۰ روز) دفعات کار دستی را کم می‌کند، هرچند این مزیت با کوتاه‌تر شدن سقف‌ها کم‌رنگ می‌شود.
  • Wildcard با DNS بدون API: برای تمدید خودکار Wildcard رایگان باید هر بار رکورد TXT را دستی عوض کنید یا رکورد _acme-challenge را با CNAME به یک سرویس DNS دارای API بسپارید. روش تازهٔ DNS-PERSIST-01 (یک رکورد TXT ثابت) در الزامات پایه تعریف شده، اما Let’s Encrypt تا زمان نگارش این مطلب آن را در سرویس اصلی‌اش فعال نکرده است.
  • پشتیبانی: اگر تیم فنی ندارید و می‌خواهید کسی در صدور و نصب پاسخ‌گو باشد.

ضمانت‌نامهٔ مالی معمولاً زیانی را پوشش می‌دهد که از خطای CA در صدور گواهی به کاربران برسد، نه هک شدن سایت شما؛ شرایطش را پیش از خرید بخوانید.

تحریم و صادرکننده‌های گواهی

همهٔ CAها برای ایران شرایط یکسانی ندارند. Sectigo نوشته است به افراد و کسب‌وکارهای ایرانی هیچ نوع گواهی، حتی DV، نمی‌دهد و خرید گواهی‌هایش (مثل PositiveSSL) از نماینده هم از این قاعده بیرون نیست؛ DigiCert هم ایران را جزو کشورهای تحت تحریم آورده است. Let’s Encrypt در قرارداد مشترکانش حق خودداری از صدور برای اشخاص مشمول تحریم را محفوظ داشته، اما در زمان نگارش این مطلب برای دامنه‌های ایرانی گواهی صادر می‌کند.

در مقابل، در آبان ۱۴۰۵ گواهی nic.ir و shaparak.ir (DV) و bmi.ir (OV) را Certum، یک CA لهستانی، صادر کرده بود. پس برای OV یا EV یک شرکت ایرانی، پیش از پرداخت بپرسید کدام CA صادر می‌کند و آیا برای سازمان شما امکان صدور دارد.

چطور گواهی SSL یک سایت را بررسی کنیم؟

در مرورگر

  1. در Chrome روی آیکون سمت چپ نشانی (View site information) کلیک کنید و Connection is secure و سپس Certificate is valid را بزنید.
  2. بخش Issued To دامنه و سازمان (سازمان فقط در OV و EV)، Issued By صادرکننده و Validity Period تاریخ اعتبار را نشان می‌دهد؛ همهٔ نام‌های SAN در زبانهٔ Details است.
  3. در Firefox روی نماد قفل کلیک کنید و از Connection secure به More information و سپس View Certificate بروید.

با خط فرمان: openssl و curl

روی لینوکس، macOS یا WSL این دستور نام‌ها، صادرکننده و تاریخ اعتبار را نشان می‌دهد (example.com را با دامنهٔ خودتان عوض کنید):

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates -ext subjectAltName

خروجی نمونه روی Ubuntu 24.04 (OpenSSL 3.0):

subject=CN = example.com
issuer=C = US, O = Let's Encrypt, CN = YR1
notBefore=Oct 18 15:51:12 2026 GMT
notAfter=Jan 16 15:51:11 2027 GMT
X509v3 Subject Alternative Name:
    DNS:example.com, DNS:www.example.com

گزینهٔ -ext در LibreSSL پیش‌فرض macOS وجود ندارد. -servername را جا نیندازید، وگرنه روی سروری با چند سایت ممکن است گواهی سایت دیگری را ببینید. برای پایش انقضا، -checkend بررسی می‌کند گواهی تا چند ثانیهٔ دیگر معتبر است؛ مثلاً ۱۴ روز:

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -checkend 1209600

خروجی Certificate will expire با کد خروج 1 یعنی کمتر از ۱۴ روز مانده؛ پس می‌توانید آن را در یک کران‌جاب (cron) روزانه بگذارید. برای بررسی زنجیره:

openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | grep "Verify return code"

نتیجهٔ درست Verify return code: 0 (ok) است و 21 (unable to verify the first certificate) معمولاً یعنی گواهی میانی نصب نشده؛ curl همین مشکل را با خطای (60) SSL certificate problem: unable to get local issuer certificate نشان می‌دهد. گزارش کامل‌تر را ابزار SSL Labs می‌دهد.

فعال‌سازی SSL در cPanel

در بیشتر هاست‌های cPanel، AutoSSL برای هر دامنه و زیردامنه‌ای که به سرور اشاره می‌کند خودکار گواهی DV رایگان می‌گیرد و تمدید می‌کند؛ طبق مستندات cPanel، تمدید گواهی Let’s Encrypt وقتی کمتر از ۲۹ روز به انقضا مانده باشد شروع می‌شود. آموزش کامل را در مطلب فعال‌سازی SSL رایگان در cPanel آورده‌ایم.

بررسی و اجرای AutoSSL

  1. از Security گزینهٔ SSL/TLS Status را باز کنید (در cPanel نسخهٔ 134 به بعد ممکن است صفحهٔ یکپارچهٔ SSL/TLS Certificates با زبانهٔ Status را ببینید).
  2. نوع گواهی هر دامنه را ببینید: AutoSSL DV، خودامضا (Self-Signed) یا بدون گواهی (Unsecured)؛ خطاها در ستون Certificate Status می‌آید.
  3. اگر دکمهٔ Run AutoSSL هست، آن را بزنید؛ اگر نیست، میزبان آن را برای حساب شما فعال نکرده است.

شرط موفقیت این است که رکورد A دامنه و www (و رکورد AAAA، اگر دارید) به همین سرور اشاره کند و اعتبارسنجی کنترل دامنه (DCV) موفق شود؛ DNS منتشرنشده یا CDN ممکن است آن را شکست دهد. AutoSSL معمولاً گواهی دستی را، حتی اگر منقضی شده باشد، جایگزین نمی‌کند (مگر میزبان این گزینه را در WHM روشن کرده باشد)؛ آن را حذف کنید یا از میزبان بخواهید.

نصب گواهی خریداری‌شده

مسیرهای زیر برای صفحهٔ کلاسیک SSL/TLS است؛ اگر در cPanel نسخهٔ 134 به بعد صفحهٔ یکپارچهٔ Security ← SSL/TLS Certificates را می‌بینید، همین کارها در زبانه‌های Requests، Keys و Installation انجام می‌شود.

  1. از Security ← SSL/TLS ← Certificate Signing Requests (CSR) یک CSR بسازید. کلید خصوصی در بخش Private Keys (KEY) ذخیره می‌شود؛ نسخه‌ای از آن را جای امن نگه دارید، چون کلید گم‌شده قابل بازیابی نیست.
  2. CSR را به فروشنده بدهید و دامنه را با رکورد DNS یا فایل HTTP اعتبارسنجی کنید.
  3. بعد از صدور، در Security ← SSL/TLS از بخش Install and Manage SSL for your site (HTTPS) روی Manage SSL sites کلیک کنید.
  4. دامنه را از منوی Domain انتخاب کنید و گواهی را در Certificate (CRT) و کلید را در Private Key (KEY) بگذارید؛ اگر گواهی را قبلاً در بخش Certificates (CRT) بارگذاری کرده‌اید، Autofill by Domain این خانه‌ها را پر می‌کند.
  5. فایل میانی فروشنده را در Certificate Authority Bundle (CABUNDLE) بگذارید و Install Certificate را بزنید.

انتقال کامل به HTTPS

بعد از نصب گواهی معتبر، در Domains ← Domains کلید Force HTTPS Redirect را برای دامنه روشن کنید یا این چند خط را در ابتدای .htaccess بگذارید:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

هشدار: اگر CDN در حالت Flexible با HTTP به سرور اصلی وصل می‌شود، این ریدایرکت حلقه و خطای ERR_TOO_MANY_REDIRECTS می‌سازد؛ گواهی را روی سرور اصلی نصب کنید و CDN را روی حالت Full (strict) بگذارید. جزئیات در مطلب رفع ارور Too Many Redirects آمده است.

نصب SSL رایگان روی سرور لینوکس با Certbot

روی یک سرور لینوکس با Nginx یا Apache، Certbot ساده‌ترین راه گرفتن و تمدید خودکار گواهی Let’s Encrypt است. پیش‌نیازها: رکورد A دامنه و www (و رکورد AAAA، اگر دارید) به IP همین سرور اشاره کند، وب‌سرور برای دامنه پیکربندی شده باشد و پورت‌های 80 و 443 باز باشند (با UFW: sudo ufw allow 'Nginx Full'؛ توضیح بیشتر در فعال‌سازی فایروال در لینوکس). دستورهای زیر روش Snap پیشنهادی سازندگان Certbot برای Ubuntu 24.04 و 26.04 با Nginx است؛ برای Apache به‌جای --nginx از --apache استفاده کنید و در UFW پروفایل 'Apache Full' را باز کنید.

sudo apt remove certbot            # only if the apt package is installed
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot
sudo certbot --nginx --redirect -d example.com -d www.example.com
sudo certbot renew --dry-run

Certbot دامنه را با روش HTTP-01 روی پورت 80 اعتبارسنجی می‌کند، فایل‌ها را در /etc/letsencrypt/live/example.com/ می‌گذارد (fullchain.pem گواهی با زنجیره و privkey.pem کلید خصوصی است) و Nginx را برای HTTPS و ریدایرکت تنظیم می‌کند. دستور آخر تمدید را آزمایشی شبیه‌سازی می‌کند و نباید خطا بدهد؛ تایمر تمدید خودکار را با systemctl list-timers | grep certbot ببینید.

اگر روی سرور داخل ایران به Snap Store دسترسی نداشتید، نسخهٔ مخزن اوبونتو را با sudo apt install certbot python3-certbot-nginx نصب کنید (برای Apache، python3-certbot-apache را به‌جای python3-certbot-nginx بگذارید). این نسخه قدیمی‌تر است (2.9 در Ubuntu 24.04 و 4.0 در Ubuntu 26.04) اما به‌خوبی کار می‌کند.

در Ubuntu 24.04 فایل پیش‌فرض /etc/nginx/nginx.conf هنوز خط ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; را دارد؛ آن را به TLSv1.2 TLSv1.3 تغییر دهید (پیش‌فرض Ubuntu 26.04) و با sudo nginx -t && sudo systemctl reload nginx اعمال کنید.

نصب گواهی پولی روی Nginx

کلید و CSR را روی خود سرور بسازید و CSR را به فروشنده بدهید. پس از صدور، اول گواهی دامنه و بعد CA Bundle را در یک فایل بگذارید و فایل‌ها را به مسیر ثابتی منتقل کنید:

openssl req -new -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr -subj "/CN=example.com"
chmod 600 example.com.key
# after the CA issues the certificate:
cat example_com.crt example_com.ca-bundle > fullchain.crt
sudo mkdir -p /etc/ssl/example.com
sudo mv example.com.key fullchain.crt /etc/ssl/example.com/
sudo chown root:root /etc/ssl/example.com/*

اگر فایل .crt فروشنده با خط تازه تمام نشود، دو گواهی در fullchain.crt به هم می‌چسبند و Nginx با خطای PEM_read_bio_X509 آن را نمی‌پذیرد؛ فایل را باز کنید و مطمئن شوید هر -----BEGIN CERTIFICATE----- در خطی جداگانه است. سپس این خط‌ها را در بلوک server سایت (مثلاً در /etc/nginx/sites-available/example.com) بگذارید و با همان دستور nginx -t و reload بالا اعمال کنید:

server {
    listen 443 ssl;
    server_name example.com www.example.com;
    ssl_certificate     /etc/ssl/example.com/fullchain.crt;
    ssl_certificate_key /etc/ssl/example.com/example.com.key;
    # keep your existing root and location settings
}

سرور داخل ایران و قطعی ارتباط بین‌الملل

Let’s Encrypt برای اعتبارسنجی HTTP-01 از چند نقطهٔ اینترنت به پورت 80 سرور وصل می‌شود و Certbot هم باید به سرور ACME خارج از ایران برسد؛ پس در قطعی ارتباط بین‌الملل، صدور و تمدید روی سرور داخل ایران شکست می‌خورد.

  • Certbot و AutoSSL هفته‌ها پیش از انقضا تلاش را شروع می‌کنند، پس قطعی چندروزه معمولاً جبران‌پذیر است؛ بعد از وصل شدن، sudo certbot renew را دستی اجرا کنید.
  • Let’s Encrypt از ژوئن ۲۰۲۵ (خرداد ۱۴۰۴) ایمیل یادآوری انقضا نمی‌فرستد؛ انقضا را خودتان با -checkend یا یک سرویس مانیتورینگ پایش کنید.
  • برای سروری که مدت طولانی بدون ارتباط بین‌الملل است، گواهی پولی با عمر بلندتر معقول‌تر است (بند «سیستم بدون ACME»)؛ آن را با رکورد DNS اعتبارسنجی کنید، چون روش فایل HTTP هم در قطعی شکست می‌خورد و DNS دامنه باید از بیرون ایران در دسترس باشد.

بعد از نصب: محتوای ترکیبی، HSTS و سئو

رفع محتوای ترکیبی (Mixed Content)

محتوای ترکیبی یعنی صفحه با HTTPS باز می‌شود اما بخشی از منابعش با http:// می‌آید. مرورگرها اسکریپت، CSS و iframe ناامن را مسدود می‌کنند و تصویر و ویدیو را اگر با HTTPS در دسترس نباشد بارگذاری نمی‌کنند. منابع مشکل‌دار را در زبانهٔ Console ابزار توسعه‌دهنده (F12) ببینید. در وردپرس:

  1. در Settings ← General هر دو فیلد WordPress Address (URL) و Site Address (URL) را با https:// ذخیره کنید.
  2. از پایگاه داده نسخهٔ پشتیبان بگیرید و نشانی‌های قدیمی را با WP-CLI عوض کنید؛ اول با --dry-run نتیجه را ببینید:
wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guid --dry-run
wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guid

هدر Content-Security-Policy: upgrade-insecure-requests درخواست‌های HTTP صفحه را خودکار به HTTPS تبدیل می‌کند؛ راه‌حل موقتی است، نه جایگزین اصلاح نشانی‌ها.

HSTS، CAA و Certificate Transparency

HSTS (HTTP Strict Transport Security) به مرورگر می‌گوید تا مدت مشخصی دامنه را فقط با HTTPS باز کند. با مقدار کوچک شروع کنید و وقتی همهٔ زیردامنه‌ها روی HTTPS درست کار کردند، آن را به یک سال (max-age=31536000) برسانید. در Nginx این خط به بلوک server پورت 443 می‌رود:

add_header Strict-Transport-Security "max-age=300" always;

در هاست cPanel (Apache یا LiteSpeed) این خط را به .htaccess اضافه کنید:

Header always set Strict-Transport-Security "max-age=300"

گزینهٔ preload (hstspreload.org) را فقط با اطمینان کامل فعال کنید، چون خروج از آن فهرست ماه‌ها طول می‌کشد. اگر گواهی سایتی با HSTS منقضی شود، مرورگر اجازهٔ عبور از هشدار را هم نمی‌دهد.

رکورد CAA در DNS تعیین می‌کند کدام CAها برای دامنهٔ شما گواهی صادر کنند (بدون آن، همه مجازند). نمونه برای Let’s Encrypt (در cPanel از Domains ← Zone Editor):

example.com. 86400 IN CAA 0 issue "letsencrypt.org"

اگر بعداً از CA دیگری خرید کردید، نامش را هم اضافه کنید. همهٔ گواهی‌های عمومی در لاگ‌های Certificate Transparency ثبت می‌شوند و با جست‌وجوی دامنه در crt.sh می‌توانید گواهی ناشناخته‌ای را که برای دامنه‌تان صادر شده پیدا کنید.

SSL و سئو: اثر واقعی

گوگل از ۲۰۱۴ HTTPS را سیگنال رتبه‌بندی «بسیار سبک» می‌داند؛ اثر اصلی SSL جای دیگری است:

  • هشدار مرورگر: کروم صفحه‌های HTTP را Not secure نشان می‌دهد و از Chrome 154 که شهریور ۱۴۰۵ منتشر شد، گزینهٔ Always Use Secure Connections برای سایت‌های عمومی به‌طور پیش‌فرض روشن است؛ یعنی کروم پیش از باز کردن یک سایت عمومی با HTTP هشدار می‌دهد و اجازه می‌گیرد (برای سایتی که کاربر مرتب باز می‌کند، هشدار تکرار نمی‌شود).
  • سرعت: مرورگرها HTTP/2 و HTTP/3 را فقط روی اتصال رمزنگاری‌شده پشتیبانی می‌کنند.
  • انتقال درست: گوگل رفتن از HTTP به HTTPS را جابه‌جایی سایت می‌داند: هر صفحه را با ریدایرکت ۳۰۱ به نسخهٔ HTTPS خودش ببرید، canonical و نقشهٔ سایت را اصلاح کنید، نسخهٔ HTTPS را در Search Console ثبت کنید و ریدایرکت‌ها را دست‌کم یک سال نگه دارید.

خطاهای رایج SSL و راه رفع

نشانه علت محتمل راه رفع
NET::ERR_CERT_DATE_INVALID گواهی منقضی شده یا ساعت دستگاه کاربر غلط است تمدید و نصب دوباره؛ بررسی ساعت دستگاه
NET::ERR_CERT_COMMON_NAME_INVALID نامی مثل www در SAN گواهی نیست صدور دوباره با همهٔ نام‌ها
NET::ERR_CERT_AUTHORITY_INVALID گواهی خودامضا یا زنجیرهٔ ناقص گواهی از CA معتبر و نصب fullchain
مرورگر سالم است، curl یا اپ خطا می‌دهد گواهی میانی نصب نشده fullchain.pem به‌جای cert.pem
ERR_TOO_MANY_REDIRECTS CDN در حالت Flexible و ریدایرکت روی سرور حالت Full (strict)
ظاهر صفحه به‌هم ریخته یا تصویری بارگذاری نمی‌شود محتوای ترکیبی اصلاح نشانی‌های http://
Certbot: Timeout during connect پورت 80 بسته، رکورد A اشتباه، رکورد AAAA قدیمی (Let’s Encrypt اول IPv6 را امتحان می‌کند) یا قطعی ارتباط بین‌الملل باز کردن پورت 80، اصلاح A یا AAAA، تکرار بعد از وصل شدن
Certbot: too many failed authorizations بیش از ۵ اعتبارسنجی ناموفق در یک ساعت یک ساعت صبر و آزمایش با --dry-run

قاعدهٔ کلی: خطایی که فقط یک دستگاه می‌بیند معمولاً از ساعت، آنتی‌ویروس یا شبکهٔ همان دستگاه است؛ خطایی که همه می‌بینند از سرور یا گواهی است.

تهیهٔ SSL و میزبانی در هاکان سرور

اگر سایت شما روی هاستی با AutoSSL یا سروری با Certbot است، برای بیشتر کاربردها نیازی به خرید گواهی ندارید. اگر به Wildcard برای DNS بدون API، گواهی OV یا EV، یا گواهی برای سیستمی بدون تمدید خودکار نیاز دارید، صفحهٔ خرید SSL هاکان سرور را ببینید و پیش از هر پرداختی بپرسید گواهی را کدام CA صادر می‌کند و آیا برای دامنه و سازمان شما قابل صدور است. برای راه‌اندازی خود سایت هم می‌توانید از هاست و دامنه شروع کنید. پشتیبانی فنی ۲۴ ساعته از طریق تیکت در دسترس است.

پرسش‌های متداول

آیا SSL رایگان به اندازهٔ SSL پولی امن است؟

بله. هر دو از همان نسخه‌های TLS و همان الگوریتم‌ها استفاده می‌کنند؛ تفاوت در بررسی هویت، پشتیبانی و روش تمدید است.

اعتبار گواهی SSL چند روز است؟

گواهی‌هایی که از ۱۵ مارس ۲۰۲۶ صادر می‌شوند حداکثر ۲۰۰ روز اعتبار دارند و این سقف مرحله‌به‌مرحله کم می‌شود (جدول بخش مدت اعتبار). گواهی پیش‌فرض Let’s Encrypt فعلاً ۹۰ روزه است.

آیا SSL روی سئو تأثیر دارد؟

اثر مستقیمش بر رتبه کم است؛ اثر مهم‌تر، هشدار مرورگر برای سایت HTTP و از دست رفتن بازدیدکننده است. انتقال بدون ریدایرکت ۳۰۱ هم می‌تواند رتبه‌ها را موقتاً به‌هم بریزد.

آیا نصب SSL سایت را کند می‌کند؟

در عمل نه. TLS 1.3 فقط یک رفت‌وبرگشت به اتصال اول اضافه می‌کند و HTTP/2 و HTTP/3، که فقط روی HTTPS در دسترس‌اند، معمولاً بارگذاری را سریع‌تر می‌کنند.

یک گواهی برای example.com و www.example.com کافی است؟

فقط اگر هر دو نام در SAN گواهی باشند؛ AutoSSL نسخهٔ www را خودکار اضافه می‌کند و در Certbot هر دو را با -d بدهید. Wildcard *.example.com هم خود example.com را پوشش نمی‌دهد.

برای دامنهٔ .ir هم می‌شود SSL گرفت؟

بله. دامنه‌های .ir مثل بقیه گواهی DV می‌گیرند. محدودیت تحریم به صاحب گواهی مربوط است، نه پسوند دامنه: در OV و EV آشکارتر است، اما برخی CAها مثل Sectigo به اشخاص و شرکت‌های ایرانی هیچ نوع گواهی، حتی DV، نمی‌دهند. Let’s Encrypt در زمان نگارش برای دامنه‌های ایرانی گواهی صادر می‌کند.

اگر گواهی منقضی شود چه اتفاقی می‌افتد؟

مرورگرها به‌جای سایت صفحهٔ هشدار نشان می‌دهند و اپ‌ها، درگاه‌ها و وب‌سرویس‌های متصل اتصال را قطع می‌کنند؛ با HSTS حتی عبور از هشدار ممکن نیست. پس پایش انقضا به اندازهٔ خود نصب مهم است.

جمع‌بندی

برای بیشتر سایت‌ها گواهی رایگان DV با تمدید خودکار کافی است و گواهی پولی وقتی ارزش دارد که هویت سازمانی، پشتیبانی یا سیستمی بدون ACME در کار باشد. کار اصلی سالم نگه داشتن گواهی است: زنجیرهٔ کامل، ریدایرکت درست، رفع محتوای ترکیبی و پایش انقضا.

قدم بعدی: گواهی سایت‌تان را با دستور openssl بالا بررسی کنید و هر تمدید دستی را پیش از ۱۵ مارس ۲۰۲۷ خودکار کنید یا دست‌کم برایش پایش بگذارید.