چگونه Nginx را با نصب SSL رایگان در Debian 10 ایمن کنیم؟
در این مقاله میخوانید
Let’s Encrypt مرجع صدور گواهی (CA) است که به شما امکان میدهد تا بهرایگان و بهسادگی گواهی SSL/TLS دریافت کنید و بتوانید از پروتکل رمزگذاریشده HTTPS روی وبسایت خود استفاده کنید. سادهسازی این فرایند بهدلیل استفاده از Certbot است که تلاش میکند تا تمام مراحل این فرایند را بهطورخودکار انجام دهد. در این مقاله از آموزش دبیان بلاگ پارس پک، به شما خواهیم آموخت که چطور با استفاده از Certbot گواهی SSL را روی سروری با توزیع Debian 10 نصب و وب سرور Nginx را ایمن کنید؛ پس تا پایان با این مقاله همراه باشید.
خرید SSL برای ایمنسازی Nginx از پارس پک
شما میتوانید از این مقاله برای مدیریت گواهینامه SSL خود استفاده کنید و اگر قصد خرید هریک از انواع گواهیهای SSL پارس پک را دارید، میتوانید با کارشناسان فروش ما در ارتباط باشید. همچنین، شما میتوانید برای اطلاع از تعرفهها و هزینهها به لینک زیر مراجعه کنید.
پیشنیازها
برای اینکه بتوانید مراحل گفتهشده در این مطلب را گامبهگام طی کنید و از آن بهترین استفاده را ببرید، باید پیشنیازهای زیر را داشته باشید:
۱. سروری با توزیع Debian 10 نصبشده روی آن بههمراه کاربر غیر Root با دسترسی Sudo و فایروال راهاندازیشده
۲. دامین اختصاصی
۳. هر دو رکورد DNS زیر باید روی سرور شما راهاندازی شده باشد:
- رکورد your_domain که به آدرس IP عمومی سرور شما اشاره میکند.
- رکورد www.your_domain که به آدرس IP عمومی سرور شما اشاره میکند.
خرید سرویس لینوکسی با سیستمعامل Debian از پارس پک
شما میتوانید از این مقاله برای مدیریت سرورهای لینوکس خود استفاده کنید و اگر قصد خرید هر یک از سرویسهای لینوکسی پارس پک را دارید، میتوانید با کارشناسان فروش ما در ارتباط باشید. همچنین، شما میتوانید برای اطلاع از تعرفهها و هزینهها به لینکهای زیر مراجعه کنید.
۴. مطمئن شوید که Nginx روی Debian 10 نصب شده است و نیز دامنهتان بلوک سرور دارد.
روش گام به گام نصب گواهی SSL رایگان در Debian 10
برای این منظور، لازم است مراحل زیر را بهترتیب دنبال کنید:
گام اول: نصب Certbot
اولین گام برای دریافت گواهی SSL رایگان از Let’s Encrypt، نصب نرمافزار Certbot روی سرور است. نصب پکیج python3-certbot-nginx از ریپوزیتوری Debian 10 به شما امکان نصب و استفاده از پلاگین Nginx Certbot را خواهد داد.
توجه کنید که Debian 10 درحالحاضر از Python 2.0 و Python 3.0 پشتیبانی میکند؛ اما Python 2.0 در ژانویه۲۰۲۰ منسوخ شده است. بنابراین، واضح است که استفاده از Python 3 و پکیج python3-certbot-nginx گزینه بهتری محسوب خواهد شد.
قبل از نصب پکیج python3-certbot-nginx، ابتدا باید پکیج لیست خود را بهروز کنید. برای این منظور، از دستور زیر استفاده کنید:
$ sudo apt update
سپس، باید وابستگیهای پکیج python3-certbot-nginx را نصب کنید. این وابستگیها عبارتاند از:
- python3-acme
- python3-certbot
- python3-mock
- python3-openssl
- python3-pkg-resources
- python3-pyparsing
- python3-zope.interface
برای این منظور نیز، میتوانید از دستور زیر استفاده کنید:
$ sudo apt install python3-acme python3-certbot python3-mock python3-openssl python3-pkg-resources python3-pyparsing python3-zope.interface
درنهایت، پکیج python3-certbot-nginx نیز با استفاده از دستور زیر نصب خواهد شد:
$ sudo apt install python3-certbot-nginx
Certbot حالا فعال و آماده استفاده است. بااینحال، بهمنظور پیکربندی SSL برای Nginx، باید برخی تنظیمات را روی Nginx انجام دهید و تأیید کنید.
گام دوم: تأیید پیکربندی Nginx
Certbot برای اینکه بتوانید SSL را بهطورخودکار پیکربندی کنید، باید بلوک سرور صحیح را در پیکربندی Nginx شما پیدا کند. بهطورخاص این کار با جستوجوی یک دایرکتیو Server_name که با نام دامنه درخواستیتان مطابقت دارد، انجام خواهد شد.
پیشفرض ما این است که از قبل Nginx را روی سرورتان نصب کردهاید. در این صورت، قاعدتاً باید بلوک سروری برای دامنه خود در مسیر /etc/nginx/sites-available/your_domain داشته باشید که در آن، دایرکتیو Server_name از قبل بهخوبی تنظیم شده باشد.
برای بررسی این موضوع، فایل بلوک سرور دامنه خود را با کمک ویرایشگر متن دلخواه و استفاده از کد زیر باز کنید. در این مثال، میخواهیم از ویرایشگر nano برای بازکردن این فایل استفاده کنیم:
$ sudo nano /etc/nginx/sites-available/your_domain
حالا خط server_name را در این فایل پیدا کنید. احتمالاً چیزی شبیه به این باشد:
... server_name your_domain www.your_domain; ...
اگر این خط را پیدا کردید، میتوانید از ویرایشگر خود خارج شوید؛ اما درصورتیکه این خط در فایل شما موجود نبود، ابتدا باید این خط را درون فایل خود قرار دهید و فایل را ذخیره کنید و سپس از ویرایشگر خارج شوید. بعد از اینکه ویرایشگر خود را بستید، باید سینتکس ویرایشهای اِعمالشده روی فایل پیکربندی را تأیید کنید. انجام این کار با استفاده از دستور زیر امکانپذیر است:
$ sudo nginx -t
درصورتیکه پس از صدور این دستور با خطایی روبهرو شدید، باید فایل پیکربندی را مجدداً با استفاده از روش عنوانشده در بالا باز و مشکل را برطرف کنید. این مشکل ممکن است بهدلیل اشتباههای تایپی یا جاانداختن کاراکتر ایجاد شده باشد. پس از رفع مشکل، باید Nginx را مجدداً لود کنید تا تغییرات پیکربندی جدید اِعمال شود:
$ sudo systemctl reload nginx
حالا Certbot میتواند بلوک سرور صحیح را پیدا و آن را بهروز کند. در گام بعدی، باید فایروال را بهروز کنید تا ترافیک HTTPS مجاز شود.
گام سوم: مجوزدادن به ترافیک HTTPS با استفاده از فایروال
در این مرحله، با استفاده از فایروال باید ترافیک HTTPS را مجاز کنید؛ اما قبلازآن باید تنظیمات فعلی فایروال را بررسی کنید. برای انجام این کار، از دستور زیر استفاده کنید:
$ sudo ufw status
در این صورت، احتمالاً با متنی شبیه به متن زیر مواجه خواهید شد. همانطورکه مشخص است، تنظیمات در این مثال بهگونهای است که فقط ترافیک HTTP مجاز شده است:
Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)
برای فعالکردن ترافیک HTTPS، ابتدا باید به پروفایل Nginx Full مجوز بدهید و درادامه نیز، مجوز اضافی Nginx HTTP را حذف کنید:
sudo ufw allow 'Nginx Full' sudo ufw delete allow 'Nginx HTTP'
با دستور ufw status، وضعیت تنظیمات را مجدداً بررسی کنید:
$ sudo ufw status
اگر تمامی مراحل قبلی را بهدرستی انجام داده باشید، خروجی دستور بالا باید بهصورت زیر باشد:
Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)
در گام بعدی، باید Certbot را اجرا و گواهیهای خود را واکشی کنید.
گام چهارم: دریافت گواهی SSL
Certbot با استفاده از پلاگینها راهحلهای مختلفی را برای دریافت گواهی SSL ارائه میدهد. بهعنوان نمونه، پلاگین Nginx میتواند پیکربندی دوباره Nginx و بارگیری مجدد پیکربندی را درصورت لزوم انجام دهد. برای استفاده از این پلاگین، دستور زیر را بهکار ببرید:
$ sudo certbot --nginx -d your_domain -d www.your_domain
این دستور Certbot را با استفاده از پلاگین Nginx اجرا میکند. همچنین، از -d برای تعیین دامنههایی استفاده کنیم که میخواهیم گواهی SSL برای آنها معتبر باشد.
اگر برای اولینبار است که از Certbot استفاده میکنید، از شما خواسته میشود که آدرس ایمیلی را وارد و با شرایط خدمات موافقت کنید. بعد از انجام این کار، Certbot با سرور Let’s Encrypt ارتباط برقرار و سپس روندی را ایجاد میکند تا مطمئن شود که کنترل کامل دامنهای را در دست دارید که درخواست دریافت گواهی SSL برای آن دادهاید.
درصورتیکه این روند موفقیتآمیز باشد، شما باید تعیین کنید که چطور میخواهید تنظیمات 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):
روش پیکربندی تنظیمات HTTPS را با تایپ یک عدد (۱ یا ۲) انتخاب کنید و سپس کلید Enter را فشار دهید. در این صورت، پیکربندی بهروزرسانی و Nginx نیز برای استفاده از تنظیمات جدید مجدداً بارگیری میشود.
درنهایت، روند عملیاتی Certbot با نمایش پیغامی بهپایان خواهد رسید که به شما میگوید این فرایند موفقیتآمیز بوده است و گواهیهای موردنیاز شما در کجا ذخیره شدهاند. نمونه این پیغام درادامه ارائه شده است:
Output IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem Your cert will expire on 2019-10-08. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot 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 Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
بدینترتیب، گواهیهای شما دانلود و نصب و Load خواهند شد. حالا وبسایت خود را با استفاده از پروتکل https باز و به نشانگر امنیتی قرارگرفته در ابتدای URL وبسایت توجه کنید. اگر آیکون قفلی که معمولاً به رنگ سبز نشان داده میشود، در ابتدای URL قرار گرفته باشد، یعنی این فرایند بهدرستی انجام شده و حالا وبسایتتان ایمن است. همچنین، درصورتیکه سرور خود را با استفاده از SSL Labs آزمایش کنید، درجه A را دریافت خواهید کرد. حالا همهچیز مرتب است؛ اما اجازه دهید بهعنوان آخرین قدم، روند تمدید گواهی را نیز امتحان کنیم.
گام پنجم: تأیید تمدید خودکار گواهی با Certbot
گواهینامههای SSL صادرشده Let’s Encrypt فقط ۹۰ روز اعتبار دارند و پسازآن باید آن را تمدید کنید. در این مقاله آموزشی از بلاگ پارس پک، بسته Certbot نصبشده با افزودن اسکریپت تمدید /etc/cron.d. این کار را بهطورخودکار برایتان انجام خواهد داد. روش کار نیز بدینترتیب است که این اسکریپت دو بار در طول روز اجرا میشود و بهصورت کاملاً خودکار گواهیهایی را تمدید میکند که تاریخ انقضای آنها کمتر از ۳۰ روز باشد.
برای امتحان این اسکریپت، میتوانید از دستور زیر استفاده کنید:
$ sudo certbot renew --dry-run
درصورتیکه پس از اجرای این دستور هیچ خطایی برایتان بهنمایش درنیامد، یعنی همهچیز درست است و Certbot درصورت لزوم، گواهی شما را تمدید و Nginx را مجدداً بارگیری میکند تا تغییرات مدنظر اِعمال شود. اگر فرایند تمدید خودکار گواهی SSL ناموفق باشد، پیغامی به آدرس ایمیلتان ارسال و به شما هشدار داده خواهد شد که گواهی SSL در حال انقضاست.
برای آشنایی بیشتر با راهنمای صدور و نصب گواهینامه SSL رایگان پارس پک در کنترلپنل دایرکتادمین میتوانید مقاله زیر را بخوانید.
جمعبندی
استفاده از پروتکل HTTPS برای ایمنسازی وبسایت ازجمله نکات مهمی است که هر وبسایتی باید به آن توجه کند. این کار با استفاده از نصب گواهی SSL معتبر روی سرور انجام میشود. در این مقاله از آموزش لینوکس بلاگ پارس پک، نحوه ایمنسازی سرور با توزیع Debian 10 را توضیح دادیم. این روند شامل نصب Certbot، دریافت گواهی SSL و نصب آن و نحوه فعالسازی تمدید خودکار گواهی SSL است.
برای نصب گواهی SSL رایگان روی Nginx در Debian 10 میتوانید از نرمافزار Certbot روی سرور استفاده کنید. این نرمافزار امکان صدور گواهینامه اس اسال رایگان را برای رمزنگاری اطلاعات بین سرور و کاربران فراهم میکند. ایمنسازی انجینایکس با نصب SSL رایگان در دبیان ۱۰ نهتنها به افزایش امنیت وبسایت و محافظت از دادههای شخصی و محرمانه کاربران کمک زیادی میکند، بلکه در سئو وبسایت و افزایش تجربه کاربری هم نقش موثری دارد.
سؤالات متداول
۱. Let’s Encrypt چیست؟
Let’s Encrypt سرویسی است که با استفاده از آن خواهید توانست گواهی SSL رایگان دریافت کنید. این کار با استفاده از API خودکار انجام میشود.
۲. Certbot چیست؟
Certbot ابزار یا بهنوعی نرمافزاری برای دریافت گواهی SSL است. این ابزار با هر CA یا مرجع صدور گواهینامهای که از پروتکل ACME پشتیبانی میکند، نیز کار میکند.
۳. آیا گواهی های صادرشده Let’s Encrypt مطمئن است؟
بله، Let’s Encrypt مرجع معتبر صدور گواهی SSL است؛ بنابراین ازنظر ایمنبودن، گواهیهای صادرشده این CA مانند گواهیهای غیررایگان کاملاً ایمن است.
۴. آیا گواهی رایگان SSL ایجادشده Let’s Encrypt از نوع EV است؟
خیر، EV کاملترین نوع گواهی SSL است که با استفاده از آن نام رسمی شرکت شما نیز در توضیحات گواهی درج میشود. این گواهی رایگان نیست و برای دریافت آن باید مدارک هویتی کسبوکار خود را به مرجع صدور گواهی ارائه دهید.