Let’s Encrypt یکی از ارائه دهندگان گواهی امنیتی است که فراهم کننده روشی ساده برای دریافت و نصب گواهیهای TLS/SSL برای فعالسازی رمزگذاری HTTPS بر روی سرور است. این ارائه دهنده با فراهم کردن یک کلاینت نرمافزاری به نام Certbot، تقریبا اکثرا مراحل نصب و راهاندازی گواهی را به طور خودکار انجام میدهد. در حال حاضر تمامی مراحل دریافت و نصب گواهی برای Nginx و Apache بطور کاملا خودکار صورت مییگیرد.
در این آموزش ما با استفاده از Certbot گواهی SSL رایگانی را برای Nginx در اوبونتو ۱۶.۰۴ دریافت و همچنین گواهی را به گونهای تنظیم میکنیم که بطور خودکار اعتبار آن تمدید شود.
در این آموزش از یک بلاک Nginx متفاوت از بلاک پیشفرض استفاده میکنیم. توصیه میکنیم که برای هر دامین در سرور خود یک بلاک جداگانه Nginx داشته باشید تا از ایجاد مشکلات احتمالی جلوگیری شود و فایل پیش فرض به عنوان یک راهنما همیشه در دسترس باشد.
پیش نیازها
در این آموزش به موارد زیر نیاز دارید:
- یک سرور اوبونتو ۱۶.۰۴ که تنظیمات ابتدایی آن مانند این آموزش «راهاندازی اولیه اوبونتو» انجام شده است و شامل یک کاربر غیر root با دسترسی sudo و یک فایروال است.
- یک نام دامنه. در این آموزش ما از دامین example.com استفاده میکنیم.
- تنظیم رکوردهای DNS برای اشاره به سرور.
- یک رکورد A با
example.com
که به آدرس آیپی عمومی سرور اشاره میکند. - یک A رکورد با
www.example.com
که به آدرس آیپی عمومی سرور اشاره میکند.
- یک رکورد A با
- Nginx نصب شده بر روی سرور.
قدم اول: نصب Certbot
اولین مرحله برای دریافت گواهی SSL نصب نرم افزار Certbot بر روی سرور است.
در اولین قدم مخزن Certbot را اضافه کنید:
sudo add-apt-repository ppa:certbot/certbot
با فشردن کلید اینتر دستور بالا را اجرا کنید.
سپس لیست پکیجها را بروز کنید:
sudo apt-get update
پکیج Certbot را به وسیله apt-get
نصب کنید.
sudo apt-get install python-certbot-nginx
اگر پکیج بالا نصب نشد می تونید از دستور زیر نصبش کنید
sudo apt-get install python3-certbot-nginx
اکنون Certbot آماده استفاده است، اما برای اینکه بتواند SSL را برای Nginx تنظیم کند، باید برخی از تنظیمات Nginx را بررسی و تایید کنیم.
قدم دوم: تایید تنظیمات Nginx
Certbot باید بتواند بلاک صحیح سرور را در تنظیمات Nginx پیدا کند تا تنظیمات SSL را بطور خودکار اعمال کند. بطور مشخص Certbot به دنبال server_name گشته که مطابق دامنه درخواستی برای اخذ گواهی است.
در تنظیمات Nginx خود باید بلاکی برای دامین خود در مسیر etc/nginx/sites-available/example.com
با server_name
مشخص داشته باشید.
برای بررسی فایل بلاک دامین مورد نظر را با nano یا ویرایشگر مورد نظر خود باز کنید:
sudo nano /etc/nginx/sites-available/example.com
خط server_name
موجود را پیدا کنید. چیزی شبیه به خط زیر:
server_name example.com www.example.com;
اگر این خط وجود دارد، از ویرایشگر خارج شوید و به قدم بعدی بروید.
اگر وجود ندارد، با افزودن این خط آن را بروز کنید. سپس از ویرایشگر خارج شوید، و با دستور زیر تنظیمات را تایید کنید:
sudo nginx -t
اگر خطایی گرفتید فایل را مجددا باز کنید و به دنبال اشتباهات تایپی بگردید. زمانی که تنظیمات صحیح بود، Nginx را مجدد راهاندازی کنید تا تنظیمات جدید اعمال شود:
sudo systemctl reload nginx
اکنون Certbot میتواند بلاک server
مورد نظر را پیدا کند و بروزرسانی انجام دهد.
در قدم بعد فایروال را برای دریافت ترافیک HTTPS بروز میکنیم.
قدم سوم: اجازه به انتقال ترافیک HTTPS از طریق فایروال
اگر فایروال ufw را فعال کردهاید. باید تنظیمات آن را برای انتقال ترافیک HTTPS بروز کنید. با تایپ دستور زیر تنظیمات کنونی را مشاهده کنید:
sudo ufw status
احتمالا چنین خروجی خواهید دید، بدین معنی که تنها ترافیک HTTP اجازه انتقال از وب سرور را دارد:
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
برای انتقال ترافیک HTTPS پروفایل Nginx Full
را در حالت پذیرش قرار دهید و پروفایل اضافی Nginx HTTP
را حدف کنید:
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
اکنون وضعیت فایروال باید با وارد کردن دستور زیر بدین شکل باشد:
sudo ufw status
|
در قدم بعد Certbot را اجرا میکنیم و گواهیهای مورد نطر را دریافت میکنیم.
قدم چهارم: دریافت گواهی SSL
Certbot روشهای مختلفی را برای دریافت گواهی SSL از طریق افزونهها فراهم میکند. افزونه Nginx تنظیمات Nginx را مجدد انجام داده و در زمان نیاز بروزرسانی را انجام میدهد. برای استفاده از این افزونه دستور زیر را تایپ کنید:
sudo certbot --nginx -d example.com -d www.example.com
این دستور اجرا کننده certbot
همراه با افزونه --nginx
است، با استفاده از -d میتوانید دامنههای مختلف را برای دریافت گواهی اضافه کنید.
اگر این اولین بار است که certbot
را اجرا میکنید، از شما ایمیل و پذیرش قوانین خواسته میشود. پس از آن certbot
با سرور Let’s Encrypt ارتباط برقرار کرده و چالشی را برای تایید دامین درخواستی شما اجرا میکند.
در صورت موفقیتآمیز بودن، certbot
از شما میپرسد که چطور میخواهید تنظیمات HTTPS را اعمال کنید.
۱- بدون تغییر مسیر و بدون تنظیم وبسرور.
۲- تغییر همه آدرسها به 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):
گزینه مورد نظر را انتخاب کنید و اینتر را بزنید.تنظیمات اعمال شده و Nginx بروز میشود. certbot
با پیامی به شما اعلام میکند که فرایند موفقیتآمیز بوده و گواهیها در چه مسیری ذخیره شدهاند:
|
گواهیها دانلود، نصب و بارگذاری شدهاند. سایت خود را با استفاده از https://
باز کنید. اگر با استفاده از سرویس SSL Labs Server Test سرور خود را تست کنید، نمره A خواهید گرفت.
در قدم آخر فرایند تمدید مجدد را آزمایش میکنیم.
قدم پنجم: تایید تمدید خودکار Certbot
گواهیهای Let’s Encrypt تنها باری ۹۰ روز معتبر هستند و کاربران باید گواهی خود را طوری تنظیم کنند که بطور خودکار فرایند تمدید اجرا شود. پیکیجی که نصب کردیم افزودن اسکریپت etc/cron.d
این کار را برای شما انجام میدهد. این اسکریپت دو بار در روز اجرا میشود و در مهلت سی روز تا پایان اعتبار، گواهی را تمدید میکند.
برای تست فرایند تمدید، دستور زیر را اجرا کنید:
sudo certbot renew --dry-run
اگر خطایی وجود ندارد، هیچ مشکلی نیست. در زمان نیاز Certbot گواهیها را تمدید و Nginx را بروز میکند تا تنظیمات جدید اعمال شود. اما در صورت وجود خطا، Let’s Encrypt ایمیلی را به آدرسی که شما مشخص کردید ارسال میکند، تا از منقضی شدن گواهی مطلع شوید.
منبع: ویوین