آموزش SSL Self-Signed برای Apache در Ubuntu 24.04 LTS

مقدمه

امن‌سازی ارتباط کاربران با وب‌سرور یکی از مهم‌ترین مراحل راه‌اندازی هر سرویس تحت وب است. معمولاً برای محیط‌های عملیاتی از گواهی‌های معتبر مانند 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 ریدایرکت کردیم.

اگرچه این نوع گواهی برای وب‌سایت‌های عمومی توصیه نمی‌شود، اما برای محیط‌های آزمایشی، شبکه‌های داخلی و توسعه نرم‌افزار یک راهکار سریع، رایگان و کاربردی محسوب می‌شود.

از همراهی شما با پارمین کلود متشکریم.

Click to rate this post!
[Total: 0 Average: 0]

نظرات کاربران

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *