Let’s Encrypt یکی از ارائه دهندگان گواهی امنیتی است که فراهم کننده روشی ساده برای دریافت و نصب گواهیهای TLS/SSL برای فعالسازی رمزگذاری HTTPS بر روی سرور است. این ارائه دهنده با فراهم کردن یک کلاینت نرمافزاری به نام Certbot، تقریبا اکثرا مراحل نصب و راهاندازی گواهی را به طور خودکار انجام میدهد. در حال حاضر تمامی مراحل دریافت و نصب گواهی برای Nginx و Apache بطور کاملا خودکار صورت مییگیرد.
در این آموزش ما با استفاده از Certbot گواهی SSL رایگانی را برای Nginx در اوبونتو 18.04 دریافت و همچنین گواهی را به گونهای تنظیم میکنیم که بطور خودکار اعتبار آن تمدید شود.
در این آموزش از یک بلاک Nginx متفاوت از بلاک پیشفرض استفاده میکنیم. توصیه میکنیم که برای هر دامین در سرور خود یک بلاک جداگانه Nginx داشته باشید تا از ایجاد مشکلات احتمالی جلوگیری شود و فایل پیش فرض به عنوان یک راهنما همیشه در دسترس باشد.
پیش نیازها
در این آموزش به موارد زیر نیاز دارید:
- یک سرور اوبونتو 18.04 که تنظیمات ابتدایی آن مانند این آموزش «راهاندازی اولیه اوبونتو 18.04» انجام شده است و شامل یک کاربر غیر root با دسترسی sudo و یک فایروال است.
- یک نام دامنه. در این آموزش ما از دامین example.com استفاده میکنیم.
- تنظیم رکوردهای DNS برای اشاره به سرور.
- یک رکورد A با
example.com
که به آدرس آیپی عمومی سرور اشاره میکند. - یک A رکورد با
www.example.com
که به آدرس آیپی عمومی سرور اشاره میکند.
- یک رکورد A با
- Nginx نصب شده بر روی سرور. مطمئن شوید که برای دامین خود یک بلاک Nginx ایجاد کردهاید. در این آموزش از مسیر
etc/nginx/sites-available/example.com
به عنوان نمونه استفاده میشود.
قدم اول: نصب Certbot
اولین مرحله برای دریافت گواهی SSL نصب نرم افزار Certbot بر روی سرور است.
در اولین قدم مخزن Certbot را اضافه کنید:
با فشردن کلید اینتر دستور بالا را اجرا کنید.
پکیج Certbot را به وسیله apt
نصب کنید.
اکنون Certbot آماده استفاده است، اما برای اینکه بتواند SSL را برای Nginx تنظیم کند، باید برخی از تنظیمات Nginx را بررسی و تایید کنیم.
قدم دوم: تایید تنظیمات Nginx
Certbot باید بتواند بلاک صحیح سرور را در تنظیمات Nginx پیدا کند تا تنظیمات SSL را بطور خودکار اعمال کند. بطور مشخص Certbot به دنبال server_name گشته که مطابق دامنه درخواستی برای اخذ گواهی است.
در تنظیمات Nginx خود باید بلاکی برای دامین خود در مسیر etc/nginx/sites-available/example.com
با server_name
مشخص داشته باشید.
برای بررسی فایل بلاک دامین مورد نظر را با nano یا ویرایشگر مورد نظر خود باز کنید:
خط server_name
موجود را پیدا کنید. چیزی شبیه به خط زیر:
اگر این خط وجود دارد، از ویرایشگر خارج شوید و به قدم بعدی بروید.
اگر وجود ندارد، با افزودن این خط آن را بروز کنید. سپس از ویرایشگر خارج شوید، و با دستور زیر تنظیمات را تایید کنید:
اگر خطایی گرفتید فایل را مجددا باز کنید و به دنبال اشتباهات تایپی بگردید. زمانی که تنظیمات صحیح بود، Nginx را مجدد راهاندازی کنید تا تنظیمات جدید اعمال شود:
اکنون Certbot میتواند بلاک server
مورد نظر را پیدا کند و بروزرسانی انجام دهد.
در قدم بعد فایروال را برای دریافت ترافیک HTTPS بروز میکنیم.
قدم سوم: اجازه به انتقال ترافیک HTTPS از طریق فایروال
اگر فایروال ufw را فعال کردهاید. باید تنظیمات آن را برای انتقال ترافیک HTTPS بروز کنید. با تایپ دستور زیر تنظیمات کنونی را مشاهده کنید:
احتمالا چنین خروجی خواهید دید، بدین معنی که تنها ترافیک HTTP اجازه انتقال از وب سرور را دارد:
برای انتقال ترافیک HTTPS پروفایل Nginx Full
را در حالت پذیرش قرار دهید و پروفایل اضافی Nginx HTTP
را حدف کنید:
اکنون وضعیت فایروال باید با وارد کردن دستور زیر بدین شکل باشد:
در قدم بعد Certbot را اجرا میکنیم و گواهیهای مورد نطر را دریافت میکنیم.
قدم چهارم: دریافت گواهی SSL
Certbot روشهای مختلفی را برای دریافت گواهی SSL از طریق افزونهها فراهم میکند. افزونه Nginx تنظیمات Nginx را مجدد انجام داده و در زمان نیاز بروزرسانی را انجام میدهد. برای استفاده از این افزونه دستور زیر را تایپ کنید:
این دستور اجرا کننده certbot
همراه با افزونه --nginx
است، با استفاده از -d میتوانید دامنههای مختلف را برای دریافت گواهی اضافه کنید.
اگر این اولین بار است که certbot
را اجرا میکنید، از شما ایمیل و پذیرش قوانین خواسته میشود. پس از آن certbot
با سرور Let’s Encrypt ارتباط برقرار کرده و چالشی را برای تایید دامین درخواستی شما اجرا میکند.
در صورت موفقیتآمیز بودن، certbot
از شما میپرسد که چطور میخواهید تنظیمات HTTPS را اعمال کنید.
1- بدون تغییر مسیر و بدون تنظیم وبسرور.
2- تغییر همه آدرسها به HTTPS و تنظیم وبسرور بطور خودکار.
گزینه مورد نظر را انتخاب کنید و اینتر را بزنید.تنظیمات اعمال شده و Nginx بروز میشود. certbot
با پیامی به شما اعلام میکند که فرایند موفقیتآمیز بوده و گواهیها در چه مسیری ذخیره شدهاند:
گواهیها دانلود، نصب و بارگذاری شدهاند. سایت خود را با استفاده از https://
باز کنید. اگر با استفاده از سرویس SSL Labs Server Test سرور خود را تست کنید، نمره A خواهید گرفت.
در قدم آخر فرایند تمدید مجدد را آزمایش میکنیم.
قدم پنجم: تایید تمدید خودکار Certbot
گواهیهای Let’s Encrypt تنها باری 90 روز معتبر هستند و کاربران باید گواهی خود را طوری تنظیم کنند که بطور خودکار فرایند تمدید اجرا شود. پیکیجی که نصب کردیم افزودن اسکریپت etc/cron.d
این کار را برای شما انجام میدهد. این اسکریپت دو بار در روز اجرا میشود و در مهلت سی روز تا پایان اعتبار، گواهی را تمدید میکند.
برای تست فرایند تمدید، دستور زیر را اجرا کنید:
اگر خطایی وجود ندارد، هیچ مشکلی نیست. در زمان نیاز Certbot گواهیها را تمدید و Nginx را بروز میکند تا تنظیمات جدید اعمال شود. اما در صورت وجود خطا، Let’s Encrypt ایمیلی را به آدرسی که شما مشخص کردید ارسال میکند، تا از منقضی شدن گواهی مطلع شوید.