مقدمه
پروتکل TLS (Transport Layer Security) و نسخه قدیمیتر آن یعنی SSL، برای رمزنگاری و امنسازی ترافیک معمولی وب استفاده میشوند. با استفاده از این فناوری، سرورها میتوانند دادهها را به صورت امن و بدون خطر شنود یا دستکاری توسط افراد ثالث به کلاینتها ارسال کنند.
در این راهنما از وبلاگ پارمین کلود، نحوه ساخت و پیکربندی یک گواهی SSL خودامضا (Self-Signed) را برای وبسرور Apache روی سیستمعامل Rocky Linux 9 (یا AlmaLinux 9) بررسی خواهیم کرد.
نکته بسیار مهم: گواهی خودامضا، ارتباط بین سرور و کاربر را به طور کامل رمزنگاری میکند؛ اما چون توسط صادرکنندگان معتبر SSL (مانند Let’s Encrypt یا DigiCert) تأیید نشده است، مرورگرها هویت سرور شما را به طور خودکار تأیید نمیکنند و به کاربر خطای هشدار امنیتی (Security Warning) نشان میدهند.
به همین دلیل، گواهیهای خودامضا برای محیطهای عملیاتی (Production) عمومی مناسب نیستند و بیشتر برای پروژههای تست، محیطهای توسعه، یا سرویسهای داخلی شرکتها استفاده میشوند. اگر قصد دارید وبسایت عمومی راهاندازی کنید، پیشنهاد میکنیم از گواهیهای رایگان Let’s Encrypt استفاده نمایید.
پیشنیازها
قبل از شروع این آموزش، به موارد زیر نیاز دارید:
-
یک سرور با سیستمعامل Rocky Linux 9 یا AlmaLinux 9 (میتوانید سرور ابری خود را در پارمین کلود تحویل بگیرید).
-
دسترسی به یک کاربر غیر Root با دسترسیهای
sudo. -
نصب بودن وبسرور Apache (
httpd).
برای نصب Apache و فعالسازی آن کافیست دستورات زیر را اجرا کنید:
sudo dnf install httpd -y
sudo systemctl enable --now httpd
در صورتی که فایروال (firewalld) روی سرور فعال است، پورتهای HTTP و HTTPS را باز کنید:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
گام اول — نصب ماژول mod_ssl
برای پشتیبانی وبسرور Apache از رمزنگاری SSL، ابتدا باید ماژول mod_ssl را نصب کنیم. این کار با مدیر پکیج dnf انجام میشود:
sudo dnf install mod_ssl -y
پس از نصب، یکبار وبسرور را ریاستارت کنید تا کلیدها و تنظیمات اولیه SSL بهدرستی بارگذاری شوند:
sudo systemctl restart httpd
اکنون ماژول mod_ssl فعال و آماده استفاده است.
گام دوم — ساخت گواهی SSL خودامضا
حال که وبسرور آماده رمزنگاری است، گواهی جدید را تولید میکنیم. این گواهی شامل اطلاعات پایه وبسایت شماست و همراه یک کلید خصوصی (Private Key) ساخته میشود.
دستور زیر را جهت ساخت کلید و گواهی SSL در ابزار OpenSSL وارد کنید:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/apache-selfsigned.key -out /etc/pki/tls/certs/apache-selfsigned.crt
توضیحات پارامترهای دستور:
-
openssl: ابزار اصلی مدیریت کلیدها و گواهیهای OpenSSL. -
req -x509: مشخص میکند که قصد داریم از استاندارد مدیریت گواهی X.509 استفاده کنیم. -
-nodes: با این گزینه، رمزگذاری روی فایل کلید خصوصی غیرفعال میشود تا Apache بتواند هنگام روشن شدن سرور، بدون نیاز به وارد کردن کلمه عبور توسط کاربر، فایل را بخواند. -
-days 365: مدت زمان اعتبار گواهی به روز (در اینجا یک سال). -
-newkey rsa:2048: ساخت همزمان یک کلید جدید RSA با طول ۲۰۴۸ بیت. -
-keyout: مسیر ذخیرهسازی فایل کلید خصوصی (Private Key). -
-out: مسیر ذخیرهسازی فایل گواهی اصلی (Certificate).
پس از اجرای دستور، سوالاتی از شما پرسیده میشود. مهمترین بخش، گزینه Common Name است که باید آدرس آیپی (IP) سرور یا نام دامنه خود را در آن وارد کنید:
Country Name (2 letter code) [XX]:IR
State or Province Name (full name) []:Tehran
Locality Name (eg, city) [Default City]:Tehran
Organization Name (eg, company) [Default Company Ltd]:Parmin Cloud
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:your_domain_or_ip
Email Address []:admin@example.com
فایلهای ساختهشده در مسیر /etc/pki/tls که مسیر استاندارد توزیعهای مبتنی بر RedHat است قرار میگیرند.
گام سوم — تنظیم وبسرور Apache برای استفاده از SSL
در این مرحله، فایل کانفیگ اختصاصی برای استفاده از گواهی SSL میسازیم. تمام فایلهای کانفیگ جدید با پسوند .conf باید در مسیر /etc/httpd/conf.d/ قرار گیرند.
یک فایل جدید با ویرایشگر متن ایجاد کنید:
sudo nano /etc/httpd/conf.d/your_domain_or_ip.conf
محتوای زیر را داخل فایل قرار دهید (آدرس ServerName را با دامنه یا IP سرور خود جایگزین کنید):
<VirtualHost *:443>
ServerName your_domain_or_ip
DocumentRoot /var/www/ssl-test
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/pki/tls/private/apache-selfsigned.key
</VirtualHost>
سپس دایرکتوری سند و یک فایل نمونه برای تست ایجاد میکنیم:
sudo mkdir -p /var/www/ssl-test
echo "<h1>پیکربندی SSL در پارمین کلود با موفقیت انجام شد!</h1>" | sudo tee /var/www/ssl-test/index.html
تست صحت دستورات و کانفیگ Apache:
sudo apachectl configtest
اگر خروجی شامل Syntax OK بود، وبسرور را بارگذاری مجدد (Reload) کنید:
sudo systemctl reload httpd
اکنون آدرس سایت را با https:// در مرورگر باز کنید. مشاهده خطای هشدار امنیتی (Potential Security Risk) طبیعی است؛ روی گزینه Advanced کلیک کرده و ورود را تأیید کنید تا صفحه تست نمایش داده شود.
گام چهارم — هدایت (Redirect) ترافیک HTTP به HTTPS
برای امنیت بیشتر، بهتر است تمامی درخواستهای عادی روی پورت 80 (HTTP) به صورت خودکار به پورت 443 (HTTPS) هدایت شوند.
مجدداً فایل کانفیگی که ساختید را باز کنید:
sudo nano /etc/httpd/conf.d/your_domain_or_ip.conf
بلوک زیر را به انتهای فایل اضافه کنید:
<VirtualHost *:80>
ServerName your_domain_or_ip
Redirect / https://your_domain_or_ip/
</VirtualHost>
تست ساختار و اعمال تغییرات:
sudo apachectl configtest
sudo systemctl reload httpd
اکنون اگر آدرس سایت را با http:// وارد کنید، مرورگر به طور خودکار به https:// منتقل میشود.
از همراهی شما با پارمین کلود سپاسگزاریم.
نظرات کاربران