گواهینامه های SSL ارتباطات امن و رمزگذاری شده بین یک وب سایت و یک مرورگر اینترنتی را فراهم می کند. SSL مخفف Secure Sockets Layer است و پروتکلی است که رمزگذاری را فراهم می کند. گواهینامه های SSL به طور معمول در صفحاتی که کاربران نهایی نیاز به ارسال اطلاعات حساس در اینترنت مانند جزئیات کارت اعتباری یا کلمه عبور دارند استفاده میشود. به عنوان مثال صفحات پرداخت، فرم های آنلاین و صفحات ورود به سیستم.
Let’s Encrypt یک پروژه است که توسط بنیاد Electronic Frontier Foundation، موزیلا، Akamai، دانشگاه میشیگان و سیسکو پشتیبانی می شود. این یک گواهینامه کاملا خودکار و آزاد است که هدف رمزگذاری کل وب را دارد. یک راه ساده، امن، سریع و آزاد برای خودکار کردن همه چیز در گواهینامه SSL/TLS از جمله ساخت، نصب و تجدید گواهینامه است. از اکتبر 2015، مرورگرهای اصلی، گوگل کروم، موزیلا فایرفاکس، مایکروسافت Edge، سافاری، اپرا Let’s Encrypt را پشتیبانی میکنند.
در این آموزش، از Certbot برای دریافت یک گواهینامه SSL رایگان برای Nginx در اوبونتو 16.04 استفاده خواهیم کرد و گواهینامه خود را به صورت خودکار تمدید خواهید کرد.
پیش نیاز ها :
- سرور ubuntu 16.04 : این آموزش بر اساس سرور Ubuntu میباشد
- دامنه ی ثبت شده، در این آموزش از دامنه domain.com استفاده میکنیم
- انجام تنظیمات DNS
- Nginx نصب گردد
نصب Certbot
اولین قدم در نصب Let’s Encrypt برای تهیه گواهی SSL نصب Cerbot بر روی سرور میباشد.ابتدا مخزن را به سرور اضافه نمایید :
sudo add-apt-repository ppa:certbot/certbot
سپس بسته ها را آپدیت نمایید :
sudo apt-get update
در نهایت بسته ی Certbot را نصب نمایید :
sudo apt-get install python-certbot-nginx
حالا Cerbot آماده استفاده است، اما برای اینکه بتوانیم SSL را برای Nginx پیکربندی کنیم، باید برخی از تنظیمات Nginx را بررسی کنیم.
راه اندازی Nginx
Certbot به طور خودکار SSL را برای Nginx پیکربندی میکند، اما باید بتواند سرور را در پیکربندی خود پیدا کند، که این کار را بر اساس Server-name دامنه ای که گواهینامه را برای آن میخواهید ایجاد نمایید انجام میدهد.اگر Nginx را تازه نصب کرده اید میتوانید تنظیمات پیش فرض را با استفاده از ویرایشگر مورد علاقه خود تغییر دهید.
sudo vim /etc/nginx/sites-available/default
خطی که شامل server_name میباشد را پیدا کنید و مقادیر را با نام دامنه ی خود جایگزین نمایید :
server_name domain.com www.domain.com;
فایل ذخیره کنید و خارج شوید. سپس با استفاده از دستور زیر syntax تنظیمات خود را بررسی نمایید :
sudo nginx -t
اگر syntax تنظیمات درست بود Nginx را reload نمایید :
sudo systemctl reload nginx
تنظیمات HTTPS در فایروال
اگر شما هم مثل من از ufw استفاده میکنید که تنها کافی است ufw را فعال کنید، nginx در هنگام نصب برخی از تنظیمات مورد نیاز خود را در فایروال اعمال میکند.
با استفاده از دستور زیر میتوانید وضعیت فایروال را بررسی نمایید :
sudo ufw status
دریافت گواهینامه SSL
Certbot راه های مختلفی را برای دریافت گواهینامه از طریق پلاگین فراهم میکند.
با استفاده از دستور زیر پلاگین nginx را به همراه نام دامنه ای که میخواهیم گواهینامه برای آن ساخته شود را ایجاد میکنیم.
sudo certbot --nginx -d domain.com -d www.domain.com
اگر برای اولین بار است که Certbot را اجرا میکنید از شما میخواهد که آدرس ایمیل را وراد کنید و شرایط سرویس را بپذیرید، بعد از این Certbot با سرور Let’s Encrypt ارتباط برقرار میکند و تایید میکند که شما دامنه ای که قصد دارید برای آن گواهینامه صادر شود را کنترل میکنید.
اگر موارد بدون مشکل پیش برود، Certbot از شما میپرسد که چگونه تنظیمات HTTPS را انجام دهد.
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):
گزینه مورد نظر خود را انتخاب کنید و Enter کنید.سپس تنظیمات بروزرسانی میشود و سرویس nginx را reload میکند، سپس Certbot با نمایش پیغامی موفقیت آمیز بودن ایجاد گواهینامه و ذخیره آن را اعلام میکند.
تایید خودکار نوسازی
گواهینامه های Let’s Encrypt برای 90 روز معتبر هستند.بسته Certbot که نصب کردیم دوبار در روز با اجرای certbot renew با استفاده از systemd timer این کار را انجام میدهد.برای سیستم های non-systemd این قابلیت توسط یک اسکریپت که در /etc/cron.d قرار دارد انجام میشود.
برای تست فرایند نوسازی میتوانید دستور زیر را اجرا نمایید
sudo certbot renew --dry-run
اگر هیچ خطایی نداد به این معنیست که به درستی کار میکند، Certbot گواهینامه را نوسازی میکند و nginx را reload میکند.اگر نوسازی گواهینامه انجام نشود Let’s Encrypt’s برای شما ایمیل میفرستد و منقضی شدن گواینامه را به شما اطلاع خواهد داد.