منو سایت

  • خانه
  • وبلاگ
  • نحوه نصب یک گواهی SSL رایگان در Debian 10 برای Secure Nginx

نحوه نصب یک گواهی SSL رایگان در Debian 10 برای Secure Nginx

 تاریخ انتشار :
/
  وبلاگ
نحوه نصب یک گواهی SSL رایگان در Debian 10 برای Secure 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: گواهی را نصب کنید

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

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

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

$ sudo apt update

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

  • python3-acme
  • python3-certbot
  • python3-mock
  • 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 بدهید و سپس مجوز اضافی 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 را اجرا کرده و گواهینامه های خود را دریافت کنید.

مرحله 4: یک گواهی SSL دریافت کنید

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

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

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

اگر اولین بار است که از 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 وب سایت داده شده است توجه کنید. اگر آیکون قفل که معمولاً به رنگ سبز نشان داده می شود، در ابتدای URL قرار داده شده باشد، این فرآیند به درستی انجام شده است و وب سایت شما اکنون امن است. به علاوه، اگر سرورهای خود را با استفاده از آزمایشگاه SSL آزمایش کنید، نمره A دریافت خواهید کرد. الان همه چیز خوب است؛ اما به عنوان آخرین مرحله، فرآیند تمدید گواهی را امتحان کنید.

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

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

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

$ sudo certbot renew --dry-run

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

نتیجه

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

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

1. Let’s Encrypt چیست؟

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

2. گواهی چیست؟

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

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

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

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

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