آموزش نصب Let s Encrypt گواهینامه رایگان SSL در ابونتو

مقدمه:

Let's Encrypt یک گواهینامه (CA) است که برای دریافت و نصب آسان گواهی های TLS / SSL به صورت رایگان فراهم شده. که https رمزگذاری شده در سرور های وب رو فعال میکنه. این فرایند با ارائه یک سروریس نرم افزاری Certbot ساده تره و ما با این  نرم افزار تا امنیت سایتمونو بالا ببریم. همه ی مراحل به صورت خودکار انجام میشه ( البته این فرایند برای به دست اوردن نصب یک گواهینامه به طور کامل در Apache و Nginx خودکار است.

در این آموزش از Certbot برای دریافت یک گواهینامه SSL رایگان برای Nginx در ابونتو 18.04 استفاده خواهیم کرد و گواهینامه خودمون رو به صورت خودکار تمدید خواهیم کرد.

توی این آموزش سعی کنین از یک فایل بلوک سرور Nginx جداگانه برای هر سایت (دامنه) استفاده کنید زیرا این امر از اشتباهات رایج و حفظ پرونده های پیش فرض به عنوان پیکربندی برگشت پذیر جلوگیری میکند.

پیش نیاز ها

برای پیکربندی این آموزش شما به این موارد نیاز دارید:

 

  • یک سرور ابونتو 18.04 با پیکربندی و تنظیم اولیه سرور از جمله دسترسی  Sudo و root و یک فایروال نصب شده.
  • نام دامنه ی کاملا ثبت شده. این آموزش از example.ir استفاده خواهد کرد.
  • تنظیمات زیر را در DNS دامنه ی خود اعمال کنید.
    • یک رکورد A با عنوان example.ir که به آدرس IP عمومی سرور شما اشاره دارد
    • یک رکورد A با عنوان www.example.ir که به IP عمومی شما اشاره دارد.
  • مطمعن شوید که Nginx را نصب کردیده اید ( " نصب نکردید ؟ آموزش نصب Nginx در ابونتو 18.04") این آموزش نمونه ای از /etc/nginx/sites-available/example.ir است.

قدم اول: نصب Certbot

اولین قدم برای نصب Let's Encrypt برای به دست آوردن گواهینامه SSL  این که نرم افزار Certbot را بر روی سرور خودتان نصب کنید.

Certbot در توسعه توسعه و توزیع ها بسیار فعال است بنابراین این بسته های Certbot  ارائه شده توسط ابونتو  مسنوخ میشوند با این حال برنامه نویسان Certbot یک پکیج نرم افزاری در ابونتو را با نسخه های به زور نگه میدارد

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

ابتدا پکیج را اضافه کنید :

sudo add-apt-repository ppa:certbot/certbot

برای پذیرفتن باید ENTER وارد کنید

نصب نرم افزار Certbot با apt:

sudo apt install python-certbot-nginx

حال Certbot آماده استفاده است برای این که آن را برای پیکربندی SSL در Nginx پیکربندی کنیم باید برخی تنظیمات Nginx را بررسی یا تغییر دهیم:

مرحله دوم: تایید پیکربندی Nginx

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

وارد آدرس /etc/nginx/sites-available/example.ir/ شوید و name_server را تنظیم کنید

برای بررسی فایل برای دامنه خودتون از nano یا هر ویرایشگر(ادیتور) ی که دوست داشتید استفاده و باز کنید:

sudo nano /etc/nginx/sites-available/example.ir

قسمت Name_server رو پیدا کنین و این قسمت رو در اون وارد کنید اگه وارد نکردید

Address :  /etc/nginx/sites-available/example.ir
...
server_name example.ir www.example.ir;
...

اگر تنظیمات را وارد کرده بودید به مرحله ی بعد بروید

اگر این کار را نکردید اونو به روز کنید سپس فایل رو ذخیره کنید، ویرایشگر رو ترک کنید و نحوه ویرایش های خودتون رو تایید کنید:

sudo nginx -t

اگه ارروری دریافت کردین فایل بلوک که در قسمت قبل ویرایش کردیم رو باز کنید و کارکتر هایی که وارد کردید و چک کنید هنگامی که همچی درست کار کرد و ارروری نداشتید Nginx رو دوباره پیکربندی کنید .

sudo systemctl reload nginx

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

توی مرحله بعد باید به فایروال برای مدیریت ترافیک https اجازه دهیم

مرحله سوم: اجازه دادن به HTTPS از طریق فایروال

اگه فایروال ufw را فعال کنید همانطور که توی آموزش های قبلی توصیه شده بود باید تنظیمات را برای ترافیک HTTPS تنظیم کنیم خوشبختانه Nginx چندین پروفایل را با ufw در هنگان نصب تنظیم میکند

شما میتوانید تنظیمات فعلی را با تایپ کردین این گزینه ببینید:

sudo ufw status

وقتی شما برای اولین بار توی سرورتون از این گزینه استفاده کنید احتمالا تنها ترافیک http مجاز است برای وب سرورتون:

خروجی :
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'

وضعیت شما حال باید به اینگونه باشد

sudo ufw status

خروجی :

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 از  طریق پلاگین ها فراهم میکند برای استفاده از این افزونه گزینه ی زیر را وارد کنید:

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

با استفاده از --nginx plugin certbot اجرا میشود و با استفاده از -d برای مشخص کردن نام هایی که میخواهیم گواهینامه بدهیم را مشخص میکنیم

اگر این اولین بار است که شما certbot را اجرا میکنیم از شما خواسته میشود یک آدرس ایمیل وارد کنید و با شرایط سرویس موافقت کنید پس از انجام این کار ertbot با سرور Let's Encrypt ارتباط برقرار میکند و سپس یک چالش برای تایید اینکه شما دامنه ای را که درخواست میکنید گواهی کرده اید کنترل میکند

اگر این قسمت موفقیت آمیز باشد certbot از شما میخواد تنظیمات HTTPS خود را پیکر بندی کنید

خروجی:

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):

گزینه ی مورد نظر را انتخاب کنید و enter را فشار دهید پیکر بندی به روز شود و nginx بارگذاری خواهد شد تا تنظیمات جدید را انتخاب کنید

certbot با پیامی به شما میگوید که روند موفقیت آمیز بوده و گواهی شما ذخیره شده است.

خروجی :
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.ir/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.ir/privkey.pem
   Your cert will expire on 2018-07-23. 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:// بارگیری کنید و نشانگر امنیتی مرور گر خود را مشاهد کنید این نشان میدهد که سایت به درستی امن است معمولا با یک قفل سبز دیده میشود. اگر شما سرور خود را با استفاده از آزمون سرور SSL Labs تست کنید، رتبه Aدریافت خواهید کرد

مرحله ی پنجم - تایید خودکار Certbot

گواهینامه های رمزگذاری فقط برای 90 روز معتبر است این کار برای تشویق کاربران برای به روز رسانی گواهینامه خودشون است. بسته certbot که ما نصب کرده ایم با افزودن یک اسکریپت مجدد به  /etc/cron.d hc دو بار در روز اجرا میشود و به طور خودکار هر گواهی را که ظرف 30 روز از انقضای ان مانده است را تمدید میکند

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

sudo certbot renew --dry-run

اگر مشکلی به وجود نیامده باشد همه تنظیمات را اعمال میکند و در صورت لزوم certbot گواهی های شما را تجدید میکند و Nginx را مجددا بارگیری میکند تا تغییرات را انتخاب کنید اگر روند تجدید تنواند درست کار کند Let's Encrypt پیامی به ایمیل مشخص شده ارسال میکند و هشدار میدهد که گواهینامه در حال پایان است.

نتیجه :

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