منو سایت

  • خانه
  • وبلاگ
  • نحوه نصب گواهینامه SSL رایگان در Debian 10 برای ایمن سازی Nginx

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

 تاریخ انتشار :
/
  وبلاگ
نحوه نصب گواهینامه SSL رایگان در Debian 10 برای ایمن سازی Nginx

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

پیش نیازها

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

1. یک سرور با توزیع Debian 10 با یک کاربر غیر ریشه با دسترسی sudo و راه اندازی فایروال روی آن نصب شده است.

2. دامنه تخصصی

3. هر دو رکورد DNS زیر باید روی سرور شما تنظیم شوند:

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

4. مطمئن شوید Nginx روی Debian 10 نصب شده باشد و دامنه شما دارای سرور مسدود شده باشد.

نصب ssl در دبیان

نصب ssl در دبیان

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

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

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

مرحله 1: Certbot را نصب کنید

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

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

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

$ sudo apt update

در مرحله بعد، باید وابستگی های بسته python3-certbot-nginx را نصب کنید. این وابستگی ها عبارتند از:

  • python3-acme
  • python3-certbot
  • python3-mocket
  • python3-openssl
  • python3 – pkg – منابع
  • 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 را انجام داده و تأیید کنید.

مرحله 2: پیکربندی Nginx را بررسی کنید

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

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

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

$ 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 مجاز باشد.

مرحله 3: با استفاده از فایروال به ترافیک 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 اجازه کامل به نمایه Nginx بدهید و سپس مجوز HTTP اضافی Nginx را حذف کنید:

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 را اجرا کرده و گواهینامه های خود را بازیابی کنید.

مرحله 4: گواهی 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 را با وارد کردن یک عدد (1 یا 2) و سپس فشردن 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

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

مرحله 5: تمدید خودکار گواهی را با Certbot بررسی کنید

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

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

$ sudo certbot renew --dry-run

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

نتیجه

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

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

1. Let’s Encrypt چیست؟

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

2. Certbot چیست؟

Certbot ابزار یا نوعی نرم افزار برای دریافت گواهی SSL است. این ابزار همچنین با هر CA یا Certificate Authority که از پروتکل ACME پشتیبانی می کند کار می کند.

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

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

4. آیا گواهی رایگان SSL توسط Let’s Encrypt EV تولید شده است؟

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