TLS یا “امنیت لایه ای انتقال” – و پیش نیاز آن SSL – پروتکل هایی هستند كه برای پوشش ترافیك عادی در یك بسته بندی رمزگذاری شده مورد استفاده قرار می گیرند. با استفاده از این فناوری ، سرورها می توانند با اطمینان اطلاعاتی را برای کلاینت های خود ارسال کنند بدون اینکه پیام های آنها توسط طرف خارجی رهگیری یا خوانده شود.
در این راهنما نحوه ایجاد و استفاده از گواهی SSL خود امضا شده با وب سرور Apache در Ubuntu 20.04 را به شما نشان خواهیم داد.
توجه: گواهی خود امضا شده ارتباط بین سرور شما و هر کلاینت را رمزگذاری می کند. اما ، به دلیل اینکه توسط هیچ یک از مراجع معتبر گواهی نامه های همراه مرورگرهای وب و سیستم عامل ها امضا نشده است ، کاربران نمی توانند از گواهی نامه برای تأیید هویت سرور شما به طور خودکار استفاده کنند. در نتیجه ، کاربران شما هنگام مراجعه به سایت شما ، یک خطای امنیتی را مشاهده می کنند.
به خاطر این محدودیت ، گواهینامه های خود امضا شده برای محیط تولیدی که به مردم ارائه میشوند، مناسب نیستند. معمولاً برای آزمایش و یا برای تأمین امنیت خدمات غیر مهم که توسط یک کاربر واحد یا گروه کوچکی از کاربران استفاده می شود و می توانند به اعتبار گواهی از طریق کانالهای ارتباطی متناوب اعتماد کنند ، استفاده می شوند.
برای یک راه حل آماده تولیدتر، Let’s Encrypt ، یعنی مجوز رایگان را بررسی کنید. می توانید نحوه دانلود و پیکربندی یک گواهی Let’s Encrypt را در آموزش نحوه تأمین امنیت Apache با Let’s Encrypt در اوبونتو 20.04 بیاموزید.
پیش نیازها
قبل از شروع این آموزش ، به موارد زیر نیاز خواهید داشت:
• دسترسی به یک سرور Ubuntu 20.04 با یک کاربر غیر root و فعال با sudo. راهنمای ستاپ اولیه سرور برای اوبونتو 20.04 می تواند نحوه ایجاد این حساب را به شما نشان دهد.
• همچنین باید Apache را نصب کنید. می توانید Apache را با استفاده از apt نصب کنید. ابتدا شاخص بسته محلی را به روز کنید تا آخرین تغییرات بالادست را منعکس کنید:
$ sudo apt update

سپس بسته apache2 را نصب کنید:
$ sudo apt install apache2

• و در آخر ، اگر فایروال ufw را تنظیم کرده اید ، پورت های http و https را باز کنید:
$ sudo ufw allow “Apache Full”

پس از اتمام این مراحل ، مطمئن شوید که به عنوان کاربر غیر ریشه خود وارد شده اید و آموزش را ادامه دهید.
مرحله 1 – فعال کردن mod_ssl
قبل از استفاده از هرگونه گواهی SSL ، ابتدا باید mod_ssl را فعال کنیم ، یک ماژول Apache که پشتیبانی از رمزگذاری SSL را فراهم می کند.
mod_ssl را با دستور a2enmod فعال کنید:
برای فعال کردن ماژول، Apache را ریستارت کنید:
اکنون ماژول mod_ssl فعال و آماده استفاده است.
مرحله 2 – ایجاد گواهی SSL
اکنون که Apache آماده استفاده از رمزگذاری است ، می توانیم به سراغ تولید یک گواهی SSL جدید برویم. این گواهی اطلاعات اصلی در مورد سایت شما را ذخیره می کند و همراه با یک فایل کلیدی است که به سرور اجازه می دهد تا داده های رمزگذاری شده را به طور ایمن اداره کند.
می توانیم کلید SSL و فایل های گواهی نامه را با دستور opensl بسازیم:
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

پس از وارد کردن فرمان ، به شما اعلان می شود که می توانید اطلاعات مربوط به وب سایت خود را وارد کنید. قبل از اینکه به این موضوع بپردازیم ، بیایید نگاهی به آنچه در فرمان های ما صادر می شود نگاهی بیندازیم:
Opensl: این ابزار خط فرمان برای ایجاد و مدیریت گواهینامه ها ، کلیدها و فایل های OpenSSL است.
req -x509: مشخص می کند که ما می خواهیم از مدیریت درخواست امضای گواهی X.509 (CSR) استفاده کنیم. X.509 یک استاندارد زیرساخت کلید عمومی است که SSL و TLS برای مدیریت کلید و گواهینامه از آن رعایت می کنند.
-nodes: به OpenSSL میگوید که از این گزینه برای تأیید گواهینامه با یک عبارت عبور بگذرد. ما به Apache نیاز داریم تا هنگام راه اندازی سرور ، قادر به خواندن فایل بدون دخالت کاربر باشیم. عبارت عبور از وقوع این امر جلوگیری می کند ، زیرا ما باید پس از هر بار مجدد وارد آن شویم.
-days 365: این گزینه مدت زمانی را که گواهی معتبر در نظر گرفته شود تعیین می کند. ما آن را برای یک سال در اینجا تنظیم کردیم. بسیاری از مرورگرهای مدرن هرگونه گواهی نامه معتبر را برای مدت طولانی تر از یک سال رد می کنند.
-newkey rsa: 2048: مشخص می کند که ما می خواهیم همزمان گواهی جدید و کلید جدیدی تولید کنیم. ما کلید لازم را برای امضای گواهینامه در مرحله قبل ایجاد نکردیم ، بنابراین باید آن را همراه گواهی نامه ایجاد کنیم. بخش rsa: 2048 به آن می گوید که یک کلید RSA تهیه کند که طول آن 2048 بیت باشد.
-keyout: خط به OpenSSL می گوید که فایل کلید خصوصی تولید شده را که ایجاد می کنیم در کجا قرار دهد.
-out: به OpenSSL می گوید گواهی را که ایجاد می کنیم در کجا قرار دهد.
دستورالعمل ها را به طور مناسب پر کنید. مهمترین خط خطی است که Common Name را درخواست می کند. برای دسترسی به سرور یا IP عمومی سرور باید نام میزبان مورد استفاده خود را وارد کنید. مهم است که این قسمت برای دسترسی به سایت به نوار آدرس مرورگر شما وارد شود ، زیرا عدم تطابق خطاهای امنیتی بیشتری ایجاد می کند.
لیست کاملی از اعلان ها چیزی شبیه به این خواهد بود:
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:Example
Locality Name (eg, city) [Default City]:Example
Organization Name (eg, company) [Default Company Ltd]:Example Inc
Organizational Unit Name (eg, section) []:Example Dept
Common Name (eg, your name or your server’s hostname) []:your_domain_or_ip
Email Address []:webmaster@example.com

هر دو فایلی که ایجاد کرده اید در زیرمجموعه های مناسب تحت / etc / ssl قرار می گیرند.
در مرحله بعدی پیکربندی Apache خود را برای استفاده از گواهینامه و کلید جدید به روز خواهیم کرد.
مرحله 3 – پیکربندی Apache برای استفاده از SSL
اکنون که گواهی خود امضا شده و کلید دردسترس داریم، برای استفاده از آنها باید پیکربندی Apache خود را به روز کنیم. در اوبونتو ، می توانید فایل های جدید پیکربندی Apache (باید به .conf ختم شوند) را در / etc / apache2 / sites-available قرار دهید و بار دیگر فرایند Apache را لود یا ریستارت کنید.
برای این آموزش یک فایل پیکربندی حداقلی جدید ایجاد خواهیم کرد. (اگر قبلاً Apache <Virtualhost> را تنظیم کرده اید و فقط لازم است SSL را به آن اضافه کنید ، به احتمال زیاد نیاز دارید که خطوط پیکربندی را که با SSL شروع می شود کپی کنید و پورت VirtualHost را از 80 به 443 تغییر دهید. در مرحله بعدی به پورت 80 خواهیم پرداخت).
یک فایل جدید را در دیرکتوری /etc/apache2/sites-available باز کنید:
$ sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf

در پیکربندی حداقلی VirtualHost زیر پیست کنید:
/etc/apache2/sites-available/your_domain_or_ip.conf
<VirtualHost *:443>
ServerName your_domain_or_ip
DocumentRoot /var/www/your_domain_or_ip

SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
</VirtualHost>

حتماً خط ServerName را به روز کنید تا سرور خود را خطاب کنید. این نام می تواند یک نام هاست ، نام دامنه کامل یا یک آدرس IP باشد. اطمینان حاصل کنید که هر چیزی که انتخاب کردید با Common Nameکه هنگام تهیه گواهی انتخاب کرده اید مطابقت دارد.
خطوط باقیمانده دیرکتوری DocumentRoot  برای ارائه فایل ها را تعیین میکند ، و گزینه های SSL مورد نیاز برای نشان دادن Apache به گواهینامه و کلید تازه ایجاد شده ما را مشخص می کنند.
اکنون بیایید DocumentRoot را ایجاد کنیم و یک فایل HTML را فقط برای اهداف آزمایشی در آن قرار دهیم:
$ sudo mkdir /var/www/your_domain_or_ip

فایل جدید index.html را با ویرایشگر متن خود باز کنید:
$ sudo nano /var/www/your_domain_or_ip/index.html

موارد زیر را در فایل خالی قرار دهید:
/var/www/your_domain_or_ip/index.html
<h1>it worked!</h1>

این یک فایل HTML کامل نیست ، اما مرورگرها سخت نمیگیرند و برای تأیید پیکربندی ما کافی خواهد بود.
$ sudo a2ensite your_domain_or_ip.conf

فایل را ذخیره کنید و ببندید.
در مرحله بعد ، باید فایل پیکربندی را با ابزار a2ensite فعال کنیم:
$ sudo a2ensite your_domain_or_ip.conf

سپس ، خطاهای پیکربندی را آزمایش کنید:
$ sudo apache2ctl configtest

اگر همه چیز موفقیت آمیز باشد ، به خروجی خواهید رسید که اینگونه به نظر می رسد:
Output
AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1. Set the ‘ServerName’ directive globally to suppress this message
Syntax OK

خط اول پیامی است که به شما می گوید دستورالعمل ServerName در سطح جهانی تنظیم نشده است. اگر می خواهید از این پیام خلاص شوید ، می توانید نام سرور یا آدرس IP سرور خود را در /etc/apache2/apache2.conf تنظیم کنید. این کار اختیاری است زیرا این پیام هیچ ضرری نخواهد داشت.
اگر خروجی شما دارای Syntax OK باشد ، فایل پیکربندی شما هیچگونه خطای نحوی ندارد. ما می توانیم با خیال راحت Apache را لود کنیم تا تغییرات خود را اعمال کنیم:
$ sudo systemctl reload apache2

اکنون سایت خود را در یک مرورگر لود کنید ، حتما در ابتدا از https: // استفاده کنید.
باید خطایی را ببینید. این خطا برای گواهی خود امضا شده طبیعی است! مرورگر به شما هشدار می دهد که نمی تواند هویت سرور را تأیید کند ، زیرا گواهی ما توسط هیچ یک از مراجع گواهی شناخته شده آن امضا نشده است. برای اهداف آزمایشی و استفاده شخصی می تواند خوب باشد. باید بتوانید روی advanced و  more information کلیک کنید و ادامه دهید.
بعد از انجام این کار ، مرورگر شما پیام it worked! را نشان میدهد.
توجه: اگر مرورگر شما به هیچ وجه به سرور وصل نمی شود ، مطمئن شوید که اتصال شما توسط فایروال مسدود نشده است. اگر از ufw استفاده می کنید ، دستورات زیر پورت های 80 و 443 را باز می کنند:
$ sudo ufw allow “Apache Full”

در مرحله بعد یک بخش دیگر VirtualHost را به پیکربندی خود اضافه خواهیم کرد تا درخواستهای HTTP ساده ارائه دهیم و آنها را به HTTPS هدایت کنیم.
مرحله 4 – هدایت HTTP به HTTPS
در حال حاضر ، پیکربندی ما فقط به درخواست های HTTPS در پورت 443 پاسخ خواهد داد. این مسئله از ان جهت خوب است که به پورت 80 نیز پاسخ دهید ، حتی اگر می خواهید همه ترافیک ها را مجبور به رمزگذاری کنید. بیایید یک VirtualHost برای پاسخگویی به این درخواست های رمز گذاری نشده و هدایت آنها به HTTPS تنظیم کنیم.
همان فایل پیکربندی Apache را که در مراحل قبلی شروع کرده ایم باز کنید:
$ sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf

در پایین ، یک بلوک VirtualHost دیگر ایجاد کنید تا با درخواست های در پورت 80 مطابقت داشته باشد. از دستورالعمل ServerName استفاده کنید تا دوباره با نام دامنه یا آدرس IP شما مطابقت داشته باشد. سپس از Redirect برای مطابقت با هر درخواستی استفاده کنید و آنها را به SSL VirtualHost ارسال کنید. مطمئن شوید که اسلش دنباله دار را شامل می شود:
/etc/apache2/sites-available/your_domain_or_ip.conf
<VirtualHost *:80>
ServerName your_domain_or_ip
Redirect / https://your_domain_or_ip/
</VirtualHost>

پس از اتمام ، این فایل را ذخیره کنید و ببندید ، سپس دستور پیکربندی خود را دوباره آزمایش کنید و Apache را مجدد لود کنید:
$ sudo apachectl configtest

$ sudo systemctl reload apache2

می توانید با مراجعه به سایت خود با تایپ http://www در مقابل آدرس ، قابلیت تغییر مسیر جدید را آزمایش کنید. باید به صورت خودکار به https: // هدایت شوید.
نتیجه
اکنون Apache را تنظیم کرده اید تا درخواست های رمزگذاری شده را با استفاده از گواهی SSL خود امضا شده ، و درخواست های HTTP رمزگذاری نشده را به HTTPS هدایت کند.
اگر قصد استفاده از SSL برای یک وب سایت عمومی را دارید ، باید به دنبال خرید نام دامنه باشید و از یک مجوز گسترده گواهی پشتیبانی شده مانند Let’s Encrypt استفاده کنید.
برای کسب اطلاعات بیشتر در مورد استفاده از Let’s Encrypt با Apache ، لطفا نحوه ایمن سازی از Apache با Let’s در اوبونتو 20.04 را بخوانید.

برچسب‌ها:,