ایمنسازی Apache با نصب SSL رایگان در CentOS 7
در این مقاله میخوانید
Let’s Encrypt مرجع صدور گواهینامههای SSL (CA) است که گواهینامههای رایگانی را برای رمزگذاری امنیتی اطلاعات ردوبدلشده بین سرور و کلاینت (TLS) ارائه میکند. با استفاده از این گواهینامهها، میتوانید از پروتکل ایمن HTTPS در وبسایتهای خود استفاده کنید. فرایند ایجاد، اعتبارسنجی، امضا و تمدید گواهیها در این وبسایت با استفاده از کلاینت نرمافزاری با نام Certbot انجام میشود.
در این مطلب از بلاگ پارس پک، توضیح میدهیم که چگونه از Certbot برای راهاندازی گواهی SSL/TLS ازطریق Let’s Encrypt روی سرور CentOS 7 استفاده کنیم که Apache را بهعنوان وب سرور اجرا میکند. همچنین، نحوه استفاده از Corn Job برای تمدید خودکار گواهی را آموزش میدهیم.
خرید SSL برای سرور لینوکسی از پارس پک
شما میتوانید از این مقاله برای مدیریت گواهینامه SSL خود استفاده کنید و اگر قصد خرید گواهیهای SSL از پارس پک را دارید، میتوانید با کارشناسان فروش ما در ارتباط باشید. همچنین، میتوانید برای اطلاع از تعرفهها به لینک زیر مراجعه کنید.
پیشنیازها
برای استفاده بهتر از این مطلب آموزشی، پیشنیازهای زیر لازم هستند:
- سرور CentOS 7 که با کاربر غیرریشه دارای امتیاز sudo راهاندازی شده است.
- فایروال بیسیک که برای سرورهای جدید CentOS 7 پیکربندی شده است.
- Apache که با پیکربندی هاست مجازی روی سرور CentOS 7 نصب شده باشد.
- دامنهای که مالکیت آن را دراختیار دارید.
- رکورد DNS A که دامنه شما را به آدرس IP عمومی سرورتان پیوند میزند.
خرید سرویس لینوکسی با وب سرور آپاچی از پارس پک
شما میتوانید از این مقاله برای مدیریت سرورهای لینوکس خود استفاده کنید و اگر قصد خرید هر یک از سرویسهای لینوکسی پارس پک را دارید، میتوانید با کارشناسان فروش ما در ارتباط باشید. همچنین، شما میتوانید برای اطلاع از تعرفهها و هزینهها به لینکهای زیر مراجعه کنید.
گام اول: نصب Certbot Let’s Encrypt Client
برای استفاده از Let’s Encrypt بهمنظور دریافت گواهی SSL، ابتدا باید Certbot و mod_ssl را نصب کنید. mod_ssl ازجمله ماژولهای آپاچی است و از رمزگذاری SSL v3 پشتیبانی میکند.
نکتهای که در این مرحله باید به آن توجه کنید، این است که پکیج Certbot بهطورپیشفرض ازطریق پکیج منیجر دردسترس قرار دارد و برای نصب آن، باید ریپوزیتوری EPEL را فعال کنید. برای این منظور دستور زیر را اجرا کنید:
sudo yum install epel-release
حالا که به مخزن دسترسی دارید، تمامی بستههای موردنیاز خود را میتوانید نصب کنید:
sudo yum install certbot python2-certbot-apache mod_ssl
در طول مراحل نصب، از شما برای واردکردن کلید GPG سؤال میشود. این کلید میتواند صحت بستهای که نصب میکنید، تأیید کند. برای اینکه اجازه دهید تا فرایند نصب تمام شود، با تایپ حرف y و سپس فشاردادن کلید Enter صفحهکلید، تأیید کلید GPG را صادر کنید. با نصب این سرویس، حالا آماده اجرای Certbot و واکشی گواهیهای خود هستید.
اگر میخواهید امنیت Nginx را با نصب SSL روی CentOS 7 بالا ببرید، مقاله زیر را بخوانید.
گام دوم: دریافت گواهینامه
پس از نصب Certbot، از آن برای درخواست گواهی SSL دامنه خود میتوانید استفاده کنید. استفاده از Certbot Let’s Encrypt بهمنظور تولید گواهی SSL برای آپاچی، بسیاری از این فرایندها را بهطورخودکار انجام میدهد. کلاینت بهطورخودکار گواهی SSL جدیدی دریافت و نصب میکند که این گواهی برای دامنههایی معتبر است که بهعنوان پارامترهای ورودی ارائه کردهاید.
برای اجرای روند نصب بهصورت تعاملی و دریافت گواهینامهای که فقط یک دامنه را پوشش میدهد، از دستور Certbot بهصورت زیر استفاده کنید:
sudo certbot --apache -d example.com
با استفاده از این دستور، Certbot با پلاگین –apache اجرا میشود و دامنهای که بعد از -d آمده است، برای پیکربندی گواهی آماده خواهد کرد.
اگر میخواهید گواهیای تولید کنید که برای چندین دامنه یا زیردامنه معتبر باشد، آنها را بهعنوان پارامتر میتوانید به دستور اضافه و هریک از آنها را بعد از -d تگ کنید. در این روش، اولین دامنهای که بعد از -d وارد میشود، دامنه پایهای است که Let’s Encrypt از آن برای ایجاد گواهی استفاده میکند. بنابراین، نام دامنه پایه را بهعنوان اولین پارامتر در ابتدای فهرست قرار دهید و سپس، دامنههای اضافی را به این فهرست اضافه کنید. نحوه انجام این کار در کدهای زیر توضیح داده شده است:
sudo certbot --apache -d example.com -d www.example.com
در این مثال، دامنه پایه example.com است.
همچنین، ابزار Certbot ممکن است در طول فرایند درخواست گواهی، اطلاعات دامنه را از شما بخواهد. اگر هنوز دامنهای ندارید، میتوانید از فرمان زیر استفاده کنید:
sudo certbot --apache
در این مطلب حاضر، گزینههایی نیز برای سفارشیکردن گزینههای مربوط به گواهی ارائه شده است. بهعنوان نمونه، میتوانید ایمیلی را وارد کنید تا اگر کلیدهای صادرشده را گم کردید، از آن برای بازیابی کلیدها استفاده شود. همچنین، اگر دامنههای خود را در خط فرمان مشخص نکردهاید، این مورد نیز طی مراحل از شما پرسیده میشود.
اگر در فایلهای هاست مجازی دامنهای که با دستور ServerName ارائه میشود، مشخص نشده باشد، در طول عملیات از شما درخواست میشود تا این فایل را معرفی کنید. در بیشتر مواقع، فایل پیشفرض ssl.conf حاوی اطلاعاتی است که در این زمینه به آن نیاز خواهید داشت.
همچنین، استفاده از HTTPS را میتوانید بهصورت دستی یا خودکار فعال کنید. برای امنیت بیشتر وبسایت، توصیه میکنیم که اگر نیاز خاصی به اجازهدادن برای استفاده از پروتکل HTTPS ندارید، از گزینه دوم، یعنی Redirect، استفاده کنید. با استفاده از این گزینه، تمامی درخواستها بهطورخودکار به پروتکل 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):2
هنگامیکه روند نصب با موفقیت بهپایان رسید، با پیغامی مشابه با پیغام زیر روبهرو خواهید شد:
Output 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 2019-08-14. 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" - 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
فایلهای گواهی صادرشده در زیرشاخهای به نام دامنه پایهای که انتخاب کردهاید، در دایرکتوری /etc/letsencrypt/live دردسترس خواهند بود.
حالا که گواهی شما دانلود و نصب و بارگیری شده است، وضعیت گواهی SSL خود را میتوانید بررسی کنید تا مطمئن شوید که همهچیز بهدرستی کار میکند. در مرحله بعدی، این کار را انجام خواهیم داد.
گام سوم: بررسی وضعیت گواهی SSL
در این مرحله، با استفاده از ابزار تست سرور SSL شرکت Qualys، میتوانید مطمئن شوید که Certbot گواهی SSL شما را بهدرستی ایجاد کرده است. برای این منظور، لینک زیر را در مرورگر خود وارد کنید و بهجای example.com، دامنه پایه خود را قرار دهید:
https://www.ssllabs.com/ssltest/analyze.html?d=example.com
در این صورت، صفحهای برایتان باز خواهد شد که در آن، بلافاصله عملیات آزمایش اتصال SSL به سرور شما آغاز میشود. نمونه این صفحه در تصویر زیر نشان داده شده است:
آغاز عملیات آزمایش اتصال SSL به سرور
پس از شروع تست، ممکن است روند تکمیل عملیات چند دقیقه طول بکشد. وضعیت تست در مرورگر شما بهروز میشود و برای دیدن نتیجه، به Refreshکردن صفحه نیازی نخواهید داشت.
پس از پایان آزمایش، نتیجه با یک حرف به شما نشان داده خواهد شد که بیانگر امنیت و کیفیت پیکربندی سرور شماست. بهعنوان مثال، حرف A نشاندهنده امنیت و پیکربندی مناسب سرور است:
نمایش امنیت و کیفیت پیکربندی سرور
پس از اطمینان از صحت نصب گواهی SSL روی وبسایت، دامنه خود را با استفاده از پروتکل HTTPS در مرورگرتان باز کنید. ایمنبودن وبسایت در مرورگر با نماد قفل سبزرنگی به شما نشان داده خواهد شد که در ابتدای URL درج میشود.
با نصب و تأیید گواهی SSL، در گام بعدی باید تمدید خودکار گواهی را تنظیم کنید تا مطمئن شوید که گواهی نصبشده همواره معتبر خواهد بود.
گام چهارم: تنظیمات تمدید خودکار گواهی SSL
گواهینامههای صادرشده Let’s Encrypt برای مدت ۹۰ روز اعتبار دارند. بااینحال، توصیه میکنیم که هر ۶۰ روز یک بار گواهی SSL وبسایت خود را تمدید کنید تا احتمال خطا کاهش یابد. همچنین، راهکار دیگر تنظیمات خودکار گواهی SSL است که بهطورخودکار گواهی صادرشده برای شما را تمدید خواهد کرد.
کار را با دستوری که برای تمدید گواهی SSL استفاده میشود، آغاز خواهیم کرد. Certbot Let’s Encrypt دستوری دارد که بهصورت خودکار گواهی نصبشده فعلی را بررسی میکند و اگر گواهی کمتر از ۳۰ روز اعتبار داشته باشد، سعی میکند که آن را بهطورخودکار تمدید کند. با استفاده از دستور –dry-run، شبیهسازی این کار را برای آزمایش نحوه عملکرد تمدید دامنه میتوانید بررسی کنید:
sudo certbot renew --dry-run
خروجی این دستور باید چیزی شبیه به این باشد:
Output Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/example.com.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cert not due for renewal, but simulating renewal for dry run Plugins selected: Authenticator apache, Installer apache Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org Renewing an existing certificate Performing the following challenges: http-01 challenge for example.com http-01 challenge for www.example.com Waiting for verification... Cleaning up challenges Resetting dropped connection: acme-staging-v02.api.letsencrypt.org - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - new certificate deployed with reload of apache server; fullchain is /etc/letsencrypt/live/example.com/fullchain.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates below have not been saved.) Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/example.com/fullchain.pem (success) ...
توجه کنید که اگر یک گواهی برای چندین نام دامنه ایجاد کرده باشید، فقط نام دامنه پایه در خروجی نشان داده میشود؛ اما تمدید گواهی SSL برای تمامی این دامنهها انجام خواهد شد.
راهکار عملی برای اطمینان از منسوخنشدن گواهی SSL، ایجاد Corn Job است که بهصورت دورهای دستور تمدید را برای شما اجرا کند. ازآنجاکه برای تمدید گواهی ابتدا تاریخ انقضا بررسی میشود و فقط درصورتی تمدید انجام میشود که کمتر از ۳۰ روز تا تاریخ انقضا فاصله داشته باشید، ایجاد Corn Job که هرهفته یا حتی هرروز اجرا شود، خطری نخواهد داشت.
اسناد رسمی Certbot توصیه میکنند که Corn را دو بار در روز اجرا کنید. بدینترتیب، مطمئن خواهید شد که اگر Let’s Encrypt روند ابطال گواهی را آغاز کند، تا تمدید گواهی با Certbot به کمتر از نصف روز زمان نیاز دارید.
با ویرایش Crontab یک Job جدید ایجاد کنید که روزی دو بار فرایند تمدید خودکار را انجام دهد. برای انجام این کار با کاربر Root، از دستور زیر میتوانید استفاده کنید:
sudo crontab -e
در این صورت، ویرایشگر متن شما Crontab پیشفرض را باز میکند که البته در این مرحله، یک فایل خالی است. با فشردن i وارد حالت insert شوید و خط زیر را اضافه کنید:
crontab 0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew
وقتی کار به اتمام رسید، ESC را فشار دهید تا از حالت Insert خارج شوید. سپس :wp را تایپ کنید و Enter را فشار دهید تا فایل ذخیره شود و از آن خارج شوید. این کار Corn job جدیدی ایجاد میکند که هرروز ظهر و نیمهشب اجرا خواهد شد.
جمعبندی
استفاده از گواهی SSL برای امنیت وبسایتها امری ضروری است. باتوجهبه این مسئله، در این مطلب از آموزش لینوکس و آموزش سنت او اس یاد گرفتیم که چطور از کلاینتی نرمافزاری با نام Certbot برای صدور و نصب گواهی SSL/TLS رایگان روی سرور CentOS 7 استفاده و این گواهی را بهطورخودکار تمدید کنیم.
سؤالات متداول
۱. CentOS چیست؟
CentOS یکی از توزیعهای لینوکس است که پلتفرم محاسباتی رایگان و منبعبازی را فراهم میکند که ازنظر عملکرد با منبع بالادستیاش، یعنی Red Hat Enterprise Linux، سازگار است.
۲. گواهی SSL چیست؟
نصب این گواهی روی سرور وبسایت باعث میشود که تمامی اطلاعات بین سرور و کلاینت بهصورت رمزگذاریشده و ازطریق پروتکل ایمن HTTPS انتقال یابد.
۳. Certbot چیست؟
Certbot نرمافزاری است که با استفاده از آن میتوانید گواهی SSL/TLS را بهطورخودکار روی سرور وبسایت خود نصب کنید.
۴. گواهیهای SSL وبسایت Let’s Encrypt چه مدت اعتبار دارند؟
گواهیهای صادرشده Let’s Encrypt بهمدت ۹۰ روز معتبر خواهند بود. بااینحال، پیشنهاد میکنیم بعد از گذشت ۶۰ روز، گواهی را تمدید کنید.