چگونه Nginx را با نصب SSL رایگان در Debian 10 ایمن کنیم؟

Avatar
نویسنده: دریا آزادخواه
سه‌شنبه 26 مهر 1401
مطالعه: ۱۲ دقیقه ۰ نظر ۷۶۴ بازدید

Let’s Encrypt مرجع صدور گواهی (CA) است که به شما امکان می‌دهد تا به‌‌رایگان و به‌سادگی گواهی SSL/TLS دریافت کنید و بتوانید از پروتکل رمزگذاری‌شده HTTPS روی وب‌سایت خود استفاده کنید. ساده‌سازی این فرایند به‌دلیل استفاده از Certbot است که تلاش می‌کند تا تمام مراحل این فرایند را به‌طورخودکار انجام دهد. در این مقاله از آموزش دبیان بلاگ پارس پک، به شما خواهیم آموخت که چطور با استفاده از Certbot گواهی SSL را روی سروری با توزیع Debian 10 نصب و وب سرور Nginx را ایمن کنید؛ پس تا پایان با این مقاله همراه باشید. 

خرید SSL برای ایمن‌سازی Nginx از پارس پک

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

پیش‌نیازها

برای اینکه بتوانید مراحل گفته‌شده در این مطلب را گام‌به‌گام طی کنید و از آن بهترین استفاده را ببرید، باید پیش‌نیازهای زیر را داشته باشید:

۱. سروری با توزیع Debian 10 نصب‌شده روی آن به‌همراه کاربر غیر Root با دسترسی Sudo و فایروال راه‌اندازی‌شده 

۲. دامین اختصاصی

۳. هر دو رکورد DNS زیر باید روی سرور شما راه‌اندازی شده باشد:

  • رکورد your_domain که به آدرس IP عمومی سرور شما اشاره می‌کند.
  • رکورد www.your_domain که به آدرس IP عمومی سرور شما اشاره می‌کند.

خرید سرویس لینوکسی با سیستم‌عامل Debian از پارس پک

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

۴. مطمئن شوید که Nginx روی Debian 10 نصب شده است و نیز دامنه‌تان بلوک سرور دارد. 

آموزش نصب ssl روی debian

ایمن‌سازی Nginx با نصب گواهی SSL رایگان در Debian 10

روش گام‌ به‌ گام نصب گواهی SSL رایگان در Debian 10

برای این منظور، لازم است مراحل زیر را به‌ترتیب دنبال کنید:

گام اول: نصب Certbot

اولین گام برای دریافت گواهی SSL رایگان از Let’s Encrypt، نصب نرم‌افزار Certbot روی سرور است. نصب پکیج python3-certbot-nginx از ریپوزیتوری Debian 10 به شما امکان نصب و استفاده از پلاگین Nginx Certbot را خواهد داد.

توجه کنید که Debian 10 در‌حال‌حاضر از Python 2.0 و Python 3.0 پشتیبانی می‌کند؛ اما Python 2.0 در ژانویه۲۰۲۰ منسوخ شده است. بنابراین، واضح است که استفاده از Python 3 و پکیج python3-certbot-nginx گزینه بهتری محسوب خواهد شد. 

قبل از نصب پکیج python3-certbot-nginx‌، ابتدا باید پکیج لیست خود را به‌روز کنید. برای این منظور، از دستور زیر استفاده کنید:

$ sudo apt update

سپس، باید وابستگی‌های پکیج python3-certbot-nginx را نصب کنید. این وابستگی‌ها عبارت‌اند از:

  • python3-acme
  • python3-certbot
  • python3-mock
  • python3-openssl
  • python3-pkg-resources
  • python3-pyparsing
  • python3-zope.interface

برای این منظور نیز، می‌توانید از دستور زیر استفاده کنید: 

$ sudo apt install python3-acme python3-certbot python3-mock python3-openssl python3-pkg-resources python3-pyparsing python3-zope.interface

در‌نهایت، پکیج python3-certbot-nginx نیز با استفاده از دستور زیر نصب خواهد شد:

$ sudo apt install python3-certbot-nginx

Certbot حالا فعال و آماده استفاده است. بااین‌حال، به‌منظور پیکربندی SSL برای Nginx، باید برخی تنظیمات را روی Nginx انجام دهید و تأیید کنید.

گام دوم: تأیید پیکربندی Nginx

Certbot برای اینکه بتوانید SSL را به‌طورخودکار پیکربندی کنید، باید بلوک سرور صحیح را در پیکربندی Nginx شما پیدا کند. به‌طورخاص این کار با جست‌وجوی یک دایرکتیو Server_name که با نام دامنه درخواستی‌تان مطابقت دارد، انجام خواهد شد.

پیش‌فرض ما این است که از قبل Nginx را روی سرورتان نصب کرده‌اید. در این‌ صورت، قاعدتاً باید بلوک سروری برای دامنه خود در مسیر /etc/nginx/sites-available/your_domain داشته باشید که در آن، دایرکتیو Server_name از قبل به‌‌خوبی تنظیم شده باشد.

برای بررسی این موضوع، فایل بلوک سرور دامنه خود را با کمک ویرایشگر متن دلخواه و استفاده از کد زیر باز کنید. در این مثال، می‌خواهیم از ویرایشگر nano برای باز‌کردن این فایل استفاده کنیم:

$ sudo nano /etc/nginx/sites-available/your_domain

حالا خط server_name را در این فایل پیدا کنید. احتمالاً چیزی شبیه به این باشد: 

...
server_name your_domain www.your_domain;
...

اگر این خط را پیدا کردید، می‌توانید از ویرایشگر خود خارج شوید؛ اما درصورتی‌که این خط در فایل شما موجود نبود، ابتدا باید این خط را درون فایل خود قرار دهید و فایل را ذخیره کنید و سپس از ویرایشگر خارج شوید. بعد از اینکه ویرایشگر خود را بستید، باید سینتکس ویرایش‌های اِعمال‌شده روی فایل پیکربندی را تأیید کنید. انجام این کار با استفاده از دستور زیر امکان‌پذیر است:

$ sudo nginx -t

درصورتی‌که پس از صدور این دستور با خطایی روبه‌رو شدید، باید فایل پیکربندی را مجدداً با استفاده از روش عنوان‌شده در بالا باز و مشکل را برطرف کنید. این مشکل ممکن است به‌‌دلیل اشتباه‌های تایپی یا جا‌انداختن کاراکتر ایجاد شده باشد. پس از رفع مشکل، باید Nginx را مجدداً لود کنید تا تغییرات پیکربندی جدید اِعمال شود:

$ sudo systemctl reload nginx

حالا Certbot می‌تواند بلوک سرور صحیح را پیدا و آن را به‌روز کند. در گام بعدی، باید فایروال را به‌روز کنید تا ترافیک HTTPS مجاز شود.

گام سوم: مجوز‌دادن به ترافیک HTTPS با استفاده از فایروال

در این مرحله، با استفاده از فایروال باید ترافیک HTTPS را مجاز کنید؛ اما قبل‌از‌آن باید تنظیمات فعلی فایروال را بررسی کنید. برای انجام این کار، از دستور زیر استفاده کنید:

$ sudo ufw status

در این‌ صورت، احتمالاً با متنی شبیه به متن زیر مواجه خواهید شد. همان‌طور‌که مشخص است، تنظیمات در این مثال به‌گونه‌ای است که فقط ترافیک HTTP مجاز شده است:

Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

برای فعال‌کردن ترافیک HTTPS، ابتدا باید به پروفایل Nginx Full مجوز بدهید و در‌ادامه نیز، مجوز اضافی Nginx HTTP را حذف کنید:

sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'

با دستور ufw status، وضعیت تنظیمات را مجدداً بررسی کنید:

$ sudo ufw status

اگر تمامی مراحل قبلی را به‌درستی انجام داده باشید، خروجی دستور بالا باید به‌صورت زیر باشد:

Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)

در گام بعدی، باید Certbot را اجرا و گواهی‌های خود را واکشی کنید.

گام چهارم: دریافت گواهی SSL

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

$ sudo certbot --nginx -d your_domain -d www.your_domain

این دستور Certbot را با استفاده از پلاگین Nginx اجرا می‌کند. همچنین، از -d برای تعیین دامنه‌هایی استفاده کنیم که می‌خواهیم گواهی SSL برای آن‌ها معتبر باشد. 

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

درصورتی‌که این روند موفقیت‌آمیز باشد، شما باید تعیین کنید که چطور می‌خواهید تنظیمات HTTPS خود را پیکربندی کنید:

Output
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

روش پیکربندی تنظیمات HTTPS را با تایپ یک عدد (۱ یا ۲) انتخاب کنید و سپس کلید Enter را فشار دهید. در این‌ صورت، پیکربندی به‌روزرسانی و Nginx نیز برای استفاده از تنظیمات جدید مجدداً بارگیری می‌شود. 

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

Output
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/your_domain/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/your_domain/privkey.pem
   Your cert will expire on 2019-10-08. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

بدین‌ترتیب، گواهی‌های شما دانلود و نصب و Load خواهند شد. حالا وب‌سایت خود را با استفاده از پروتکل https باز و به نشانگر امنیتی قرار‌گرفته در ابتدای URL وب‌سایت توجه کنید. اگر آیکون قفلی که معمولاً به رنگ سبز نشان داده می‌شود، در ابتدای URL قرار گرفته باشد، یعنی این فرایند به‌درستی انجام شده و حالا وب‌سایتتان ایمن است. همچنین، درصورتی‌که سرور خود را با استفاده از SSL Labs آزمایش کنید، درجه A را دریافت خواهید کرد. حالا همه‌چیز مرتب است؛ اما اجازه دهید به‌عنوان آخرین قدم، روند تمدید گواهی را نیز امتحان کنیم. 

گام پنجم: تأیید تمدید خودکار گواهی با Certbot

گواهینامه‌های SSL صادر‌شده Let’s Encrypt فقط ۹۰ روز اعتبار دارند و پس‌از‌آن باید آن را تمدید کنید. در این مقاله آموزشی از بلاگ پارس پک، بسته Certbot نصب‌شده با افزودن اسکریپت تمدید /etc/cron.d. این کار را به‌طورخودکار برایتان انجام خواهد داد. روش کار نیز بدین‌ترتیب است که این اسکریپت دو بار در طول روز اجرا می‌شود و به‌صورت کاملاً خودکار گواهی‌هایی را تمدید می‌کند که تاریخ انقضای آن‌ها کمتر از ۳۰ روز باشد. 

برای امتحان این اسکریپت، می‌توانید از دستور زیر استفاده کنید:

$ sudo certbot renew --dry-run

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

برای آشنایی بیشتر با راهنمای صدور و نصب گواهینامه SSL رایگان پارس پک در کنترل‌پنل دایرکت‌ادمین می‌توانید مقاله زیر را بخوانید.

آموزش نصب گواهینامه SSL رایگان پارس پک

جمع‌بندی

استفاده از پروتکل HTTPS برای ایمن‌سازی وب‌سایت از‌جمله نکات مهمی است که هر وب‌سایتی باید به آن توجه کند. این کار با استفاده از نصب گواهی SSL معتبر روی سرور انجام می‌شود. در این مقاله از آموزش لینوکس بلاگ پارس پک، نحوه ایمن‌سازی سرور با توزیع Debian 10 را توضیح دادیم. این روند شامل نصب Certbot، دریافت گواهی SSL و نصب آن و نحوه فعال‌سازی تمدید خودکار گواهی SSL است. 

برای نصب گواهی SSL رایگان روی Nginx در Debian 10 می‌توانید از نرم‌افزار Certbot روی سرور استفاده کنید. این‌ نرم‌افزار امکان صدور گواهینامه‌ اس اس‌ال رایگان را برای رمزنگاری اطلاعات بین سرور و کاربران فراهم می‌کند. ایمن‌سازی انجین‌ایکس با نصب SSL رایگان در دبیان ۱۰ نه‌تنها به افزایش امنیت وب‌سایت و محافظت از داده‌های شخصی و محرمانه کاربران کمک زیادی می‌کند، بلکه در سئو وب‌سایت و افزایش تجربه کاربری هم نقش موثری دارد.

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

۱. Let’s Encrypt چیست؟

Let’s Encrypt سرویسی است که با استفاده از آن خواهید توانست گواهی SSL رایگان دریافت کنید. این کار با استفاده از API خودکار انجام می‌شود. 

۲. Certbot چیست؟

Certbot ابزار یا به‌نوعی نرم‌افزاری برای دریافت گواهی SSL است. این ابزار با هر CA یا مرجع صدور گواهینامه‌ای که از پروتکل ACME پشتیبانی می‌کند، نیز کار می‌کند.

۳. آیا گواهی‌ های صادر‌شده Let’s Encrypt مطمئن است؟

بله، Let’s Encrypt مرجع معتبر صدور گواهی SSL است؛ بنابراین از‌نظر ایمن‌بودن، گواهی‌های صادر‌شده این CA مانند گواهی‌های غیر‌رایگان کاملاً ایمن است.

۴. آیا گواهی رایگان SSL ایجاد‌شده Let’s Encrypt از نوع EV است؟

خیر، EV کامل‌ترین نوع گواهی SSL است که با استفاده از آن نام رسمی شرکت شما نیز در توضیحات گواهی درج می‌شود. این گواهی رایگان نیست و برای دریافت آن باید مدارک هویتی کسب‌و‌کار خود را به مرجع صدور گواهی ارائه دهید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


ارسال دیدگاه در وبلاگ پارس‌پک را مطالعه کرده و آن‌ها را می‌پذیرم.

مقالات مرتبط این مطلب را از دست ندهید

با خدمات ابری پارس پک آشنا شوید

اولین ارائه‌دهنده خدمات رایانش ابری در ایران هستیم