مقدمه
امنسازی ارتباط کاربران با وبسرور یکی از مهمترین مراحل راهاندازی هر سرویس تحت وب است. معمولاً برای محیطهای عملیاتی از گواهیهای معتبر مانند Let’s Encrypt استفاده میشود، اما در بسیاری از سناریوها مانند:
- محیطهای آزمایشی (Development)
- شبکههای داخلی سازمان (Intranet)
- تست نرمافزار
- سرویسهای موقت
- آزمایش تنظیمات HTTPS
نیازی به دریافت گواهی معتبر از یک CA عمومی وجود ندارد و میتوان از Self-Signed SSL Certificate استفاده کرد.
در این آموزش یاد میگیرید چگونه روی Ubuntu 24.04 LTS یک گواهی SSL خودامضا (Self-Signed Certificate) ایجاد کرده و آن را روی Apache2 فعال کنید تا بتوانید وبسایت خود را از طریق HTTPS اجرا کنید.
در پایان این آموزش:
- Apache از HTTPS استفاده خواهد کرد.
- گواهی SSL روی سرور نصب میشود.
- VirtualHost برای HTTPS پیکربندی خواهد شد.
- ارتباط کاربران با وبسرور به صورت رمزنگاریشده برقرار میشود.
پیشنیازها
قبل از شروع، موارد زیر باید آماده باشد:
- یک سرور Ubuntu 24.04 LTS
- کاربر دارای دسترسی sudo
- نصب بودن Apache2
- یک دامنه یا زیردامنه که به IP سرور اشاره کند (اختیاری)
اگر Apache را نصب نکردهاید، ابتدا آن را نصب کنید:
sudo apt update
sudo apt install apache2 -y
سپس وضعیت سرویس را بررسی کنید:
sudo systemctl status apache2
اگر خروجی مشابه زیر مشاهده کردید، Apache آماده ادامه آموزش است:
active (running)
مرحله اول — ایجاد گواهی Self-Signed SSL
در این بخش یک گواهی SSL خودامضا (Self-Signed) ایجاد میکنیم که Apache از آن برای رمزنگاری ارتباط HTTPS استفاده خواهد کرد.
نکته: مرورگرها به گواهیهای Self-Signed اعتماد ندارند و هنگام ورود به سایت هشدار امنیتی نمایش میدهند. این موضوع کاملاً طبیعی است و به همین دلیل استفاده از این نوع گواهی فقط برای محیطهای توسعه، تست یا شبکههای داخلی پیشنهاد میشود.
ایجاد پوشه نگهداری گواهیها
ابتدا یک پوشه برای نگهداری کلید خصوصی و فایل گواهی ایجاد کنید:
sudo mkdir -p /etc/apache2/ssl
ساخت کلید خصوصی و گواهی SSL
حالا دستور زیر را اجرا کنید:
sudo openssl req \
-x509 \
-nodes \
-days 365 \
-newkey rsa:4096 \
-keyout /etc/apache2/ssl/apache-selfsigned.key \
-out /etc/apache2/ssl/apache-selfsigned.crt
هر کدام از گزینههای بالا وظیفه زیر را دارند:
| گزینه | توضیح |
|---|---|
-x509 |
ایجاد مستقیم گواهی SSL |
-nodes |
عدم رمزگذاری کلید خصوصی |
-days 365 |
اعتبار گواهی به مدت یک سال |
-newkey rsa:4096 |
ساخت کلید RSA با طول ۴۰۹۶ بیت |
-keyout |
مسیر ذخیره کلید خصوصی |
-out |
مسیر ذخیره فایل گواهی |
تکمیل اطلاعات گواهی
پس از اجرای دستور، OpenSSL چند سؤال از شما میپرسد.
نمونهای از اطلاعات قابل وارد کردن:
Country Name (2 letter code): IR
State or Province Name: Tehran
Locality Name: Tehran
Organization Name: Parmin Cloud
Organizational Unit Name: Infrastructure
Common Name: example.com
Email Address: admin@example.com
مهمترین بخش، Common Name است.
در این قسمت باید دامنهای را وارد کنید که قرار است کاربران از طریق آن به وبسایت متصل شوند.
برای مثال:
panel.example.com
یا
example.com
بررسی فایلهای ایجاد شده
در پایان دو فایل ایجاد میشود:
/etc/apache2/ssl/apache-selfsigned.key
کلید خصوصی سرور
و
/etc/apache2/ssl/apache-selfsigned.crt
فایل گواهی SSL
با دستور زیر میتوانید وجود آنها را بررسی کنید:
sudo ls -lh /etc/apache2/ssl
خروجی مشابه زیر خواهد بود:
apache-selfsigned.crt
apache-selfsigned.key
مرحله دوم — پیکربندی Apache برای استفاده از گواهی SSL
حالا که گواهی و کلید خصوصی ایجاد شدهاند، باید Apache را طوری تنظیم کنیم که درخواستهای HTTPS را با استفاده از این گواهی پاسخ دهد.
فعال کردن ماژول SSL
ابتدا ماژول SSL را در Apache فعال کنید:
sudo a2enmod ssl
سپس ماژول Header را نیز فعال کنید که برای برخی تنظیمات امنیتی موردنیاز است:
sudo a2enmod headers
در نهایت تنظیمات را بارگذاری مجدد کنید:
sudo systemctl restart apache2
ایجاد فایل VirtualHost برای HTTPS
برای اینکه وبسایت روی پورت 443 در دسترس باشد، یک فایل VirtualHost جدید ایجاد میکنیم.
اگر سایت شما از فایل پیشفرض Apache استفاده میکند، ابتدا یک نسخه از آن تهیه کنید:
sudo cp /etc/apache2/sites-available/default-ssl.conf \
/etc/apache2/sites-available/example.com-ssl.conf
به جای example.com میتوانید نام دامنه خود را قرار دهید.
فایل را ویرایش کنید:
sudo nano /etc/apache2/sites-available/example.com-ssl.conf
ویرایش تنظیمات SSL
داخل فایل، بخش <VirtualHost *:443> را به شکل زیر تنظیم کنید:
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/ssl_error.log
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache-selfsigned.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache-selfsigned.key
</VirtualHost>
در این تنظیمات:
- ServerName دامنه اصلی سایت است.
- ServerAlias نسخههای دیگر دامنه (مانند www) را مشخص میکند.
- DocumentRoot مسیر فایلهای سایت را تعیین میکند.
- SSLCertificateFile مسیر فایل گواهی SSL است.
- SSLCertificateKeyFile مسیر کلید خصوصی SSL را مشخص میکند.
افزایش امنیت SSL
برای جلوگیری از برخی حملات شناختهشده، پیشنهاد میشود تنظیمات زیر را نیز داخل همان VirtualHost اضافه کنید:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets off
در Ubuntu 24.04 و نسخههای جدید OpenSSL، پروتکلهای TLS 1.0 و TLS 1.1 منسوخ شدهاند و استفاده از TLS 1.2 و TLS 1.3 توصیه میشود.
فعال کردن سایت
پس از ذخیره فایل، سایت SSL را فعال کنید:
sudo a2ensite example.com-ssl.conf
اگر قبلاً سایت پیشفرض SSL را فعال کردهاید و نیازی به آن ندارید، میتوانید آن را غیرفعال کنید:
sudo a2dissite default-ssl.conf
بررسی صحت تنظیمات Apache
قبل از راهاندازی مجدد سرویس، فایلهای پیکربندی را بررسی کنید:
sudo apachectl configtest
اگر همه چیز صحیح باشد، خروجی مشابه زیر نمایش داده میشود:
Syntax OK
اعمال تنظیمات
در پایان Apache را ریستارت کنید:
sudo systemctl restart apache2
اگر سرویس بدون خطا اجرا شد، وبسرور شما آماده ارائه سرویس HTTPS با گواهی Self-Signed است.
مرحله سوم — ریدایرکت خودکار HTTP به HTTPS و تست نهایی SSL
در این مرحله، تمام درخواستهایی که از طریق HTTP (پورت 80) ارسال میشوند را به HTTPS هدایت میکنیم تا کاربران همیشه از ارتباط رمزنگاریشده استفاده کنند.
ویرایش VirtualHost مربوط به HTTP
فایل تنظیمات سایت روی پورت 80 را باز کنید:
sudo nano /etc/apache2/sites-available/example.com.conf
محتوای آن را به شکل زیر تغییر دهید:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/
</VirtualHost>
در این تنظیم:
- تمامی درخواستهای HTTP به نسخه HTTPS سایت منتقل میشوند.
- کد وضعیت 301 Permanent Redirect به موتورهای جستجو اعلام میکند که نسخه امن، آدرس اصلی سایت است.
بررسی صحت تنظیمات
قبل از اعمال تغییرات، فایلهای پیکربندی Apache را بررسی کنید:
sudo apachectl configtest
در صورت صحیح بودن تنظیمات، خروجی زیر را مشاهده خواهید کرد:
Syntax OK
بارگذاری مجدد Apache
اکنون تنظیمات را اعمال کنید:
sudo systemctl reload apache2
یا در صورت تمایل سرویس را ریستارت کنید:
sudo systemctl restart apache2
بررسی وضعیت سرویس Apache
برای اطمینان از اجرای صحیح Apache دستور زیر را اجرا کنید:
sudo systemctl status apache2
خروجی باید مشابه زیر باشد:
Active: active (running)
تست گواهی SSL
اکنون مرورگر را باز کرده و آدرس زیر را وارد کنید:
https://example.com
از آنجایی که این گواهی توسط یک مرجع معتبر (CA) امضا نشده است، مرورگر پیغام هشداری مشابه موارد زیر نمایش میدهد:
- Your connection is not private
- NET::ERR_CERT_AUTHORITY_INVALID
این رفتار کاملاً طبیعی است و به این دلیل است که مرورگر به گواهی Self-Signed اعتماد ندارد.
با انتخاب گزینههایی مانند Advanced و سپس Continue میتوانید وارد سایت شوید.
بررسی گواهی با OpenSSL
برای مشاهده جزئیات گواهی نصبشده نیز میتوانید از دستور زیر استفاده کنید:
openssl s_client -connect example.com:443
در خروجی اطلاعاتی مانند موارد زیر نمایش داده میشود:
- Subject
- Issuer
- Expiration Date
- TLS Version
- Cipher Suite
اگر اتصال بدون خطا برقرار شود، نشان میدهد که Apache گواهی را به درستی بارگذاری کرده است.
چه زمانی از Self-Signed SSL استفاده کنیم؟
استفاده از گواهی Self-Signed در سناریوهای زیر مناسب است:
- محیطهای توسعه (Development)
- شبکههای داخلی (Intranet)
- آزمایش و تست نرمافزار
- سرویسهایی که تنها کاربران داخلی به آنها دسترسی دارند
اما برای وبسایتهای عمومی پیشنهاد میشود از گواهی معتبر مانند Let’s Encrypt استفاده کنید تا مرورگرها بدون نمایش هشدار امنیتی به کاربران، اتصال HTTPS را برقرار کنند.
جمعبندی
در این آموزش نحوه ایجاد و استفاده از گواهی Self-Signed SSL روی Ubuntu 24.04 LTS و Apache را بررسی کردیم. ابتدا با استفاده از OpenSSL یک گواهی و کلید خصوصی ایجاد کردیم، سپس Apache را برای استفاده از آن پیکربندی نمودیم، HTTPS را فعال کردیم و در نهایت تمام درخواستهای HTTP را به HTTPS ریدایرکت کردیم.
اگرچه این نوع گواهی برای وبسایتهای عمومی توصیه نمیشود، اما برای محیطهای آزمایشی، شبکههای داخلی و توسعه نرمافزار یک راهکار سریع، رایگان و کاربردی محسوب میشود.
از همراهی شما با پارمین کلود متشکریم.
نظرات کاربران