خانه امنیت و SSL نحوه ایجاد فایل CSR و نصب گواهینامه SSL در سرور آپاچی با استفاده از OpenSSL
تاریخ به‌روزرسانی : 1396/10/20
به قلم : شهاب بیرامی
زمان مطالعه : 10 دقیقه

خلاصه مطلب (TL;DR)

  • گواهینامه SSL چیست؟ پروتکل امنیتی که ارتباط بین مرورگر کاربر و سرور را رمزگذاری می‌کند و اطلاعات حساس را محافظت می‌کند.
  • مراحل اصلی نصب: ایجاد کلید خصوصی (Private Key)، تولید فایل CSR، خرید گواهینامه، پیکربندی Apache، فعال‌سازی HTTPS.
  • پیش‌نیازها: دسترسی SSH به سرور، نصب OpenSSL، Apache با mod_ssl، دامنه فعال.
  • زمان تقریبی: ۱۵ تا ۳۰ دقیقه (بدون احتساب زمان صدور گواهینامه).

امروزه داشتن گواهینامه SSL برای هر وب‌سایتی ضروری است. گوگل از سال ۲۰۱۴ استفاده از HTTPS را به عنوان یک سیگنال رتبه‌بندی در نظر گرفته و مرورگرهای مدرن سایت‌های بدون SSL را به عنوان «ناامن» نشان می‌دهند. در این راهنمای جامع، نحوه ایجاد فایل CSR و نصب گواهینامه SSL در سرور آپاچی را قدم به قدم آموزش می‌دهیم.

اگر به دنبال خرید گواهینامه SSL معتبر با قیمت مناسب هستید، می‌توانید از سرویس SSL برتینا استفاده کنید که شامل انواع گواهینامه‌های DV، OV و EV می‌شود.

از تجربه ما: تیم فنی برتینا سالانه صدها گواهینامه SSL را برای مشتریان هاست، سرور مجازی و سرور اختصاصی نصب و پیکربندی می‌کند. این راهنما بر اساس بهترین شیوه‌های امنیتی ۲۰۲۵-۲۰۲۶ و تجربه عملی ما تهیه شده است.

انواع گواهینامه SSL و تفاوت‌های آنها

قبل از شروع نصب، مهم است که نوع مناسب گواهینامه را انتخاب کنید. در جدول زیر تفاوت‌های اصلی انواع گواهینامه SSL را مشاهده می‌کنید:

ویژگی DV (Domain Validation) OV (Organization Validation) EV (Extended Validation)
سطح اعتبارسنجی فقط دامنه دامنه + سازمان دامنه + سازمان + بررسی گسترده
زمان صدور چند دقیقه ۱ تا ۳ روز ۵ تا ۱۵ روز
قیمت تقریبی رایگان تا ۵۰ دلار ۵۰ تا ۲۰۰ دلار ۲۰۰ تا ۷۰۰ دلار
مناسب برای بلاگ، سایت شخصی کسب‌وکارها، SMB بانک‌ها، فروشگاه‌های بزرگ
نمایش اطلاعات سازمان خیر بله بله (کامل)
پشتیبانی از Wildcard بله بله خیر

پیش‌نیازهای نصب گواهینامه SSL در آپاچی

قبل از شروع، مطمئن شوید که پیش‌نیازهای زیر را دارید:

  • دسترسی SSH به سرور: برای اجرای دستورات به دسترسی root یا sudo نیاز دارید. اگر سرور مجازی یا سرور اختصاصی دارید، این دسترسی را خواهید داشت.
  • Apache نسخه ۲.۴.۳۷ یا بالاتر: برای پشتیبانی از TLS 1.3 به این نسخه یا جدیدتر نیاز دارید.
  • OpenSSL نسخه ۱.۱.۱ یا بالاتر: برای پشتیبانی کامل از TLS 1.3 ضروری است.
  • ماژول mod_ssl: باید روی آپاچی فعال باشد.
  • دامنه فعال: دامنه باید به IP سرور شما اشاره کند.

برای بررسی نسخه‌های نصب شده، دستورات زیر را اجرا کنید:

# بررسی نسخه Apache
apache2 -v

# بررسی نسخه OpenSSL
openssl version

# بررسی فعال بودن mod_ssl
apache2ctl -M | grep ssl

مرحله اول: ایجاد کلید خصوصی و فایل CSR

CSR (Certificate Signing Request) فایلی است که اطلاعات دامنه و سازمان شما را شامل می‌شود و برای درخواست گواهینامه SSL به مرجع صدور (CA) ارسال می‌شود.

گام ۱: اتصال به سرور از طریق SSH

با استفاده از ترمینال یا نرم‌افزار SSH Client به سرور متصل شوید:

ssh root@your-server-ip

گام ۲: ایجاد دایرکتوری برای ذخیره فایل‌ها

بهتر است فایل‌های SSL را در یک مسیر مشخص نگهداری کنید:

sudo mkdir -p /etc/ssl/private
sudo mkdir -p /etc/ssl/certs
sudo chmod 700 /etc/ssl/private

گام ۳: تولید کلید خصوصی و CSR

دستور زیر یک کلید خصوصی ۲۰۴۸ بیتی و فایل CSR را به صورت همزمان ایجاد می‌کند:

openssl req -new -newkey rsa:2048 -nodes -sha256 \
-keyout /etc/ssl/private/yourdomain.key \
-out /etc/ssl/certs/yourdomain.csr

نکته امنیتی: برای امنیت بیشتر می‌توانید از کلید ۴۰۹۶ بیتی استفاده کنید. کافی است rsa:2048 را به rsa:4096 تغییر دهید.

گام ۴: وارد کردن اطلاعات

پس از اجرای دستور، سوالاتی از شما پرسیده می‌شود. به ترتیب زیر پاسخ دهید:

فیلد توضیح نمونه
Country Name (C) کد دو حرفی کشور IR
State (ST) استان Tehran
Locality (L) شهر Tehran
Organization (O) نام سازمان My Company Ltd
Organizational Unit (OU) بخش (اختیاری) IT Department
Common Name (CN) نام دامنه (FQDN) www.example.com
Email Address ایمیل مدیر admin@example.com

توجه برای Wildcard SSL: اگر می‌خواهید گواهینامه Wildcard بگیرید (برای همه زیردامنه‌ها)، در فیلد Common Name باید از ستاره استفاده کنید. مثال: *.example.com

گام ۵: بررسی محتوای CSR

برای اطمینان از صحت اطلاعات، محتوای CSR را بررسی کنید:

openssl req -text -noout -verify -in /etc/ssl/certs/yourdomain.csr

مرحله دوم: خرید و دریافت گواهینامه SSL

گام ۱: کپی محتوای CSR

محتوای فایل CSR را مشاهده و کپی کنید:

cat /etc/ssl/certs/yourdomain.csr

خروجی شبیه زیر خواهد بود:

-----BEGIN CERTIFICATE REQUEST-----
MIICvDCCAaQCAQAwdzELMAkGA1UEBhMCSVIxDjAMBgNVBAgMBVRlaHJhbjEOMAwG
...
-----END CERTIFICATE REQUEST-----

گام ۲: سفارش گواهینامه

محتوای کامل CSR (شامل خطوط BEGIN و END) را در فرم سفارش گواهینامه وارد کنید. پس از تایید، فایل‌های زیر را دریافت خواهید کرد:

  • yourdomain.crt: گواهینامه اصلی
  • ca-bundle.crt: زنجیره گواهینامه‌های میانی (Intermediate CA)

مرحله سوم: نصب و پیکربندی گواهینامه در آپاچی

گام ۱: آپلود فایل‌های گواهینامه

فایل‌های دریافتی را در سرور آپلود کنید:

# آپلود فایل‌ها با SCP
scp yourdomain.crt root@your-server-ip:/etc/ssl/certs/
scp ca-bundle.crt root@your-server-ip:/etc/ssl/certs/

گام ۲: فعال‌سازی mod_ssl

اگر ماژول SSL فعال نیست، آن را فعال کنید:

# در Ubuntu/Debian
sudo a2enmod ssl

# در CentOS/RHEL
sudo yum install mod_ssl

گام ۳: ایجاد یا ویرایش VirtualHost برای SSL

فایل پیکربندی سایت را ویرایش کنید:

sudo nano /etc/apache2/sites-available/yourdomain-ssl.conf

محتوای زیر را وارد کنید (تنظیمات بهینه برای TLS 1.2 و TLS 1.3):

<VirtualHost *:443>
ServerName www.yourdomain.com
ServerAlias yourdomain.com
DocumentRoot /var/www/yourdomain/public_html

# SSL Configuration
SSLEngine on
SSLCertificateFile /etc/ssl/certs/yourdomain.crt
SSLCertificateKeyFile /etc/ssl/private/yourdomain.key
SSLCertificateChainFile /etc/ssl/certs/ca-bundle.crt

# Modern SSL Settings (TLS 1.2 & TLS 1.3 only)
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite ECDHE+AESGCM:ECDHE+CHACHA20:DHE+AESGCM:DHE+CHACHA20:!aNULL:!MD5:!DSS
SSLHonorCipherOrder on

# OCSP Stapling
SSLUseStapling on

# Security Headers
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

# Logging
ErrorLog ${APACHE_LOG_DIR}/yourdomain_ssl_error.log
CustomLog ${APACHE_LOG_DIR}/yourdomain_ssl_access.log combined
</VirtualHost>

# OCSP Stapling Cache (outside VirtualHost)
SSLStaplingCache shmcb:logs/stapling_cache(150000)

گام ۴: فعال‌سازی سایت و ماژول‌های مورد نیاز

# فعال‌سازی ماژول headers
sudo a2enmod headers

# فعال‌سازی سایت SSL
sudo a2ensite yourdomain-ssl.conf

گام ۵: ریدایرکت HTTP به HTTPS

برای اینکه تمام ترافیک HTTP به HTTPS هدایت شود، VirtualHost پورت ۸۰ را ویرایش کنید:

<VirtualHost *:80>
ServerName www.yourdomain.com
ServerAlias yourdomain.com

# Redirect all HTTP to HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>

ماژول Rewrite را فعال کنید:

sudo a2enmod rewrite

گام ۶: تست پیکربندی و ری‌استارت آپاچی

قبل از ری‌استارت، پیکربندی را تست کنید:

# تست پیکربندی
sudo apachectl configtest

# اگر Syntax OK بود، ری‌استارت کنید
sudo systemctl restart apache2

# یا در CentOS/RHEL
sudo systemctl restart httpd

مهم: اگر خطایی در تست پیکربندی مشاهده کردید، آن را برطرف کنید. ری‌استارت کردن با پیکربندی نادرست باعث از کار افتادن سرویس می‌شود!

روش جایگزین: نصب SSL رایگان با Let's Encrypt

اگر به گواهینامه DV رایگان نیاز دارید، می‌توانید از Let's Encrypt استفاده کنید. Certbot تمام مراحل را به صورت خودکار انجام می‌دهد:

نصب Certbot

# Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-apache

# CentOS/RHEL
sudo dnf install certbot python3-certbot-apache

دریافت و نصب خودکار گواهینامه

sudo certbot --apache -d yourdomain.com -d www.yourdomain.com

تنظیم تمدید خودکار

گواهینامه‌های Let's Encrypt هر ۹۰ روز منقضی می‌شوند. Certbot به صورت خودکار یک کرون‌جاب ایجاد می‌کند:

# تست تمدید خودکار
sudo certbot renew --dry-run

# بررسی وضعیت تایمر
sudo systemctl status certbot.timer

تست و اعتبارسنجی گواهینامه SSL

تست از طریق مرورگر

آدرس https://yourdomain.com را در مرورگر باز کنید و روی آیکون قفل کلیک کنید تا اطلاعات گواهینامه را ببینید.

تست از طریق خط فرمان

# بررسی اتصال SSL
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com

# بررسی تاریخ انقضا
echo | openssl s_client -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -dates

تست آنلاین با SSL Labs

برای بررسی جامع پیکربندی SSL، از ابزار رایگان SSL Labs Server Test استفاده کنید. با پیکربندی پیشنهادی این راهنما، باید امتیاز A یا A+ دریافت کنید.

عیب‌یابی مشکلات رایج SSL در آپاچی

خطا علت احتمالی راه‌حل
ERR_SSL_PROTOCOL_ERROR mod_ssl فعال نیست a2enmod ssl و ری‌استارت
Certificate Mismatch دامنه در گواهینامه با URL متفاوت است CSR جدید با دامنه صحیح بسازید
Certificate Chain Incomplete CA Bundle تنظیم نشده SSLCertificateChainFile را اضافه کنید
Permission Denied دسترسی فایل کلید خصوصی chmod 600 و مالکیت root
Port 443 in Use سرویس دیگری پورت را گرفته netstat -tlnp | grep 443

سوالات متداول درباره نصب SSL در آپاچی

تفاوت کلید خصوصی (Private Key) و CSR چیست؟

کلید خصوصی (Private Key) یک فایل محرمانه است که برای رمزگشایی اطلاعات استفاده می‌شود و هرگز نباید به اشتراک گذاشته شود. CSR (Certificate Signing Request) یک فایل حاوی اطلاعات عمومی دامنه و سازمان است که به مرجع صدور گواهینامه ارسال می‌شود. CSR با استفاده از کلید خصوصی امضا می‌شود اما خود کلید را شامل نمی‌شود.

آیا باید هر سال CSR جدید بسازم؟

خیر، لزوماً نیازی به ساخت CSR جدید نیست. اگر کلید خصوصی قبلی را دارید و اطلاعات سازمان تغییر نکرده، می‌توانید از همان CSR برای تمدید استفاده کنید. با این حال، به دلایل امنیتی توصیه می‌شود هر ۲ تا ۳ سال یک بار کلید خصوصی جدید تولید کنید.

چرا باید TLS 1.3 استفاده کنم؟

TLS 1.3 جدیدترین و امن‌ترین نسخه پروتکل امنیتی است که در سال ۲۰۱۸ منتشر شد. این نسخه سریع‌تر است (یک Handshake کمتر)، الگوریتم‌های قدیمی و ناامن را حذف کرده، و Perfect Forward Secrecy را اجباری کرده است. تمام مرورگرهای مدرن از TLS 1.3 پشتیبانی می‌کنند.

گواهینامه Let's Encrypt چه محدودیت‌هایی دارد؟

Let's Encrypt فقط گواهینامه DV (Domain Validation) ارائه می‌دهد و برای گواهینامه‌های OV یا EV مناسب نیست. همچنین گواهینامه‌ها هر ۹۰ روز منقضی می‌شوند و نیاز به تمدید خودکار دارند. برای سازمان‌هایی که به اعتبارسنجی سازمانی یا نمایش نام شرکت در گواهینامه نیاز دارند، باید از گواهینامه‌های OV یا EV خریداری شده استفاده کنند.

اگر کلید خصوصی را گم کنم چه کنم؟

اگر کلید خصوصی گم شود، گواهینامه صادر شده دیگر قابل استفاده نیست. باید کلید خصوصی و CSR جدید بسازید و گواهینامه را مجدداً صادر کنید (Reissue). بیشتر مراجع صدور گواهینامه این کار را به صورت رایگان انجام می‌دهند. همیشه از کلید خصوصی نسخه پشتیبان در مکانی امن نگهداری کنید.

OCSP Stapling چیست و چرا مهم است؟

OCSP Stapling روشی است که سرور به جای مرورگر کاربر، وضعیت ابطال گواهینامه را از مرجع صدور دریافت و به مرورگر ارائه می‌کند. این کار باعث می‌شود اتصال سریع‌تر برقرار شود (یک درخواست کمتر)، حریم خصوصی کاربر حفظ شود (IP کاربر به CA ارسال نمی‌شود)، و قابلیت اطمینان بالاتر برود (اگر OCSP سرور CA در دسترس نباشد).

نیاز به کمک در نصب SSL دارید؟

اگر در نصب گواهینامه SSL با مشکل مواجه شدید یا ترجیح می‌دهید این کار توسط متخصصین انجام شود، می‌توانید از خدمات برتینا استفاده کنید:

تیم پشتیبانی فنی برتینا ۲۴ ساعته آماده کمک به شما در نصب و پیکربندی SSL است.

منابع و مستندات بیشتر

نظرات