جدول محتوایی
معرفی
TLS یا “امنیت لایه حمل و نقل” – و SSL قبلی آن – پروتکل هایی هستند که برای قرار دادن ترافیک عادی در یک پوشش رمزگذاری شده محافظت شده استفاده می شوند. با استفاده از این فناوری، سرورها می توانند با خیال راحت اطلاعات را بدون رهگیری یا خواندن پیام های آنها توسط یک طرف خارجی به مشتریان خود ارسال کنند.
در این راهنما، یک گواهینامه TLS با امضای خود را با وب سرور آپاچی در اوبونتو 22.04 ایجاد و استفاده خواهید کرد. شما از ابزار خط فرمان openssl برای ایجاد گواهی استفاده خواهید کرد و سپس آپاچی را برای استفاده از آن پیکربندی خواهید کرد.
قبل از شروع این آموزش، به موارد زیر نیاز دارید:
- دسترسی به سرور اوبونتو 22.04 با کاربر غیر روت و دارای sudo. راهنمای راه اندازی اولیه سرور با اوبونتو 22.04 می تواند نحوه ایجاد این حساب را به شما نشان دهد.
- همچنین باید آپاچی را نصب کنید. می توانید Apache را با استفاده از apt نصب کنید. ابتدا، فهرست بسته محلی را بهروزرسانی کنید تا آخرین تغییرات بالادستی را منعکس کند:
sudo apt update
سپس بسته apache2 را نصب کنید:
sudo apt install apache2
و در نهایت، اگر فایروال ufw راه اندازی کرده اید، پورت های http و https را باز کنید:
sudo ufw allow "Apache Full"
پس از اتمام این مراحل، مطمئن شوید که به عنوان کاربر non-root خود وارد شده اید و به آموزش ادامه دهید.
بخوانید: نحوه پیکربندی فایروال در ویندوز سرور
مرحله 1. فعال کردن
قبل از اینکه بتوانید از گواهی های TLS استفاده کنید، ابتدا باید mod_ssl را فعال کنید، یک ماژول آپاچی که از رمزگذاری SSL پشتیبانی می کند.
mod_ssl را با دستور a2enmod فعال کنید:
sudo a2enmod ssl
Apache را مجددا راه اندازی کنید تا ماژول را فعال کنید:
sudo systemctl restart apache2
ماژول mod_ssl اکنون فعال و آماده استفاده است.
مرحله 2.ایجاد گواهی TLS
اکنون که آپاچی برای استفاده از رمزگذاری آماده است، میتوانیم به تولید گواهی TLS جدید برویم. این گواهی برخی از اطلاعات اولیه در مورد سایت شما را ذخیره می کند و با یک فایل کلیدی همراه خواهد بود که به سرور اجازه می دهد تا به طور ایمن داده های رمزگذاری شده را مدیریت کند.
ما می توانیم کلید TLS و فایل های گواهی را با دستور openssl ایجاد کنیم:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
پس از وارد کردن دستور، به یک فرمان هدایت می شوید که می توانید اطلاعات مربوط به وب سایت خود را وارد کنید. قبل از اینکه به آن بپردازیم، بیایید نگاهی به آنچه در دستوری که صادر می کنیم بیاندازیم:
- openssl: این ابزار خط فرمان برای ایجاد و مدیریت گواهینامه ها، کلیدها و سایر فایل ها Open SSL است.
- req -x509: این مشخص می کند که ما می خواهیم از مدیریت درخواست امضای گواهی نامه (CSR) X.509 استفاده کنیم. X.509 یک استاندارد زیرساخت کلید عمومی است که TLS برای مدیریت کلید و گواهینامه به آن پایبند است.
- -nodes: این به Open SSL می گوید که از گزینه ایمن سازی گواهی ما با یک عبارت عبور صرف نظر کند. ما به آپاچی نیاز داریم تا بتوانیم فایل را بدون دخالت کاربر هنگام راه اندازی سرور بخوانیم. یک عبارت عبور از این اتفاق جلوگیری می کند، زیرا ما باید بعد از هر راه اندازی مجدد آن را وارد کنیم.
- -days 365: این گزینه مدت زمانی را که گواهی معتبر در نظر گرفته می شود را تعیین می کند. ما آن را برای یک سال در اینجا تنظیم کردیم. بسیاری از مرورگرهای مدرن هرگونه گواهینامه ای را که بیش از یک سال معتبر باشد رد می کنند.
- -newkey rsa:2048: این مشخص می کند که می خواهیم همزمان یک گواهی جدید و یک کلید جدید تولید کنیم. ما کلید مورد نیاز برای امضای گواهی را در مرحله قبل ایجاد نکردیم، بنابراین باید آن را همراه با گواهی ایجاد کنیم. بخش rsa:2048 به آن می گوید که یک کلید RSA با طول 2048 بیت بسازد.
- -keyout: این خط به Open SSL میگوید که فایل کلید خصوصی تولید شده را در کجا قرار دهد.
- -out: این به Open SSL میگوید که گواهیای را که در حال ایجاد آن هستیم، کجا قرار دهد.
دستورات را به درستی پر کنید. مهمترین خط خطی است که نام مشترک را درخواست می کند. شما باید نام میزبانی را که برای دسترسی به سرور استفاده می کنید یا 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 []:[email protected]
هر دو فایلی که ایجاد کردید در زیر شاخه های مناسب در زیر /etc/ssl قرار می گیرند.
سپس پیکربندی آپاچی خود را برای استفاده از گواهی و کلید جدید به روز می کنیم.
مرحله 3 – پیکربندی آپاچی برای استفاده از TLS
اکنون که گواهینامه و کلید خود امضا شده خود را در دسترس داریم، برای استفاده از آنها باید پیکربندی آپاچی خود را به روز کنیم. در اوبونتو، میتوانید فایلهای پیکربندی جدید آپاچی (باید به .conf ختم شوند) را در /etc/apache2/sites-available/ قرار دهید و دفعه بعد که فرآیند آپاچی بارگذاری مجدد یا راهاندازی مجدد شد، بارگذاری میشوند.
برای این آموزش ما یک فایل پیکربندی حداقل جدید ایجاد خواهیم کرد. (اگر قبلاً یک آپاچی <Virtualhost> راه اندازی کرده اید و فقط باید TLS را به آن اضافه کنید، احتمالاً باید از خطوط پیکربندی که با SSL شروع می شوند کپی کنید و پورت VirtualHost را از 80 به 443 تغییر دهید. ما مراقبت خواهیم کرد. از پورت 80 در مرحله بعد.)
یک فایل جدید در فهرست /etc/apache2/sites-available باز کنید:
sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf
در پیکربندی حداقل VirtualHost زیر قرار دهید:
<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 باشد. مطمئن شوید هر چیزی که انتخاب می کنید با نام مشترکی که هنگام ساخت گواهی انتخاب کرده اید مطابقت داشته باشد.
خطوط باقیمانده یک دایرکتوری DocumentRoot برای ارائه فایلها و گزینههای TLS مورد نیاز برای نشان دادن Apache به گواهی و کلید تازه ایجاد شده ما را مشخص میکنند.
اکنون اجازه دهید DocumentRoot خود را ایجاد کنیم و یک فایل HTML را فقط برای اهداف آزمایشی در آن قرار دهیم:
sudo mkdir /var/www/your_domain_or_ip
یک فایل index.html جدید با ویرایشگر متن خود باز کنید:
sudo nano /var/www/your_domain_or_ip/index.html
موارد زیر را در فایل خالی قرار دهید:
<h1>it worked!</h1>
البته این یک فایل HTML کامل نیست، اما مرورگرها نرم هستند و برای تأیید پیکربندی ما کافی است.
فایل را ذخیره و ببندید سپس باید فایل پیکربندی را با ابزار 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 به صورت سراسری تنظیم نشده است. اگر میخواهید از شر آن پیام خلاص شوید، میتوانید ServerName را روی نام دامنه یا آدرس IP سرور خود در /etc/apache2/apache2.conf تنظیم کنید. این اختیاری است زیرا پیام هیچ آسیبی نخواهد داشت.
اگر در خروجی شما Syntax OK باشد، فایل پیکربندی شما هیچ خطای نحوی ندارد. ما می توانیم با خیال راحت Apache را برای اجرای تغییرات خود بارگذاری مجدد کنیم:
sudo systemctl reload apache2
اکنون سایت خود را در یک مرورگر بارگذاری کنید، حتماً در ابتدا از https:// استفاده کنید.
شما باید یک خطا ببینید. این برای گواهی امضا شده طبیعی است! مرورگر به شما هشدار می دهد که نمی تواند هویت سرور را تأیید کند، زیرا گواهی ما توسط هیچ یک از مقامات گواهی شناخته شده آن امضا نشده است. برای اهداف آزمایشی و استفاده شخصی این می تواند خوب باشد. باید بتوانید روی اطلاعات پیشرفته یا بیشتر کلیک کنید و ادامه را انتخاب کنید.
پس از انجام این کار، مرورگر شما آن را بارگیری می کند! پیام
sudo ufw allow "Apache Full"
سپس بخش VirtualHost دیگری را به پیکربندی خود اضافه می کنیم تا درخواست های HTTP ساده را ارائه کرده و آنها را به HTTPS هدایت کنیم.
مرحله 4 – هدایت HTTP به HTTPS
در حال حاضر، پیکربندی ما فقط به درخواستهای HTTPS در پورت 443 پاسخ میدهد. تمرین خوبی است که در پورت 80 نیز پاسخ دهید، حتی اگر میخواهید تمام ترافیک را مجبور به رمزگذاری کنید. بیایید یک VirtualHost راه اندازی کنیم تا به این درخواست های رمزگذاری نشده پاسخ دهد و آنها را به HTTPS هدایت کند.
همان فایل پیکربندی آپاچی را که در مراحل قبلی شروع کردیم باز کنید:
sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf
در پایین، یک بلوک VirtualHost دیگر برای مطابقت با درخواستها در پورت 80 ایجاد کنید. از دستور ServerName برای مطابقت مجدد با نام دامنه یا آدرس IP خود استفاده کنید. سپس، از Redirect برای مطابقت با هر درخواستی استفاده کنید و آنها را به TLS VirtualHost ارسال کنید. اطمینان حاصل کنید که اسلش انتهایی را وارد کنید:
<VirtualHost *:80>
ServerName your_domain_or_ip
Redirect / https://your_domain_or_ip/
</VirtualHost>
پس از اتمام کار، این فایل را ذخیره و ببندید، سپس سینتکس پیکربندی خود را دوباره تست کنید و آپاچی را مجدداً بارگیری کنید:
sudo apachectl configtest sudo systemctl reload apache2
می توانید با مراجعه به سایت خود با http:// ساده در جلوی آدرس، عملکرد جدید تغییر مسیر را آزمایش کنید. شما باید به طور خودکار به https:// هدایت شوید.