استفاده از مجوزهای رمزگذاری رایگان SSL / TLS با NGINX

اگر شما هم دارای یک وب سایت هستید باید بدانید که رمزگذاری SSL / TLS در وب سایت شما منجر به رتبه بندی جستجوی بالاتر و امنیت بهتر برای کاربران شما می شود. با این حال، موانع زیادی وجود دارد که مانع از استفاده SSL توسط صاحبان وب سایت می شود. دو مورد از بزرگترین موانع هزینه و مراحل دستیابی به این مجوز است. 

در حال حاضر با استفاده از Let’s Encrypt  این موضوع دیگر جای نگرانی ندارد و رمزگذاری SSL / TLS را به صورت رایگان در دسترس همه قرار می دهد. Let’s Encrypt یک مجوز رایگان، خودکار و آزاد(CA) است.

Image for post
Image for post

گواهی‌های صادر شده توسط Let’s Encrypt امروزه توسط اکثر مرورگرها مورد اعتماد و اعتبار هستند، حتی مرورگرهای قدیمی تر مانند Internet Explorer در Windows XP SP3 نیز این گواهینامه‌ها را شناسایی می‌کنند. علاوه بر این، Let’s Encrypt صدور گواهینامه ها و تمدید آنها را به طور کامل خودکار می کند.

در این پست، ما نحوه استفاده از سرویس Let’s Encrypt برای تولید گواهینامه ها و نحوه پیکربندی خودکار NGINX Open Source  را برای استفاده از آنها ارائه می دهم.

Let’s Encrypt چطور کار می‌کند؟

قبل از صدور گواهی،  Let’s Encrypt  باید مالکیت دامنه شما را تأیید کند. سرویس گیرنده Let’s Encrypt، که بر روی هاست شما اجرا می شود، یک فایل موقت (توکن) با اطلاعات مورد نیاز در آن ایجاد می‌کند. سرور اعتبارسنجی Let’s Encrypt برای بازیابی پرونده درخواست HTTP می کند و رمز را تأیید می کند که رکورد DNS دامنه شما با سرور سرویس گیرنده Let’s Encrypt  یکی است.

Image for post
Image for post

پیش نیازها

قبل از شروع کار با Let’s Encrypt ، باید:

  • NGINX را نصب کنید.
  • یک رکورد DNS ایجاد کنید که نام دامنه شما و آدرس IP عمومی سرور شما را مرتبط کند.
    اکنون می توانید Let’s Encrypt را با NGINX  تنظیم کنید.

توجه: ما تنظیمات مشخص شده در این پست را بر اساس Ubuntu 16.04 انجام داده ایم.

Let’s Encrypt client -1 را دانلود کنید

دستورات زیر را در ترمینال وارد کنید.

$ apt-get update
$ sudo apt-get install certbot
$ apt-get install python-certbot-nginx
Image for post
Image for post

2- Nginx را نصب کنید

certbot می تواند به طور خودکار NGINX را برای SSL / TLS پیکربندی کند وتشخیص دهد بلوک سروری را که در فایل پیکربندی NGINX شما شامل یک دستورالعمل server_name با نام دامنه ای است که شما برای آن درخواست گواهی کرده‌اید. در مثال ما ، دامنه www.example.com است.

  • با فرض شروع تازه و نصب جدید NGINX، از یک ویرایشگر متن برای ایجاد پرونده در مسیر /etc/nginx/conf.d با نام دامنه domain name.conf استفاده کنید (بنابراین در مثال ما ، www.example.com.conf) .
  • نام دامنه خود را (و در صورت وجود انواع آن) با دستورالعمل server_name مشخص کنید:
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name example.com www.example.com;
}
  • فایل را ذخیره کنید، سپس این دستور را برای بررسی نحو پیکربندی خود اجرا کرده و NGINX را مجدداً راه اندازی کنید
$ nginx -t && nginx -s reload
Image for post
Image for post

3- دریافت گواهینامه SSL/TLS

NGINX plug-in برای certbot مراقبت پیکربندی مجدد NGINX و بارگیری مجدد پیکربندی آن، در زمان لازم است.

برای تولید گواهینامه ها با NGINX plug-in دستور زیر را اجرا کنید:

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

برای پیکربندی تنظیمات HTTPS خود، به درخواست های Certbot پاسخ دهید، که این پاسخ ها شامل وارد کردن آدرس ایمیل و موافقت با شرایط سرویس Let’s Encrypt است.

با تکمیل فرایند ایجاد گواهی، NGINX با تنظیمات جدید بارگیری مجدد می شود. certbot پیامی را تولید می کند که نشان می دهد تولید گواهی موفقیت آمیز بوده و محل گواهی را در سرور شما مشخص می کند.

Congratulations! You have successfully enabled https://example.com and https://www.example.com 

-------------------------------------------------------------------------------------
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 2017-12-12.

اگر به domain‑name.conf نگاه کنید، می بینید که certbot آن را به روز کرده است.

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name  example.com www.example.com;

    listen 443 ssl; # managed by Certbot

    # RSA certificate
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot

    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

    # Redirect non-https traffic to https
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    } # managed by Certbot
}

4- تمدید خودکار گواهینامه

گواهینامه Let’s Encrypt  پس از 90 روز منقضی می‌شود. شما می‌توانید تمدید گواهینامه های خود را به طور خودکار انجام دهید. در اینجا ما یک cron job را به یک پرونده crontab موجود اضافه می کنیم تا این کار را انجام دهد.

  • پوشه crontab را باز کنید.
$ crontab -e

دستور certbot را برای اجرای روزانه اضافه کنید. در این مثال ، ما هر روز ظهر دستور را اجرا می کنیم. این دستور بررسی می کند که آیا گواهی موجود در سرور ظرف 30 روز آینده منقضی می شود یا خیر و در این صورت آن را تمدید می کند. دستورالعمل --quiet به certbot می گوید که تولید خروجی نکند.

0 12 * * * /usr/bin/certbot renew --quiet

فایل را ذخیره کنید و آن را ببندید. تمام گواهینامه های نصب شده به طور خودکار تمدید و بارگیری می شوند.

Image for post
Image for post

خلاصه

ما برای تولید مجوزهای SSL / TLS برای یک دامنه، Let’s Encrypt را نصب کردیم. سپس NGINX را پیکربندی کردیم تا از گواهینامه‌ها استفاده کند و تمدیدهای خودکار گواهی را تنظیم کردیم. با استفاده از گواهی Let’s Encrypt برای NGINX، می‌توانید در عرض چند دقیقه یک وب سایت ساده و ایمن داشته باشید.