ویرگول
ورودثبت نام
حسین جعفری
حسین جعفری
خواندن ۱۴ دقیقه·۱۱ روز پیش

راه‌اندازی HTTPS رایگان با Let’s Encrypt - چرا و چگونه؟

مقدمه

امروزه وقتی بحث امنیت و حفاظت از اطلاعات کاربران به میان می‌آید، یکی از اولین چیزهایی که باید به آن فکر کنیم، HTTPS است. اگه هنوز سایتت رو با HTTP ارائه می‌کنی، باید بگم که زمانش رسیده تا به دنیای امن‌تر و حرفه‌ای‌تری پا بذاری. اینجاست که Let’s Encrypt به کمکت میاد و بدون هیچ هزینه‌ای، SSL/TLS برای سایتت فراهم می‌کنه تا بتونی به راحتی از HTTPS استفاده کنی.

اما Let’s Encrypt چیه؟ چطوری کار می‌کنه؟ و چرا باید ازش استفاده کنیم؟ بیایید با یک سناریوی ساده جلو بریم و کامل توضیح بدیم.

چرا HTTPS مهمه؟

اول از همه، بذار توضیح بدم چرا HTTPS انقدر مهمه. در یک دنیای ایده‌آل، تمام اطلاعاتی که بین کاربر و سرور رد و بدل می‌شه باید محرمانه باشه. HTTP فقط ارتباط رو انجام می‌ده، اما HTTPS ارتباط رو امن می‌کنه. HTTPS با رمزنگاری (Encryption) از داده‌های حساس محافظت می‌کنه و مانع از حملات مرد میانی (Man-in-the-Middle) می‌شه.

مزایای استفاده از HTTPS:

1. امنیت داده‌ها: تمام اطلاعاتی که بین کاربر و سرور رد و بدل می‌شه رمزنگاری شده و از دسترسی غیرمجاز محافظت می‌شه.

2. اعتماد کاربران: وقتی کاربرها قفل سبز کنار آدرس سایتت رو می‌بینن، حس اعتماد به سایتت پیدا می‌کنن.

3. بهبود سئو: موتورهای جستجو مثل گوگل به سایت‌هایی که از HTTPS استفاده می‌کنن، امتیاز بیشتری می‌دن.

گواهی‌های Self-Signed و مشکلات آن‌ها

قبل از اینکه به معرفی Let’s Encrypt بپردازیم، خوبه که ابتدا به بررسی گواهی‌های Self-Signed (خودامضا) و مشکلات اون‌ها بپردازیم. گواهی‌های خودامضا، همان‌طور که از اسمشان پیداست، توسط خود سرور تولید می‌شن و نیازی به تایید یک مرجع صدور گواهی معتبر (Certificate Authority - CA) ندارن. این نوع گواهی‌ها ممکنه برای استفاده‌های محدود و داخلی مناسب باشن، اما برای سایت‌های عمومی مشکلات زیادی ایجاد می‌کنن.


مشکلات گواهی‌های Self-Signed

  1. عدم اعتماد مرورگرها: یکی از بزرگترین مشکلات گواهی‌های Self-Signed اینه که مرورگرهای وب به این گواهی‌ها اعتماد ندارن. وقتی کاربر وارد سایتی می‌شه که از گواهی Self-Signed استفاده می‌کنه، مرورگر به او هشدار می‌ده که ارتباط امن نیست و ممکنه سایت جعلی باشه. این پیام هشدار باعث بی‌اعتمادی کاربر می‌شه و در بیشتر موارد، کاربران از ورود به سایت خودداری می‌کنن.
  2. نبود اعتبار عمومی: گواهی‌های Self-Signed توسط هیچ مرجع صدور گواهی (CA) معتبری تایید نمی‌شن و فقط توسط سرور خودتان صادر می‌شن. این یعنی هیچ نهاد معتبری امنیت و صحت ارتباط را تضمین نمی‌کنه. برای سایت‌های تجاری یا هر سایتی که به اعتماد کاربران وابسته‌ست، این یک مشکل بزرگه، چون کاربران نمی‌تونن به اعتبار سایت اعتماد کنن.
  3. امنیت پایین در فضای عمومی: گواهی‌های Self-Signed ممکنه برای استفاده در شبکه‌های محلی یا در تست‌های داخلی خوب باشن، اما در اینترنت عمومی، به دلیل عدم تاییدیه از یک مرجع معتبر، امنیت کافی ندارن. اگر سایتی از این نوع گواهی استفاده کنه، در برابر حملات مختلف، از جمله حملات مرد میانی (Man-in-the-Middle)، آسیب‌پذیر می‌شه.
  4. مدیریت پیچیده و زمان‌بر: گواهی‌های Self-Signed باید به صورت دستی صادر و مدیریت بشن. این یعنی هر چند وقت یک بار باید گواهی‌ها رو تمدید کنید، و این پروسه می‌تونه منجر به خطاهای انسانی یا فراموشی تمدید بشه. در صورتی که گواهی منقضی بشه، بازدیدکنندگان سایت با هشدار امنیتی مواجه می‌شن.

چرا استفاده از Self-Signed Certificate مناسب نیست؟

فرض کنید یک وب‌سایت تجاری دارید که هر روز کاربران زیادی به اون مراجعه می‌کنن. حالا اگر از یک Self-Signed Certificate استفاده کنید، هر بار که کاربران سایت شما رو باز می‌کنن، با یک هشدار امنیتی مواجه می‌شن که نشون می‌ده ارتباط با سایت امن نیست. این هشدار باعث می‌شه که کاربران به سایت شما اعتماد نکنن و از بازدید اون صرف‌نظر کنن.

برای حل این مشکل و جلب اعتماد کاربران، به یک گواهی معتبر نیاز دارید که توسط یک مرجع صدور گواهی (CA) تایید شده باشه. مرورگرهای مدرن به این گواهی‌ها اعتماد دارن و کاربران بدون هیچ هشدار امنیتی می‌تونن وارد سایت بشن.

توی قدم اول ببینیم Let’s Encrypt چیه و چطوری کار می‌کنه؟

اینجاست که Let’s Encrypt وارد عمل می‌شه. برخلاف گواهی‌های خودامضا، Let’s Encrypt یک مرجع صدور گواهی معتبره که به صورت خودکار و رایگان گواهی‌های SSL/TLS صادر می‌کنه. وقتی از Let’s Encrypt استفاده می‌کنی، مرورگرها به سایتت اعتماد می‌کنن، چون این گواهی‌ها توسط یک CA معتبر صادر می‌شن و تمام مشکلات Self-Signed Certificate رو حل می‌کنن.

به صورت کلی Let’s Encrypt یک مرجع صدور گواهی (Certificate Authority یا CA) رایگان، خودکار و متن‌باز هست که به شما اجازه می‌ده تا به راحتی SSL/TLS برای سایتتون دریافت کنید. یعنی می‌تونید بدون پرداخت هزینه‌ای، سایتتون رو با HTTPS ایمن کنید.

مزایا و معایب Let’s Encrypt

مزایای Let’s Encrypt:

1. رایگان: بدون پرداخت هزینه‌ای، می‌تونی گواهی SSL دریافت کنی.

2. خودکار: با Certbot، صدور و تمدید گواهی به‌صورت خودکار انجام می‌شه.

3. امنیت بالا: Let’s Encrypt از آخرین استانداردهای امنیتی استفاده می‌کنه.

4. نصب سریع و آسان: با چند خط دستور، می‌تونی HTTPS رو برای سایتت فعال کنی.

معایب Let’s Encrypt:

1. گواهی‌های کوتاه‌مدت: گواهی‌های Let’s Encrypt فقط 90 روز اعتبار دارن و باید به صورت مرتب تمدید بشن (البته Certbot این کار رو خودکار انجام می‌ده).

2. بدون پشتیبانی: برخلاف گواهی‌های پولی، Let’s Encrypt پشتیبانی رسمی نداره.

3. محدودیت صدور Wildcard: چالش HTTP-01 از Wildcard پشتیبانی نمی‌کنه و برای Wildcard باید از DNS-01 استفاده کنی.

قدم دوم: Let's Encrypt رو چطور نصب و استفاده کنیم؟

خب! اگه داری این مطلب رو می‌خونی، احتمالا دنبال اینی که چطوری می‌تونی برای سایتت یک گواهی SSL بگیری و HTTPS رو فعال کنی. بهت تبریک می‌گم، چون داری وارد یک دنیای امن‌تر و حرفه‌ای‌تر می‌شی! خوشبختانه با Let’s Encrypt این کار خیلی ساده و رایگانه.

اما یه موضوع مهم وجود داره: باید ثابت کنی که مالک دامنه‌ای هستی که می‌خوای براش گواهی بگیری! و خب، Let’s Encrypt برای این کار چندین روش مختلف یا همون چالش‌ها داره که باید یکی از اون‌ها رو انتخاب کنی.

حالا بیا با هم سناریو به سناریو همه چی رو توضیح بدیم، هم در مورد پلاگین‌های Certbot و هم چالش‌ها. آماده‌ای؟ بزن بریم

نصب Certbot

برای نصب Certbot با پلاگین Nginx، این دستورات رو وارد کن:

sudo apt install certbot python3-certbot-nginx
  • python3-certbot-nginx

یک بسته نرم‌افزاری است که به کمک Certbot اجازه می‌دهد به صورت خودکار گواهی‌های SSL/TLS را برای سرور Nginx نصب و پیکربندی کند.

این ابزار به Certbot کمک می‌کند تا به صورت خودکار گواهی‌ها را دریافت کرده و تنظیمات لازم را در فایل پیکربندی Nginx برای فعال کردن HTTPS انجام دهد. همچنین قابلیت تمدید خودکار گواهی‌ها را فراهم می‌کند.

با استفاده از این ابزار، نیازی به تنظیمات دستی برای فعال‌سازی HTTPS در Nginx نخواهید داشت.

صدور گواهی با Certbot

ابزار Certbot ابزار فوق‌العاده‌ایه که Let’s Encrypt رو مدیریت می‌کنه. این ابزار با کمک پلاگین‌های مختلف می‌تونه به صورت خودکار گواهی SSL رو دریافت کنه و حتی سرور وب رو برای استفاده از این گواهی پیکربندی کنه.

خب، بیاید ببینیم این پلاگین‌ها چه کاری انجام می‌دن و چطور به ما کمک می‌کنن:

پلاگین Nginx

وقتی از پلاگین Nginx استفاده می‌کنی، Certbot همه کارا رو برات انجام می‌ده. به‌طور خودکار گواهی رو می‌گیره و تنظیمات Nginx رو به‌روزرسانی می‌کنه تا سایتت از HTTPS استفاده کنه.

چالش پیش‌فرض: پلاگین Nginx از HTTP-01 استفاده می‌کنه. یعنی Certbot یه فایل کوچولو توی سایتت قرار می‌ده و Let’s Encrypt از طریق HTTP بررسی می‌کنه که مالک دامنه‌ای یا نه.

  • مزایا: همه چیز خودکاره! فقط کافیه دستور رو بزنی و تموم.
  • معایب: باید سرور Nginx روی پورت 80 قابل دسترسی باشه.

دستور اجرا:

certbot --nginx -d example.com -d www.example.com

پلاگین Apache

اگه از Apache به‌عنوان سرور وب استفاده می‌کنی، پلاگین Apache به‌طور خودکار همه تنظیمات HTTPS رو برات انجام می‌ده. درست مثل Nginx، فقط کافیه یه دستور بزنی و گواهی روی سرورت نصب بشه.

چالش پیش‌فرض: اینم از HTTP-01 استفاده می‌کنه.

  • مزایا: نصب خودکار و بدون دردسر.
  • معایب: باید پورت 80 برای HTTP باز باشه.

دستور اجرا:

certbot --apache -d example.com

پلاگین Standalone (مخصوص کارهای خاص!)

فرض کن سرور وب نداری یا نمی‌خوای تنظیماتش رو به هم بزنی. اینجاست که Standalone به کمکت میاد. Certbot خودش یه وب‌سرور کوچیک و موقتی راه می‌اندازه تا چالش رو مدیریت کنه و گواهی SSL رو دریافت کنه.

چالش پیش‌فرض: تو این حالت هم از HTTP-01 استفاده می‌کنه. اما می‌تونی چالش‌های دیگه رو هم دستی مشخص کنی.

  • مزایا: برای زمانی که نمی‌خوای سرور وب رو دستکاری کنی عالیه.
  • معایب: باید پورت 80 یا 443 آزاد باشه تا Certbot بتونه کارش رو انجام بده.

دستور اجرا:

certbot certonly --standalone -d example.com

پلاگین Webroot (برای کنترل بیشتر)

اگه نمی‌خوای Certbot تنظیمات سرور وب رو تغییر بده و دوست داری بیشتر کنترل دست خودت باشه، Webroot بهترین انتخابه. توی این روش، Certbot فقط یه فایل توی وب‌روت قرار می‌ده و Let’s Encrypt اون فایل رو بررسی می‌کنه.

چالش پیش‌فرض: از HTTP-01 استفاده می‌کنه.

  • مزایا: کنترل بیشتری روی فرآیند داری.
  • معایب: باید دستی آدرس وب‌روت رو وارد کنی.

دستور اجرا:

certbot certonly --webroot -w /path/to/webroot -d example.com

پلاگین DNS (برای گواهی‌های Wildcard)

حالا فرض کن می‌خوای گواهی SSL برای همه زیردامنه‌ها (Wildcard) بگیری. اینجاست که پلاگین DNS می‌تونه خیلی کمک کنه. توی این روش باید یه رکورد TXT به تنظیمات DNS دامنه اضافه کنی تا مالکیت دامنه تایید بشه.

چالش پیش‌فرض: اینجا از DNS-01 استفاده می‌شه.

  • مزایا: برای گواهی‌های Wildcard و دامنه‌های پیچیده عالیه.
  • معایب: باید به تنظیمات DNS دسترسی داشته باشی و بعضی وقت‌ها نیاز به پلاگین‌های خاص برای DNS داری.

دستور اجرا:

certbot --dns-cloudflare --dns-cloudflare-credentials ~/.cloudflare.ini -d example.com -d *.example.com

چالش‌ها در Let’s Encrypt - انتخاب چالش مناسب برای شرایط تو

خب، حالا که با پلاگین‌ها آشنا شدیم، وقتشه در مورد چالش‌ها بیشتر توضیح بدیم. چالش‌ها روش‌هایی هستن که Let’s Encrypt با اون‌ها مالکیت دامنه رو تایید می‌کنه. هر چالش برای شرایط خاصی مناسبه.

چالش HTTP-01 - ساده و رایج

این محبوب‌ترین و ساده‌ترین چالش برای اکثر کاربران هست. HTTP-01 از طریق HTTP تایید مالکیت رو انجام می‌ده. Certbot یک فایل کوچیک در مسیر /.well-known/acme-challenge/ می‌ذاره و Let’s Encrypt اون فایل رو بررسی می‌کنه.

  • مزایا: راحت و خودکار.
  • معایب: برای گواهی‌های Wildcard کار نمی‌کنه و نیاز به پورت 80 داره.

دستور اجرا:

certbot --nginx -d example.com

سناریو دریافت ssl با چلنج http

خب برای دریافت certificate باید یه سایت http از قبل بالا آورده باشین، من این مراحل رو رد میکنم، برای این کار نیازه یه دامنه معتبر بگیرین و بتونین به آدرس سرورتون resolve بشه

الان من سایت cafe.dev.zerops.ir رو به صورت http آوردم بالا الان میخوایم بریم براش certificate بگیریم.

certbot --nginx -d cafe.dev.zerops.ir

خب میبینیم که certificate رو برای ما گرفته

و اگه بریم توی تنظیمات nginx.conf میبینیم که به صورت اتومیشن تنظیمات رو اضافه کرده

و اگه یه بار مرورگر رو رفرش کنیم میبینیم که تبدیل به https میشه

چالش DNS-01 - برای Wildcard ها و دامنه‌های خاص

اگه می‌خوای یه گواهی Wildcard (مثلاً example.com.*) بگیری یا اصلاً به HTTP و HTTPS دسترسی نداری، DNS-01 بهترین گزینه‌ست. تو این روش باید یه رکورد TXT به DNS دامنت اضافه کنی.

  • مزایا: مناسب برای گواهی‌های Wildcard و شرایطی که HTTP کار نمی‌کنه.
  • معایب: نیاز به دسترسی به تنظیمات DNS داره و ممکنه کمی پیچیده باشه.

دستور اجرا:

certbot certonly --manual --preferred-challenges dns -d *.example.com

سناریو دریافت ssl با چلنج dns

الان من سایت child.tec.zerops.ir رو به صورت http آوردم بالا الان میخوایم بریم براش certificate بگیریم.

خب دستور زیر رو میزنیم

certbot certonly --manual --preferred-challenges dns -d *.tec.zerops.ir

خب اینجا میگه برای اینکه ثابت کنی خودتی برو txt record این acme-challenge.tec.zerops.ir_ رو با مقداری که گفته ذخیره کن روی سرورت.

خب من این مورد رو انجام دادم برای اطمینان قبلش تست میکنم ببینم به درستیذخیره شده یا نه

خب میبینیم که certificate به درستی دریافت شد

الان باید بریم یه صورت دستی به تنظیمات nginx اضافه کنیم.

و میبینیم که سایت رو میتونیم با https ببینیم

چالش TLS-ALPN-01 - مناسب برای HTTPS فقط

این چالش برای وقتی خوبه که HTTP غیرفعاله و فقط HTTPS داری. توی این روش از پروتکل ALPN استفاده می‌شه تا مالکیت دامنه تایید بشه.

  • مزایا: از HTTPS برای تایید استفاده می‌کنه.
  • معایب: فقط روی پورت 443 کار می‌کنه و پشتیبانی کمتری داره.

دستور اجرا:

certbot certonly --standalone --preferred-challenges tls-alpn-01 -d example.com

خب، حالا که کلی پلاگین و چالش‌های مختلف رو توضیح دادیم، دیگه می‌دونی چطور باید Let’s Encrypt رو بر اساس نیاز خودت تنظیم کنی. هر کدوم از این چالش‌ها و پلاگین‌ها برای سناریوهای خاصی مناسب هستن:

  • اگه یه سرور معمولی Nginx یا Apache داری، همه چیز رو با پلاگین‌های خودکار حل کن.
  • اگه گواهی Wildcard می‌خوای، برو سراغ DNS-01.
  • اگه یه سرور اختصاصی داری یا دسترسی به HTTP نداری، Standalone یا TLS-ALPN رو امتحان کن.

تمدید خودکار گواهی‌های Let’s Encrypt

یکی از بهترین ویژگی‌های Let’s Encrypt اینه که گواهی‌های SSL به‌صورت خودکار هر 60 روز تمدید می‌شن. این یعنی تو نیازی نداری به‌صورت دستی تمدید گواهی‌هات رو انجام بدی و می‌تونی خیالت از بابت منقضی نشدن گواهی‌ها راحت باشه.

اما اگه دوست داری خودت فرایند تمدید رو مدیریت کنی یا یک سیستم زمان‌بندی شخصی داشته باشی، Certbot امکاناتی مثل اجرای دستور دستی برای تمدید یا تنظیم در crontab رو فراهم کرده.

حالا بیا جزئیات بیشتری رو در مورد تمدید گواهی‌ها و روش‌های مختلف تمدید اون‌ها بگیم و ببینیم برای هر چالش چه تنظیماتی لازمه.

تمدید خودکار گواهی‌ها توسط Certbot

وقتی Certbot رو نصب می‌کنی، به‌صورت خودکار یه سرویس (یا job) در سیستم راه‌اندازی می‌شه که هر روز بررسی می‌کنه آیا گواهی نیاز به تمدید داره یا نه.

  • ابزار Certbot به‌طور پیش‌فرض هر 60 روز یک بار گواهی‌ها رو تمدید می‌کنه. (گواهی‌های Let’s Encrypt فقط 90 روز اعتبار دارن، پس این باعث می‌شه همیشه چند روز برای تمدید فرصت داشته باشی.)

دستور دستی تمدید:

اگه خودت می‌خوای دستی فرایند تمدید رو اجرا کنی، فقط کافیه دستور زیر رو اجرا کنی:

sudo certbot renew

این دستور تمام گواهی‌های موجود رو بررسی می‌کنه و اگر کمتر از 30 روز تا انقضای اون‌ها مونده باشه، اقدام به تمدیدشون می‌کنه.

تنظیم زمان‌بندی برای تمدید در Crontab

اگه دوست داری خودت یه Crontab تنظیم کنی تا Certbot به‌صورت خودکار در زمان‌های مشخصی گواهی‌ها رو تمدید کنه، می‌تونی این کار رو به راحتی انجام بدی. بیاید یک مثال بزنیم که چطوری این کار رو انجام بدی:

1. باز کردن Crontab: برای اضافه کردن Certbot به crontab، ابتدا این دستور رو وارد کن:

sudo crontab -e

2. اضافه کردن زمان‌بندی تمدید: فرض کنیم می‌خوای Certbot هر روز در ساعت 2 صبح گواهی‌ها رو بررسی و تمدید کنه. می‌تونی این خط رو به crontab اضافه کنی:

0 2 * * * certbot renew --quiet
  • 2 * * *: این یعنی هر روز راس ساعت 2 صبح.
  • certbot renew --quiet: دستور تمدید Certbot. از گزینه --quiet برای جلوگیری از چاپ خروجی‌های غیرضروری استفاده می‌شه.

تمدید گواهی بر اساس نوع چالش‌ها

هر چالشی که برای گرفتن گواهی استفاده می‌کنی، در زمان تمدید هم باید تنظیمات مناسب اون چالش رعایت بشه. بیاید ببینیم برای هر کدوم چه کارهایی باید انجام بشه:

تمدید با چالش HTTP-01

اگه برای گرفتن گواهی از HTTP-01 استفاده کردی (مثلاً با پلاگین Nginx یا Apache)، Certbot به‌طور خودکار همون روش رو برای تمدید استفاده می‌کنه. یعنی:

  • ابزار Certbot دوباره یه فایل موقت تو مسیر /.well-known/acme-challenge/ قرار می‌ده.
  • بعد Let’s Encrypt این فایل رو بررسی می‌کنه و گواهی رو تمدید می‌کنه.

نیاز به کار خاصی نداری، فقط مطمئن باش که سرورت به‌درستی روی پورت 80 در دسترسه.

تمدید با چالش DNS-01

  • اگه از DNS-01 استفاده کردی (مثلاً برای گواهی‌های Wildcard)، Certbot باید دوباره رکورد TXT رو به DNS اضافه کنه.
  • اگه از پلاگین DNS استفاده کرده باشی (مثلاً Cloudflare یا Route 53)، Certbot به صورت خودکار با API ارائه‌دهنده DNS شما کار می‌کنه و رکورد TXT رو اضافه می‌کنه.
  • استفاده از Crontab برای DNS-01: اگر نیاز به تمدید خودکار برای گواهی‌های DNS-01 داری، دستور زیر رو در crontab تنظیم کن:
0 2 * * * certbot renew --dns-cloudflare --quiet
  • این دستور از API کلودفلر استفاده می‌کنه تا رکوردهای DNS رو برای تمدید گواهی به‌روزرسانی کنه.

تمدید با چالش TLS-ALPN-01

اگه از TLS-ALPN-01 استفاده کردی، Certbot باید به پورت 443 دسترسی داشته باشه تا دوباره با استفاده از پروتکل ALPN مالکیت دامنه رو تایید کنه.

  • فقط مطمئن باش که پورت 443 برای Certbot بازه و سرورت HTTPS رو به‌درستی پشتیبانی می‌کنه.

نتیجه‌گیری

خب Let’s Encrypt فرآیند استفاده از HTTPS رو برای همه ساده و رایگان کرده. امنیت وب‌سایتت نه تنها برای خودت مهمه، بلکه باعث می‌شه کاربران هم احساس امنیت و اعتماد بیشتری به سایتت داشته باشن. با نصب Certbot و پیکربندی HTTPS، می‌تونی به راحتی ارتباطات امن رو برقرار کنی و از مزایای سئو و افزایش رتبه‌بندی در موتورهای جستجو بهره ببری.

اگر هنوز از HTTPS استفاده نمی‌کنی، وقتشه که با کمک Let’s Encrypt سایتت رو امن کنی!

let’s encrypthttphttpscertbotnginx
شاید از این پست‌ها خوشتان بیاید