زیرساخت ابری هایو
[dark-light-mode-switch]

SSL برای nginx با lets encrypt – ubuntu 20.04

فهرست مطالب

تو این آموزش یاد میگیریم چطور SSL رو در سرور ابونتو برای nginx فعال کنیم.

بعد از فعال سازی SSL در nginx میتونیم سایت یا پروژه ای که داریم رو با پورتکل HTTPS ارائه بدیم.

بعد از خواندن این آموزش:

  • ربات certbot جهت تمدید اتوماتیک SSL نصب و فعال میشود
  • یک SSL رایگان از Let’s Encrypt  بر روی دامنه مان نصب می شود
  • تنظیمات مربوط به کانفیگ nginx جهت فعال سازی SSL بصورت پیشفرض انجام میشود

تو این آموزش ما یک فایل کانفیگ جداگانه برای nginx ایجاد میکنم، همواره توصیه میشود که برای هر پروژه و دامنه یک فایل کانفیگ جدا داشته باشید.

پیشنیاز های فعال کردن SSL رایگان در سرور

برای اجرا و تکمیل این آموزش نیاز هست که موارد زیر را از پیش انجام داده باشید:

  • تنظیمات اولیه اوبنتو 

برای افزایش امنیت و کارایی سرور پیشنهاد می شود تنظیمات اولیه سرور ابونتو را حتما انجام بدید و یک کاربر غیر روت با دسترسی sudo داشته باشید.

  • یک دامین داشته باشید

برای فعال سازی SSL حتما باید یک دامین از پیش خریداری کرده باشید و اون رو به آیپی سرور تون وصل کرده باشید.

  • رکورد های DNS دامنه را تنظیم کرده باشید

بعد از خرید دامنه نیاز هست که 2 رکورد A به آیپی سرور در قسمت مدیریت DNS دامنه ایجاد کنید که دامنه به سرور شما وصل بشه.

نکته: برای مدیریت DNS دامنه خود می تونید از سرویس DNS هایو استفاده کنید. کافیه NS های این سرویس رو به دامنه خودتون اضافه کنید و بعد مدیریت DNS ها رو از داخل هایو داشته باشید (جهت اتصال دامنه به آیپی).

برای تنظیم رکورد های مربوطه بعد از ست شدن کامل NS های هایو به سرویس DNS هایو مراجعه کنید و رکورد های زیر را اضافه کنید.

    • یک رکورد A با عنوان www و مقدار آیپی سرور شما.
    • یک رکورد A با مقدار domain.com. با مقدار آیپی شما.

دقت داشته باشید که به جای عبارت domain.com دامنه خودتون رو وارد بکنید و حتما در آخر دامین یک دات (.) اضافه بزارید.

مثال:
haio.ir.

  • Nginx نصب شده باشد

برای این مورد پیشنهاد میشه مقاله آموزش نصب nginx در ubuntu 20.04 را بخوانید. دقت داشته باشید که بعد از نصب nginx حتما یک فایل کانفیگ برای دامین خود داشته باشید.

در این مقاله ما از /etx/nginx/sites-available/example.com/ استفاده میکنیم.

نصب Certbot در Ubuntu

اولین کاری که برای استفاده از Let’s Encrypt و دریافت SSL باید انجام بدیم اینه که ربات Certbot رو روی سرور نصب کنیم.

برای نصب certbot و افزونه مخصوص nginx دستور زیر رو اجرا کنید

sudo apt install certbot python3-certbot-nginx

certbot الان آماده استفاده هست، اما برای اینکه بصورت اتوماتیک SSL رو برای nginx تنظیم کنیم باید یکسری تنظیمات nginx رو بررسی کنیم.

بررسی تنظیمات Nginx برای فعال سازی SSL

سرت بات نیاز داره باید بتونه بخش درست مربوط به تنظیمات server فایل کانفیگ nginx رو پیدا بکنه تا تنظیمات مربوط به فعال سازی SSL رو بصورت اتوماتیک داخل کانفیگ سرور ایجاد کنه.

بخصوص نیاز هست که نام دامین شما در تنظیم server_name در فایل کانفیگ nginx نیز دقیقا مشابه دامینی باشه که میخواهید برای اون SSL رو فعال کنید.

اگر شما آموزش تنظیمات Nginx رو دنبال کرده باشید شما باید یک فایل کانفیگ برای دامین خود در آدرس /etc/nginx/sites-available/example.com/ داشته باشید.

برای بررسی ای مورد فایل تنظیمات مربوطه رو با دستور nano باز کنید

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

خط مربوط به server_name رو پیدا کنید. اون باید چیزی شبیه به این باشه:

server_name example.com www.example.com;

اگر همینطور هست از ویرایشگر نانو بیایید بیرون و ادامه بدید، اگر نیست این خط رو اصلاح کنید و آدرس دامین خودتون رو بنویسید.

در نهایت با دستور زیر بررسی کنید که سینتکس کد هاتون درست باشه

sudo nginx -t

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

اگر خطا نگرفتید با دستور زیر انجنیکس رو ریلود کنید:

sudo systemctl reload nginx

Certbot حالا میتونه تنظیمات درست سرور رو پیدا کنه و اونها رو بصورت اتوماتیک آپدیت کنه.

حالا بیایید فایروال رو آپدیت کنیم تا HTTPS رو قبول بکنه.

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

با توجه به اینکه در آموزش های پیشنیاز گفته بودیم فایروال ufw رو فعال کنید نیاز هست که تنظیمات مربوط به اون رو برای اجازه دسترسی https رو انجام بدیم.

مجوز های فعلی رو میتونید با دستور زیر ببینید:

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)

حالا برای اینکه دسترسی کامل به nginx https بدیم و دسترسی های 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 هست.

دریافت گواهینامه  SSL برای Nginx

certbot به همراه افزونه Nginx تمام کارهای لازم رو برای دریافت SSL و تنظیم مجدد nginx و حتی ریلود کردن اون درصورت نیاز رو انجام میده.

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

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

دقت داشته باشید که به جای دامین های مثالی که در دستور بالا اومده حتما دامین خودتون رو وارد کنید.

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

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

بعد از این Certbot به 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.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2020-08-18. 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"
- 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 لود بشه.

دقت داشته باشید که اگر قبلا سایتتون بدون Https داشته کار میکرده بخصوص اگر سایتتون با وردپرس راه اندازی شده و تازه الان https رو فعال کردید باید یکسری تنظیمات مربوط به وردپرس و یا اسکریپت خودتون رو نیز انجام بدید که با توجه به سیستم مدیریت محتواتون متغیر هست.

عمده کاری که باید انجام بدید تغییر آدرسی قبلی سایت از http به https هست.

خب در آخر بیایید مطمئن بشیم که Certbot قرار درست کار بکنه و یک ماه بعد گواهینامه ما رو خودش تمدید بکنه.

تایید تمدید اتوماتیک Certbot

گواهینامه های Let’s Encrypt همواره بصورت یک ماهه ارائه میشن و نیاز هست که هر ماه این گواهینامه تمدید بشه. که برای اینکار Certbot از روزی که یک گواهینامه برای سایتتون تهیه میکنید یک وظیفه برای خودش مشخص میکنه که  30 روز دیگه اون رو تمدید بکنه.

برای اینکه ممطئن بشیم که این وظیفه به درستی تعریف شده و سرت بات کارش رو قراره انجام بده با دستور زیر وضعیت رو بررسی میکنیم:

sudo systemctl status certbot.timer
خروجی
● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago
Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left
Triggers: ● certbot.service

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

sudo certbot renew --dry-run

اگر خطایی دریافت نکردید همه چیز داره به خوبی کار میکنه. وقتی زمانش برسه Certbot خودش گواهینامه شما رو تمدید میکنه و Nginx تنظیمات جدید رو اعمال میکنه.

اگر به هر دلیلی تمدید موفقیت آمیز نباشه Let’s Encrypt به شما ایمیل میزنه و از تمدید نشدن گواهینامه مطلع تون میکنه.

در نهایت

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

رایگان آموزش ببین - آموزش کار با سرویس های هایو

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

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