مقدمه
Let’s Encrypt یک مرجع صدور گواهینامه (CA) است که راهی برای دریافت و نصب گواهیهای رایگان TLS/SSL ارائه میکند و در نتیجه HTTPS رمزگذاری شده را در سرورهای وب فعال میکند. این فرآیند را با ارائه یک سرویس گیرنده نرم افزاری، Certbot، ساده می کند که سعی می کند اکثر (اگر نه همه) مراحل مورد نیاز را خودکار کند. در حال حاضر، کل فرآیند دریافت و نصب گواهی بر روی Apache و Nginx کاملاً خودکار است.
در این آموزش، شما از Certbot برای دریافت گواهینامه SSL رایگان برای Nginx در اوبونتو 18.04 و تنظیم گواهینامه خود برای تمدید خودکار استفاده خواهید کرد.
پیش نیازها
- یک سرور اوبونتو 18.04 با دنبال کردن این راهاندازی اولیه سرور برای اوبونتو 18.04 راهاندازی شد، شامل یک کاربر غیر ریشه sudo و یک فایروال.
- یک نام دامنه کاملاً ثبت شده این آموزش از your_domain در کل استفاده خواهد کرد. می توانید یک نام دامنه را در Namecheap خریداری کنید، یک نام دامنه را به صورت رایگان در Freenom دریافت کنید، یا از ثبت کننده دامنه انتخابی خود استفاده کنید.
- هر دو رکورد DNS زیر برای سرور شما تنظیم شده است. برای جزئیات بیشتر در مورد نحوه افزودن آنها، می توانید این مقدمه را برای DigitalOcean DNS دنبال کنید.
- یک رکورد با your_domain که به آدرس IP عمومی سرور شما اشاره دارد.
- یک رکورد با www.your_domain که به آدرس IP عمومی سرور شما اشاره می کند.
- Nginx با دنبال کردن نحوه نصب Nginx در اوبونتو 18.04 نصب شده است. مطمئن شوید که یک بلوک سرور برای دامنه خود دارید. باز هم، این آموزش از /etc/nginx/sites-available/your_domain به عنوان مثال استفاده می کند.
مرحله 1 – نصب Certbot
اولین قدم برای استفاده از Let’s Encrypt برای دریافت گواهی SSL این است که نرم افزار Certbot را روی سرور خود نصب کنید.
پروژه Certbot توصیه می کند که اکثر کاربران نرم افزار را از طریق snap نصب کنند، یک مدیر بسته که در اصل توسط Canonical (شرکت پشت سر اوبونتو) توسعه یافته بود و اکنون در بسیاری از توزیع های لینوکس موجود است:
sudo snap install --classic certbot
خروجی شما نسخه فعلی Certbot و نصب موفقیت آمیز را نشان می دهد:
Output
certbot 1.21.0 from Certbot Project (certbot-eff✓) installed
سپس، یک پیوند نمادین به /snap/bin/certbot قابل اجرایی تازه نصب شده از پوشه /usr/bin/ ایجاد کنید. این اطمینان حاصل می کند که دستور certbot می تواند به درستی روی سرور شما اجرا شود. برای این کار دستور ln زیر را اجرا کنید. این شامل پرچم -s است که یک پیوند نمادین یا نرم ایجاد می کند، در مقابل یک پیوند سخت:
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Certbot اکنون آماده استفاده است، اما برای اینکه بتواند SSL را برای Nginx پیکربندی کند، باید برخی از تنظیمات Nginx را تأیید کنید.
مرحله 2 – تأیید پیکربندی Nginx
Certbot باید بتواند بلوک سرور صحیح را در پیکربندی Nginx شما پیدا کند تا بتواند SSL را به طور خودکار پیکربندی کند. به طور خاص، این کار را با جستجوی یک دستورالعمل 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;
...
اگر چنین شد، از ویرایشگر خود خارج شوید و به مرحله بعدی بروید.
اگر اینطور نیست، آن را به روز کنید تا مطابقت داشته باشد. سپس فایل را ذخیره کرده و از ویرایشگر خود خارج شوید. اگر از نانو استفاده می کنید، می توانید این کار را با فشار دادن CTRL + X و سپس Y و ENTER انجام دهید.
اکنون نحو ویرایش های پیکربندی خود را تأیید کنید:
sudo nginx -t
اگر خطایی دریافت کردید، فایل بلوک سرور را دوباره باز کنید و اشتباهات تایپی یا نویسه های گم شده را بررسی کنید. هنگامی که نحو فایل پیکربندی شما درست شد، Nginx را دوباره بارگیری کنید تا پیکربندی جدید بارگیری شود:
sudo systemctl reload nginx
Certbot اکنون می تواند بلوک سرور صحیح را پیدا کرده و آن را به روز کند.
در مرحله بعد، فایروال را برای اجازه دادن به ترافیک HTTPS به روز می کنید.
مرحله 3 – اجازه دادن به HTTPS از طریق فایروال
اگر فایروال ufw را فعال کرده اید، همانطور که توسط راهنماهای پیش نیاز توصیه شده است، باید تنظیمات را برای اجازه دادن به ترافیک HTTPS تنظیم کنید. خوشبختانه، Nginx پس از نصب، چند نمایه را با ufw ثبت می کند.
با اجرای موارد زیر می توانید تنظیمات فعلی را بررسی کنید:
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 را حذف کنید:
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
اکنون هنگامی که فرمان وضعیت ufw را اجرا می کنید، این قوانین جدید را منعکس می کند:
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 your_domain
این ربات certbot را با افزونه –nginx اجرا می کند و از -d برای تعیین نام هایی که می خواهید گواهینامه برای آنها معتبر باشد استفاده می کند.
اگر اولین باری است که certbot را اجرا می کنید، از شما خواسته می شود یک آدرس ایمیل وارد کنید و با شرایط خدمات موافقت کنید. پس از انجام این کار، certbot با سرور Let’s Encrypt ارتباط برقرار می کند تا یک گواهی برای دامنه شما درخواست کند. در صورت موفقیت، خروجی زیر را دریافت خواهید کرد:
Output
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem
This certificate expires on 2022-01-27.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for your_domain to /etc/nginx/sites-enabled/your_domain
Successfully deployed certificate for www.your_domain to /etc/nginx/sites-enabled/your_domain
Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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 می گیرد.
اکنون که گواهی SSL خود را دریافت کرده اید، آخرین مرحله آزمایش فرآیند تمدید است.
مرحله 5 – تأیید تمدید خودکار Certbot
گواهینامه های Let’s Encrypt فقط برای نود روز معتبر هستند. این برای تشویق کاربران به خودکارسازی فرآیند تمدید گواهی است. بسته certbot که نصب کرده اید با افزودن یک اسکریپت تجدید به /etc/cron.d از این کار مراقبت می کند. این اسکریپت دو بار در روز اجرا می شود و به طور خودکار هر گواهی را که ظرف سی روز پس از انقضا باشد تمدید می کند.
برای آزمایش فرآیند تمدید، میتوانید یک اجرا خشک با certbot انجام دهید:
sudo certbot renew --dry-run
اگر خطا دریافت نکردید، همه چیز آماده است. در صورت لزوم، Certbot گواهیهای شما را تمدید میکند و Nginx را دوباره بارگیری میکند تا تغییرات را دریافت کند. اگر فرآیند تمدید خودکار شکست بخورد، Let’s Encrypt پیامی به ایمیلی که مشخص کردهاید ارسال میکند و به شما هشدار میدهد زمانی که گواهی شما در شرف انقضا است.
نتیجه
در این آموزش، شما certbot مشتری Let’s Encrypt را نصب کردید، گواهینامه های SSL را برای دامنه خود دانلود کردید، Nginx را برای استفاده از این گواهی ها پیکربندی کردید و تمدید خودکار گواهی را تنظیم کردید. اگر سؤالات بیشتری در مورد استفاده از Certbot دارید، مستندات آنها محل خوبی برای شروع است.