nginx

نحوه نصب ssl رایگان بر روی ابونتو 16.04

Let's Encrypt یک راه آسان برای داشتن TLS / SSL رایگان و امن بروی سایت ها می باشد. به وسیله این گواهینامه رایگان شما می توانید سایت خورد را بر روی HTTPS بارگذاری کنید.letsencrypt در واقع در مرحله آزمایشی می باشد . letsencrypt به واسطه اسکریپت که در پکیج آن وجود دارد این امکان را به ما می دهد که به صورت خودکار  بر روی وب سرور Apache نصب شود. حالا می خواهم نحوه نصب و چگونگی عملکرد اینTLS / SSLرایگان را بر روی وب سرور NGINX  و سیستم عامل ابونتو ۱۶.۰۴ پیش برویم.

letsencrypt یک گواهینامه رایگان به ازای هر سایت شما ایجاد خواهد کرد. که به مدت ۳ ماه فعال خواهد و بعد از ۳ ماه نیازمند بروزرسانی هست. در وب سرور Apache این گواهینامه به صورت خودکار تمدید می شود ولی متاسفانه بر روی وب سرور nginx  این امکان هنوز فراهم نشده است و نیازمند این هست که ما به صورت دستی تنظیمانی را بر روی سرور خود انجام دهیم که بعد از این مدت ۳ ماهه به صورت خودکار تمدید شود که مشکلات بعدی بر نخوریم.

 

پیش نیاز ها

 

 

شما ابتدا نیاز به دسترسی روت بر روی سرور ابونتو ۱۶.۰۴ خود دارید.

همچنین دامنه خود را ثبت کرده باشید و رکورد های DNS هم به وب سرور شما ارجاع داده شده باشد.

اگر رکورد های A Record شما به ای پی عمومی سرور شما ارجاع نشده باشد در هنگام نصب به مشکل بر خواهید خورد.

 Let's Encrypt برای اینکه دامنه شما را تایید کند و اجازه ساخت ssl رایگان را به شما بدهد نیازمند این هست که به روشی هویت شما را به عنوان مالک دامنه تایید کند. برای همین هم برای ساخت گواهینامه حتما باید بر روی وب سروری که سایت شما بر روی آن هست ،ساخته شود.

مرحله اول: نصب نسخه کلاینت Let's Encrypt

 شما برای دریافت گواهینامه نصب ssl  بر روی سرور خود، بهترین روش نصب  Let's Encrypt این هست که،  آخرین نسخه را از گیت هاب دریافت کنید. همچنین در آینده در مدیر بسته های نرم افزاری اوبونتو دردسترس خواهد بود و دیگر شما نیازی به گرفتن کپی از ریپوزتوری ها نخواهید بود.

نصب Git و bc

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

 sudo apt-get update

و بعد از آن با دستور زیر git را نصب می کنیم

sudo apt-get -y install git

با نصب git بر روی سرور خود به راحتی می توانید letsencrypt بر روی سرور خود دانلود کنید.

کپی Let's Encrypt

با دستور زیر ما آخرین نسخه از Let's Encrypt را در مسیر /opt دانلود خواهیم کرد:

  • sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

حالا آخرین نسخه را در دایرکتوری  /opt/letsencrypt خواهید داشت.

 

مرحله دوم: دریافت گواهینامه SSL

Let's Encrypt  راه های مختلفی را برای دریافت گواهینامه ssl به وسیله پلاگین های مختلف ارایه می دهد.به غیر از پلاگین آپاچی بیشتر این پلاگین ها تنها شمارا یاری میکنند که به صورت دستی گواهینامه را بر روی وب سرور خود نصب نمایید.

 

چگونگی استفاده از  Webroot پلاگین

Webroot پلاگین، مستقیما با نصب روی مسیر روت شما که به عنوان یک فایل مخصوص ذخیره شده باشه کار می کند بدین منظور ما باید دسترسی خاصی به این فایل بر روی وب سرور خود بدهیم

فایل کانفیگ وب سرور خود را که معمولا در مسیر /etc/nginx/sites-available/default هست را ویرایش می کنیم 

sudo nano /etc/nginx/sites-available/default

 

خطوط زیر را به فایل کانفیگ اضافه می کنیم

 

 location ~ /.well-known { allow all; } 

فایل را ذخیره می کنیم

کانفیگ ها را با دستور زیر قبل از ریلود کردن بررسی می کنیم:

sudo nginx -t

 

Nginx را ریلود می کنیم

sudo systemctl reload nginx

 

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

cd /opt/letsencrypt

./letsencrypt-auto certonly -a webroot --webroot-path=/var/www/html -d example.com -d www.example.com

 

در اولین مرحله شما با پیغام زیر مواجه خواهید شد.

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

از شما می خواهد که مرامنامه را تایید کنید

اگر نصب Let's Encrypt با موفقیت بود شما خروجی شبیه به زیر خواهید داشت

خروجی:

IMPORTANT NOTES: - If you lose your account credentials, you can recover through e-mails sent to sammy@digitalocean.com - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will expire on 2016-03-15. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. - Your account credentials have been saved in your Let's Encrypt configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Let's Encrypt so making regular backups of this folder is ideal. - If like Let's Encrypt, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

دقت کنید که زمان انقضا گواهینامه شما  و همچنین مسیر نصب گواهینامه ها را برای شما برجسته کرده است

نکته فایروال: اگر به چنین پیغامی برخوردید Failed to connect to host for DVSNI challenge, فایروال سرور شما نیازمند اجازه به پورت های   80 و 443 میباشد

 

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

sudo ls -l /etc/letsencrypt/live/your_domain_name

 

مرحله سوم: تنظیمات TLS/SSL بر روی (Nginx)

ابتدا به مسیر فایل های کانفیگ nginx خود بروید و از فایل کانفیگ خود یک بک آپ تهیه کنید و سپس فایل کانفیگ خود را ویرایش کنید و خطوط زیر را به آن اضافه کنید

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

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

نکته : امکان دارد برخی از موارد زیر در فایل کانفیگ خودتان موجود باشد.

 

etc/nginx/sites-available/default
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

server {

    # SSL configuration

    listen 443 ssl http2 default_server;
    
listen [::]:443 ssl http2 default_server;

	

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;


ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

ssl_dhparam /etc/ssl/certs/dhparam.pem;

فایل را ذخیره کنید و با دستور nginx -t  مطمین شوید که فایل کانفیگتان خطایی ندارد و سپس nginx  را ریستارت نمایید.

در مقاله بعدی در مورد نحوه بروزرسانی این ssl  صحبت خواهم کرد

دسته بندی ها: