امروزه وقتی بحث امنیت و حفاظت از اطلاعات کاربران به میان میآید، یکی از اولین چیزهایی که باید به آن فکر کنیم، HTTPS است. اگه هنوز سایتت رو با HTTP ارائه میکنی، باید بگم که زمانش رسیده تا به دنیای امنتر و حرفهایتری پا بذاری. اینجاست که Let’s Encrypt به کمکت میاد و بدون هیچ هزینهای، SSL/TLS برای سایتت فراهم میکنه تا بتونی به راحتی از HTTPS استفاده کنی.
اما Let’s Encrypt چیه؟ چطوری کار میکنه؟ و چرا باید ازش استفاده کنیم؟ بیایید با یک سناریوی ساده جلو بریم و کامل توضیح بدیم.
اول از همه، بذار توضیح بدم چرا HTTPS انقدر مهمه. در یک دنیای ایدهآل، تمام اطلاعاتی که بین کاربر و سرور رد و بدل میشه باید محرمانه باشه. HTTP فقط ارتباط رو انجام میده، اما HTTPS ارتباط رو امن میکنه. HTTPS با رمزنگاری (Encryption) از دادههای حساس محافظت میکنه و مانع از حملات مرد میانی (Man-in-the-Middle) میشه.
مزایای استفاده از HTTPS:
1. امنیت دادهها: تمام اطلاعاتی که بین کاربر و سرور رد و بدل میشه رمزنگاری شده و از دسترسی غیرمجاز محافظت میشه.
2. اعتماد کاربران: وقتی کاربرها قفل سبز کنار آدرس سایتت رو میبینن، حس اعتماد به سایتت پیدا میکنن.
3. بهبود سئو: موتورهای جستجو مثل گوگل به سایتهایی که از HTTPS استفاده میکنن، امتیاز بیشتری میدن.
قبل از اینکه به معرفی Let’s Encrypt بپردازیم، خوبه که ابتدا به بررسی گواهیهای Self-Signed (خودامضا) و مشکلات اونها بپردازیم. گواهیهای خودامضا، همانطور که از اسمشان پیداست، توسط خود سرور تولید میشن و نیازی به تایید یک مرجع صدور گواهی معتبر (Certificate Authority - CA) ندارن. این نوع گواهیها ممکنه برای استفادههای محدود و داخلی مناسب باشن، اما برای سایتهای عمومی مشکلات زیادی ایجاد میکنن.
فرض کنید یک وبسایت تجاری دارید که هر روز کاربران زیادی به اون مراجعه میکنن. حالا اگر از یک Self-Signed Certificate استفاده کنید، هر بار که کاربران سایت شما رو باز میکنن، با یک هشدار امنیتی مواجه میشن که نشون میده ارتباط با سایت امن نیست. این هشدار باعث میشه که کاربران به سایت شما اعتماد نکنن و از بازدید اون صرفنظر کنن.
برای حل این مشکل و جلب اعتماد کاربران، به یک گواهی معتبر نیاز دارید که توسط یک مرجع صدور گواهی (CA) تایید شده باشه. مرورگرهای مدرن به این گواهیها اعتماد دارن و کاربران بدون هیچ هشدار امنیتی میتونن وارد سایت بشن.
اینجاست که 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:
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 استفاده کنی.
خب! اگه داری این مطلب رو میخونی، احتمالا دنبال اینی که چطوری میتونی برای سایتت یک گواهی SSL بگیری و HTTPS رو فعال کنی. بهت تبریک میگم، چون داری وارد یک دنیای امنتر و حرفهایتر میشی! خوشبختانه با Let’s Encrypt این کار خیلی ساده و رایگانه.
اما یه موضوع مهم وجود داره: باید ثابت کنی که مالک دامنهای هستی که میخوای براش گواهی بگیری! و خب، Let’s Encrypt برای این کار چندین روش مختلف یا همون چالشها داره که باید یکی از اونها رو انتخاب کنی.
حالا بیا با هم سناریو به سناریو همه چی رو توضیح بدیم، هم در مورد پلاگینهای Certbot و هم چالشها. آمادهای؟ بزن بریم
برای نصب Certbot با پلاگین Nginx، این دستورات رو وارد کن:
sudo apt install certbot python3-certbot-nginx
یک بسته نرمافزاری است که به کمک Certbot اجازه میدهد به صورت خودکار گواهیهای SSL/TLS را برای سرور Nginx نصب و پیکربندی کند.
این ابزار به Certbot کمک میکند تا به صورت خودکار گواهیها را دریافت کرده و تنظیمات لازم را در فایل پیکربندی Nginx برای فعال کردن HTTPS انجام دهد. همچنین قابلیت تمدید خودکار گواهیها را فراهم میکند.
با استفاده از این ابزار، نیازی به تنظیمات دستی برای فعالسازی HTTPS در Nginx نخواهید داشت.
ابزار Certbot ابزار فوقالعادهایه که Let’s Encrypt رو مدیریت میکنه. این ابزار با کمک پلاگینهای مختلف میتونه به صورت خودکار گواهی SSL رو دریافت کنه و حتی سرور وب رو برای استفاده از این گواهی پیکربندی کنه.
خب، بیاید ببینیم این پلاگینها چه کاری انجام میدن و چطور به ما کمک میکنن:
وقتی از پلاگین Nginx استفاده میکنی، Certbot همه کارا رو برات انجام میده. بهطور خودکار گواهی رو میگیره و تنظیمات Nginx رو بهروزرسانی میکنه تا سایتت از HTTPS استفاده کنه.
چالش پیشفرض: پلاگین Nginx از HTTP-01 استفاده میکنه. یعنی Certbot یه فایل کوچولو توی سایتت قرار میده و Let’s Encrypt از طریق HTTP بررسی میکنه که مالک دامنهای یا نه.
دستور اجرا:
certbot --nginx -d example.com -d www.example.com
اگه از Apache بهعنوان سرور وب استفاده میکنی، پلاگین Apache بهطور خودکار همه تنظیمات HTTPS رو برات انجام میده. درست مثل Nginx، فقط کافیه یه دستور بزنی و گواهی روی سرورت نصب بشه.
چالش پیشفرض: اینم از HTTP-01 استفاده میکنه.
دستور اجرا:
certbot --apache -d example.com
فرض کن سرور وب نداری یا نمیخوای تنظیماتش رو به هم بزنی. اینجاست که Standalone به کمکت میاد. Certbot خودش یه وبسرور کوچیک و موقتی راه میاندازه تا چالش رو مدیریت کنه و گواهی SSL رو دریافت کنه.
چالش پیشفرض: تو این حالت هم از HTTP-01 استفاده میکنه. اما میتونی چالشهای دیگه رو هم دستی مشخص کنی.
دستور اجرا:
certbot certonly --standalone -d example.com
اگه نمیخوای Certbot تنظیمات سرور وب رو تغییر بده و دوست داری بیشتر کنترل دست خودت باشه، Webroot بهترین انتخابه. توی این روش، Certbot فقط یه فایل توی وبروت قرار میده و Let’s Encrypt اون فایل رو بررسی میکنه.
چالش پیشفرض: از HTTP-01 استفاده میکنه.
دستور اجرا:
certbot certonly --webroot -w /path/to/webroot -d example.com
حالا فرض کن میخوای گواهی SSL برای همه زیردامنهها (Wildcard) بگیری. اینجاست که پلاگین DNS میتونه خیلی کمک کنه. توی این روش باید یه رکورد TXT به تنظیمات DNS دامنه اضافه کنی تا مالکیت دامنه تایید بشه.
چالش پیشفرض: اینجا از DNS-01 استفاده میشه.
دستور اجرا:
certbot --dns-cloudflare --dns-cloudflare-credentials ~/.cloudflare.ini -d example.com -d *.example.com
خب، حالا که با پلاگینها آشنا شدیم، وقتشه در مورد چالشها بیشتر توضیح بدیم. چالشها روشهایی هستن که Let’s Encrypt با اونها مالکیت دامنه رو تایید میکنه. هر چالش برای شرایط خاصی مناسبه.
این محبوبترین و سادهترین چالش برای اکثر کاربران هست. HTTP-01 از طریق HTTP تایید مالکیت رو انجام میده. Certbot یک فایل کوچیک در مسیر /.well-known/acme-challenge/ میذاره و Let’s Encrypt اون فایل رو بررسی میکنه.
دستور اجرا:
certbot --nginx -d example.com
خب برای دریافت certificate باید یه سایت http از قبل بالا آورده باشین، من این مراحل رو رد میکنم، برای این کار نیازه یه دامنه معتبر بگیرین و بتونین به آدرس سرورتون resolve بشه
الان من سایت cafe.dev.zerops.ir رو به صورت http آوردم بالا الان میخوایم بریم براش certificate بگیریم.
certbot --nginx -d cafe.dev.zerops.ir
خب میبینیم که certificate رو برای ما گرفته
و اگه بریم توی تنظیمات nginx.conf میبینیم که به صورت اتومیشن تنظیمات رو اضافه کرده
و اگه یه بار مرورگر رو رفرش کنیم میبینیم که تبدیل به https میشه
اگه میخوای یه گواهی Wildcard (مثلاً example.com.*
) بگیری یا اصلاً به HTTP و HTTPS دسترسی نداری، DNS-01 بهترین گزینهست. تو این روش باید یه رکورد TXT به DNS دامنت اضافه کنی.
دستور اجرا:
certbot certonly --manual --preferred-challenges dns -d *.example.com
الان من سایت 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 ببینیم
این چالش برای وقتی خوبه که HTTP غیرفعاله و فقط HTTPS داری. توی این روش از پروتکل ALPN استفاده میشه تا مالکیت دامنه تایید بشه.
دستور اجرا:
certbot certonly --standalone --preferred-challenges tls-alpn-01 -d example.com
خب، حالا که کلی پلاگین و چالشهای مختلف رو توضیح دادیم، دیگه میدونی چطور باید Let’s Encrypt رو بر اساس نیاز خودت تنظیم کنی. هر کدوم از این چالشها و پلاگینها برای سناریوهای خاصی مناسب هستن:
یکی از بهترین ویژگیهای Let’s Encrypt اینه که گواهیهای SSL بهصورت خودکار هر 60 روز تمدید میشن. این یعنی تو نیازی نداری بهصورت دستی تمدید گواهیهات رو انجام بدی و میتونی خیالت از بابت منقضی نشدن گواهیها راحت باشه.
اما اگه دوست داری خودت فرایند تمدید رو مدیریت کنی یا یک سیستم زمانبندی شخصی داشته باشی، Certbot امکاناتی مثل اجرای دستور دستی برای تمدید یا تنظیم در crontab رو فراهم کرده.
حالا بیا جزئیات بیشتری رو در مورد تمدید گواهیها و روشهای مختلف تمدید اونها بگیم و ببینیم برای هر چالش چه تنظیماتی لازمه.
وقتی Certbot رو نصب میکنی، بهصورت خودکار یه سرویس (یا job) در سیستم راهاندازی میشه که هر روز بررسی میکنه آیا گواهی نیاز به تمدید داره یا نه.
اگه خودت میخوای دستی فرایند تمدید رو اجرا کنی، فقط کافیه دستور زیر رو اجرا کنی:
sudo certbot renew
این دستور تمام گواهیهای موجود رو بررسی میکنه و اگر کمتر از 30 روز تا انقضای اونها مونده باشه، اقدام به تمدیدشون میکنه.
اگه دوست داری خودت یه 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 استفاده کردی (مثلاً با پلاگین Nginx یا Apache)، Certbot بهطور خودکار همون روش رو برای تمدید استفاده میکنه. یعنی:
نیاز به کار خاصی نداری، فقط مطمئن باش که سرورت بهدرستی روی پورت 80 در دسترسه.
0 2 * * * certbot renew --dns-cloudflare --quiet
اگه از TLS-ALPN-01 استفاده کردی، Certbot باید به پورت 443 دسترسی داشته باشه تا دوباره با استفاده از پروتکل ALPN مالکیت دامنه رو تایید کنه.
خب Let’s Encrypt فرآیند استفاده از HTTPS رو برای همه ساده و رایگان کرده. امنیت وبسایتت نه تنها برای خودت مهمه، بلکه باعث میشه کاربران هم احساس امنیت و اعتماد بیشتری به سایتت داشته باشن. با نصب Certbot و پیکربندی HTTPS، میتونی به راحتی ارتباطات امن رو برقرار کنی و از مزایای سئو و افزایش رتبهبندی در موتورهای جستجو بهره ببری.
اگر هنوز از HTTPS استفاده نمیکنی، وقتشه که با کمک Let’s Encrypt سایتت رو امن کنی!