نصب SSL رایگان روی سرور، امروزه دیگر یک انتخاب لوکس نیست بلکه یک ضرورت امنیتی و سئویی است. گواهی SSL با رمزنگاری ارتباط بین مرورگر کاربر و سرور مجازی شما، از شنود و دستکاری داده‌ها جلوگیری می‌کند و همان قفل سبز کنار آدرس سایت را فعال می‌سازد. خوشبختانه با پروژه Let's Encrypt می‌توانید به‌صورت کاملاً رایگان و خودکار گواهی معتبر دریافت و تمدید کنید. در این آموزش گام‌به‌گام یاد می‌گیرید که چطور روی وب‌سرورهای Nginx و Apache گواهی SSL نصب و آن را به‌صورت خودکار تمدید کنید. اگر هنوز سروری برای میزبانی سایت خود ندارید، می‌توانید با خرید سرور مجازی شروع کنید.

چرا نصب SSL رایگان اهمیت دارد؟

گواهی SSL/TLS ارتباط بین کاربر و سرور را رمزنگاری می‌کند. بدون آن، تمام داده‌های ردوبدل‌شده از جمله رمزهای عبور، اطلاعات کارت بانکی و داده‌های شخصی به‌صورت متن ساده در شبکه منتقل می‌شوند و هر کسی در مسیر می‌تواند آن‌ها را شنود کند. این موضوع به‌ویژه در شبکه‌های عمومی مانند وای‌فای کافه‌ها خطرناک است.

علاوه بر امنیت، مزایای دیگری نیز وجود دارد. مرورگرهای مدرن سایت‌های بدون HTTPS را «ناامن» علامت می‌زنند که اعتماد کاربر را از بین می‌برد. همچنین گوگل HTTPS را به‌عنوان یک فاکتور رتبه‌بندی در نظر می‌گیرد، بنابراین نصب SSL رایگان مستقیماً به سئوی سایت شما نیز کمک می‌کند.

Let's Encrypt چیست؟

Let's Encrypt یک مرجع صدور گواهی (CA) غیرانتفاعی است که گواهی‌های SSL معتبر را به‌صورت رایگان و خودکار صادر می‌کند. این گواهی‌ها توسط تمام مرورگرهای اصلی معتبر شناخته می‌شوند. تنها تفاوت مهم با گواهی‌های تجاری این است که اعتبار آن‌ها ۹۰ روزه است، اما فرایند تمدید کاملاً خودکار انجام می‌شود و نیازی به دخالت دستی ندارید.

مبنای کار Let's Encrypt پروتکلی به نام ACME است. این پروتکل به‌صورت خودکار مالکیت شما بر دامنه را تأیید می‌کند. فرایند به این شکل است که Certbot یک چالش (Challenge) از سرور Let's Encrypt دریافت می‌کند و باید ثابت کند که شما واقعاً کنترل دامنه یا سرور را در اختیار دارید. این تأیید معمولاً از دو راه انجام می‌شود: چالش HTTP که در آن یک فایل خاص روی سرور شما قرار می‌گیرد و چالش DNS که در آن یک رکورد خاص در تنظیمات DNS دامنه اضافه می‌شود. پس از تأیید موفق، گواهی صادر می‌شود.

انواع اعتبارسنجی گواهی SSL

گواهی‌های SSL بر اساس سطح اعتبارسنجی به سه دسته تقسیم می‌شوند که دانستن تفاوت آن‌ها به انتخاب درست کمک می‌کند:

  • اعتبارسنجی دامنه (DV): فقط مالکیت دامنه را تأیید می‌کند و سریع‌ترین نوع است. Let's Encrypt از این نوع گواهی صادر می‌کند و برای اکثر سایت‌ها کافی است.
  • اعتبارسنجی سازمانی (OV): علاوه بر دامنه، هویت سازمان نیز بررسی می‌شود و نیازمند مدارک است.
  • اعتبارسنجی توسعه‌یافته (EV): سختگیرانه‌ترین نوع که هویت قانونی شرکت را به‌طور کامل تأیید می‌کند و بیشتر برای سازمان‌های بزرگ و مالی کاربرد دارد.

از نظر قدرت رمزنگاری، هر سه نوع کاملاً یکسان هستند و تفاوت آن‌ها فقط در میزان اعتبارسنجی هویت است. بنابراین برای امنیت فنی، گواهی DV رایگان دقیقاً به‌اندازه گواهی‌های گران‌قیمت امن است.

پیش‌نیازهای نصب SSL رایگان

پیش از شروع، مطمئن شوید که موارد زیر آماده هستند:

  • یک نام دامنه معتبر که رکورد A آن به IP سرور شما اشاره می‌کند.
  • دسترسی SSH با کاربر دارای دسترسی sudo به سرور.
  • یک وب‌سرور نصب‌شده (Nginx یا Apache).
  • باز بودن پورت‌های ۸۰ و ۴۴۳ در فایروال.

نکته مهم این است که برای تأیید مالکیت دامنه، Let's Encrypt باید بتواند از طریق پورت ۸۰ به سرور شما دسترسی داشته باشد. بنابراین قبل از شروع، پورت‌های لازم را در فایروال باز کنید:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

نصب Certbot برای دریافت گواهی

Certbot ابزار رسمی و توصیه‌شده Let's Encrypt برای دریافت و مدیریت گواهی‌هاست. روش پیشنهادی نصب آن استفاده از snap است که همیشه آخرین نسخه را ارائه می‌دهد:

sudo apt update
sudo apt install snapd -y
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

البته در بسیاری از توزیع‌ها می‌توانید Certbot را مستقیم از مخازن apt نیز نصب کنید که ساده‌تر است:

sudo apt install certbot python3-certbot-nginx -y

نصب SSL رایگان روی Nginx

اگر از Nginx استفاده می‌کنید، Certbot می‌تواند به‌صورت خودکار پیکربندی وب‌سرور شما را ویرایش کند و گواهی را نصب کند. کافی است دستور زیر را اجرا کنید:

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

در حین اجرا، Certbot چند سؤال می‌پرسد: ایمیل شما (برای هشدارهای انقضا)، پذیرش شرایط استفاده و اینکه آیا می‌خواهید ترافیک HTTP را به‌صورت خودکار به HTTPS هدایت کند. توصیه می‌شود گزینه هدایت (redirect) را انتخاب کنید تا همه کاربران به نسخه امن هدایت شوند.

پس از اتمام، Certbot گواهی را نصب و پیکربندی Nginx را به‌روز می‌کند. حالا سایت شما روی HTTPS در دسترس است. برای اطمینان از صحت پیکربندی:

sudo nginx -t
sudo systemctl reload nginx

نصب SSL رایگان روی Apache

فرایند برای Apache بسیار مشابه است، فقط پلاگین متفاوتی استفاده می‌شود:

sudo apt install python3-certbot-apache -y
sudo certbot --apache -d example.com -d www.example.com

Certbot به‌صورت خودکار فایل‌های VirtualHost را ویرایش و ماژول SSL را فعال می‌کند.

تمدید خودکار گواهی

از آنجا که گواهی‌های Let's Encrypt فقط ۹۰ روز اعتبار دارند، تمدید خودکار حیاتی است. خوشبختانه Certbot این کار را به‌صورت خودکار انجام می‌دهد و یک تایمر systemd یا cron job برای بررسی دوره‌ای نصب می‌کند. برای اطمینان از عملکرد صحیح تمدید، می‌توانید یک تست خشک (dry-run) اجرا کنید:

sudo certbot renew --dry-run

اگر این دستور بدون خطا اجرا شود، تمدید خودکار به‌درستی کار می‌کند. برای بررسی وضعیت تایمر:

sudo systemctl status certbot.timer
sudo certbot certificates

دستور آخر فهرست گواهی‌های نصب‌شده و تاریخ انقضای هرکدام را نشان می‌دهد.

هشدار: گواهی معمولاً وقتی به ۳۰ روز مانده به انقضا برسد تمدید می‌شود. اگر سرور شما در زمان تمدید خاموش باشد یا پورت ۸۰ بسته شده باشد، تمدید ممکن است شکست بخورد. حتماً یک ایمیل معتبر هنگام ثبت وارد کنید تا Let's Encrypt پیش از انقضا به شما هشدار دهد.

تنظیمات پیشرفته امنیت SSL

نصب گواهی تنها بخشی از کار است؛ برای امنیت واقعی باید پیکربندی TLS را نیز سخت‌سازی کنید. یکی از مهم‌ترین تنظیمات، فعال کردن HSTS است که مرورگر را مجبور می‌کند همیشه از HTTPS استفاده کند. در پیکربندی Nginx اضافه کنید:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

همچنین باید پروتکل‌های قدیمی و ناامن مانند TLS 1.0 و 1.1 را غیرفعال کنید و فقط نسخه‌های امن را مجاز بگذارید:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;

بررسی کیفیت پیکربندی SSL

پس از انجام تنظیمات، توصیه می‌شود کیفیت پیکربندی SSL خود را با ابزارهای آنلاین مانند SSL Labs بررسی کنید. این ابزار به پیکربندی شما نمره می‌دهد و نقاط ضعف احتمالی را نشان می‌دهد. هدف رسیدن به نمره A یا A+ است.

گواهی wildcard برای زیردامنه‌ها

اگر تعداد زیادی زیردامنه دارید (مانند blog.example.com، shop.example.com و غیره)، به‌جای گرفتن گواهی جداگانه برای هرکدام، می‌توانید یک گواهی wildcard بگیرید که همه زیردامنه‌ها را پوشش می‌دهد. صدور گواهی wildcard حتماً نیازمند تأیید از طریق چالش DNS است:

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

در این حالت Certbot از شما می‌خواهد یک رکورد TXT خاص در تنظیمات DNS دامنه اضافه کنید تا مالکیت شما تأیید شود. برای تمدید خودکار گواهی wildcard، بهتر است از افزونه‌های DNS مربوط به ارائه‌دهنده DNS خود استفاده کنید تا فرایند تأیید به‌صورت خودکار انجام شود.

ریدایرکت اجباری به HTTPS

پس از نصب گواهی، باید مطمئن شوید که تمام ترافیک HTTP به‌صورت خودکار به HTTPS هدایت می‌شود. اگرچه Certbot معمولاً این کار را انجام می‌دهد، بهتر است پیکربندی را دستی نیز بررسی کنید. یک بلوک ساده ریدایرکت در Nginx به این شکل است:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

این تنظیم تضمین می‌کند که هیچ کاربری به‌طور تصادفی از نسخه ناامن سایت استفاده نکند و همه ارتباط‌ها رمزنگاری‌شده باشند.

جدول مقایسه گواهی رایگان و تجاری

ویژگیLet's Encrypt (رایگان)گواهی تجاری
هزینهرایگانسالانه پرداخت
مدت اعتبار۹۰ روز (خودکار)یک تا دو سال
سطح رمزنگارییکسان و کاملیکسان و کامل
اعتبارسنجی سازمانی (OV/EV)ندارددارد
گارانتی مالینداردمعمولاً دارد

برای اکثر وب‌سایت‌ها، وبلاگ‌ها و فروشگاه‌های کوچک تا متوسط، گواهی رایگان Let's Encrypt کاملاً کافی و مناسب است. گواهی‌های تجاری با اعتبارسنجی سازمانی بیشتر برای بانک‌ها و سازمان‌های بزرگ که به نشان اعتماد بصری خاص نیاز دارند کاربرد دارند.

نصب SSL بدون توقف وب‌سرور

گاهی نمی‌خواهید یا نمی‌توانید به Certbot اجازه دهید پیکربندی وب‌سرور را تغییر دهد، یا از یک وب‌سرور غیرمتعارف استفاده می‌کنید. در این حالت می‌توانید از حالت standalone یا webroot استفاده کنید. در حالت webroot، Certbot فایل چالش را در پوشه ریشه سایت شما قرار می‌دهد بدون اینکه وب‌سرور را متوقف کند:

sudo certbot certonly --webroot -w /var/www/html -d example.com

این روش برای محیط‌های تولیدی که نمی‌خواهید حتی برای چند ثانیه سرویس قطع شود بسیار مناسب است. پس از دریافت گواهی، مسیر فایل‌های گواهی را به‌صورت دستی در پیکربندی وب‌سرور خود معرفی می‌کنید. گواهی‌ها معمولاً در مسیر /etc/letsencrypt/live/example.com/ ذخیره می‌شوند و شامل فایل‌های fullchain.pem و privkey.pem هستند.

استفاده از محیط آزمایشی (Staging)

Let's Encrypt برای جلوگیری از سوءاستفاده، محدودیت نرخ (Rate Limit) دارد؛ یعنی در یک بازه زمانی مشخص فقط تعداد محدودی گواهی می‌توانید بگیرید. اگر در حال آزمایش پیکربندی هستید، حتماً از محیط staging استفاده کنید تا محدودیت واقعی شما مصرف نشود:

sudo certbot --nginx -d example.com --staging

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

عیب‌یابی مشکلات رایج

در صورت بروز مشکل هنگام نصب SSL رایگان، معمولاً یکی از موارد زیر عامل آن است:

  • خطای تأیید دامنه: رکورد DNS دامنه هنوز به سرور اشاره نمی‌کند یا هنوز منتشر نشده است.
  • پورت ۸۰ بسته است: فایروال یا وب‌سرور دیگری مانع دسترسی Certbot می‌شود.
  • محدودیت نرخ (Rate Limit): Let's Encrypt سقف تعداد درخواست در بازه زمانی دارد؛ در تست‌ها از محیط staging استفاده کنید.
  • پیکربندی نادرست وب‌سرور: فایل‌های VirtualHost یا server block به‌درستی تنظیم نشده‌اند.

یک راهکار برای جلوگیری از خطای محدودیت نرخ این است که پیش از هر تغییری، تعداد گواهی‌های درخواستی خود را مدیریت کنید و از درخواست‌های تکراری بی‌مورد خودداری کنید. همچنین بررسی کنید که چند زیردامنه را واقعاً نیاز دارید و آن‌ها را در یک گواهی واحد ترکیب کنید تا در مصرف سقف مجاز صرفه‌جویی شود.

با رعایت مراحل این راهنما، سایت شما به‌صورت امن و رایگان روی HTTPS اجرا خواهد شد و از مزایای امنیتی و سئویی آن بهره‌مند می‌شوید. به‌خاطر داشته باشید که نصب SSL تنها یک بخش از امنیت کلی سرور است و باید در کنار فایروال، به‌روزرسانی منظم و سایر اقدامات سخت‌سازی قرار گیرد تا یک زیرساخت واقعاً امن داشته باشید. برای مطالعه بیشتر می‌توانید به سایر مقالات رپیدو سرور مراجعه کنید.

سوالات متداول

آیا گواهی رایگان Let's Encrypt واقعاً امن است؟

بله. گواهی‌های Let's Encrypt از همان استاندارد رمزنگاری گواهی‌های تجاری استفاده می‌کنند و توسط تمام مرورگرهای اصلی معتبر شناخته می‌شوند. سطح امنیت رمزنگاری کاملاً یکسان است و تنها تفاوت در نوع اعتبارسنجی و مدت اعتبار آن‌هاست.

چرا گواهی من فقط ۹۰ روز اعتبار دارد؟

Let's Encrypt عمداً اعتبار کوتاه در نظر گرفته تا امنیت بالاتر باشد؛ گواهی‌های کوتاه‌مدت در صورت لو رفتن کلید، پنجره سوءاستفاده کمتری دارند. چون تمدید کاملاً خودکار است، این کوتاهی هیچ زحمتی برای شما ایجاد نمی‌کند.

آیا می‌توانم یک گواهی برای چند دامنه بگیرم؟

بله. با استفاده از چند پرچم -d در دستور Certbot می‌توانید چندین دامنه و زیردامنه را در یک گواهی قرار دهید. همچنین امکان دریافت گواهی wildcard برای پوشش همه زیردامنه‌ها وجود دارد که نیازمند تأیید از طریق DNS است.

اگر تمدید خودکار شکست بخورد چه اتفاقی می‌افتد؟

اگر تمدید شکست بخورد و گواهی منقضی شود، مرورگرها به کاربران هشدار «اتصال ناامن» نشان می‌دهند. برای جلوگیری از این وضعیت، حتماً یک ایمیل معتبر ثبت کنید تا هشدار انقضا دریافت کنید و با دستور certbot renew --dry-run به‌صورت دوره‌ای صحت تمدید را بررسی نمایید.