امروز با آموزش ساخت گواهی امنیتی SSL خود امضا شده(معتبر برای خود و آشنایان شما) برای وب سرور آپاچی در توزیع اوبونتو ۱۶.۰۴ در کنار شما عزیزان هستیم. TLS یا Transport Layer Security به همراه پروتکل SSL یا Secure Sockets Layer پروتکل های امنیتی وب برای رمزکردن ترافیک عبوری می باشد. این تکنولوژی موجب رمز شدن ترافیک بین سرور و کلاینت شده و امکان شنود ترافیک را به صورت متن ساده به مهاجمان نمیدهد. این پروتکل ها علاوه بر رمزگذاری بر روی داده ها احراز هویت وب سایت ها را برای کاربران انجام میدهد.
بیشتر بخوانید:
گواهی خود امضا شده
گواهی خود امضا شده یا self-signed ssl certificate با گواهی های دیگر SSL تفاوت چندانی از نظر قدرت امنیتی ندارد. این گواهی نیز مانند گواهی های دیگر رمز شده و امن است. تنها تفاوت این گواهی با گواهی های دیگر این است که امنیت آن توسط خود شما تضمین شده است و مشترکین شما در صورتی که به شما اعتماد داشته باشند میتوانند از بابت امنیت این گواهی مطمان شوند. بعنوان مثال شما یک سروری دارید که روی آن خدماتی خاص برای کسی که به شما اعتماد دارد ارائه میکنید. در این صورت مشتری شما میداند که صفحه مورد نظر توسط شما امن شده است نه یک شرکت معتبر بین المللی. لازم به ذکر است که در صورتی که مشتری به شما اعتماد داشته باشد امنیت گواهی شما با گواهی های ارائه شده توسط شرکت های دیگر تفاوت چندانی نخواهد داشت و قابل اعتماد است.
برای نصب گواهی خود امضا شده SSL بر روی سرور اوبونتو ۱۶.۰۴ مراحل زیر را دنبال کنید:
ایجاد گواهی SSL
این گواهی به صورت ترکیبی از گواهی عمومی و خصوصی کار میکند. کلید SSL به صورت امن روی سرور شما نگه داشته میشود. این گواهی با مقادیر رمز شده ای به سمت کلاینت ارسال میشود. این گواهی با هر کلاینتی که درخواست ارتباط داشته باشد به اشتراک گذاشته میشود. این کلید در مقصد توسط کلاینت رمزگشایی میشود. برای ایجاد یک گواهی خود امضا شده وارد کردن دستور زیر کافیست:
1 |
root@arshatech:~# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt |
مفهوم برخی پارامترهایی که در دستور بالا استفاده شده اند:
- openssl: این دستور مختص ایجاد گواهی امنیتی openssl، کلید و سایر فایل های متبط با آن روی سرور است.
- req: سوئیچی است که درخواست امضای گواهی(CSR – Certificate Signing Request) X.509 را میدهد. X.509 یک کلید عمومی استاندارد برای پروتکل های TLS و SSL است.
- x509-: این عبارت به معنای درخواست ایجاد گواهی خود امضا شده است.
- node-: این عبارت به معنای این است که شما پسوردی برای گواهی امنیتی خود نمیخواهید.
- days 365-: این عدد به معنای تعداد روزیست که میخواهید گواهی شما دارای اعتبار باشد. این مقدار در آینده قابل تمدید خواهد بود.
- newkey rsa:2048-: این عبارت به معنای این است که شما میخواهید یک گواهی به همراه یک کلید را از ابتدا به طور همزمان و با الگوریتم rsa به طول ۴۰۲۸ بیت ایجاد کنید.
- keyout-: این عبارت بیانگر مسیریست که میخواهید کلید خصوصی در آنجا ذخیره گردد.
- out-: این عبارت بیانگر مسیریست که میخواهید گواهی امنیتی شما در آنجا ذخیره گردد.
بعد از اجرای دستور بالا که موجب ایجاد گواهی و کلید روی سرور شما میشود از شما چند سوال پرسیده میشود که باید با آن ها پاسخ دهید. مهمترین سوال بخش Common Name (e.g. server FQDN or YOUR name) میباشد که شما باید نام دامنه یا آدرس آی پی سرور خود را وارد کنید:
1 2 3 4 5 6 7 |
Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:New York Locality Name (eg, city) []:New York City Organization Name (eg, company) [Internet Widgits Pty Ltd]:Arshatech, Inc. Organizational Unit Name (eg, section) []:ICT Organization Common Name (e.g. server FQDN or YOUR name) []:server_IP_address Email Address []:mail@arshatech.com |
هر دو فایل شما در مسیر etc/ssl/ تعیین شده است.
هنگامی که شما از openssl استفاده میکنید بهتر است یک گروه قوی به نام Diffie-Hellman را نیز بسازید. این گروه برای برقراری ارتباط سرور و کلاینت از الگوی Perfect Forward Secrecy استفاده میکند که موجب افزایش امنیت ارتباطی بین سرور و کلاینت میگردد. برای ایجاد گروه DH از دستور زیر استفاده کنید:
1 |
root@arshatech:~# openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 |
اجرای دستور بالا ممکن است تا چند دقیقه نیز به طول بینجامد. فایل مورد نظر در مسیر etc/ssl/certs/dhparam.pem/ ذخیره میشود.
تنظیم آپاچی برای استفاده از SSL
در مراحل قبل شما موفق به ساخت گواهی همراه با یک کلید در مسیر etc/ssl/ شدید. حال می بایست به تنظیمات آپاچی بروید و تغییرات لازم را اعمال کنید:
ابتدا به جهت اعمال تغییرات مربوط به گروه DH با یک ویرایشگر متن فایل زیر را باز کنید و تغییرات لازم را مطابق زیر اعمال کنید:
1 |
root@arshatech:~# vim /etc/apache2/conf-available/ssl-params.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH SSLProtocol All -SSLv2 -SSLv3 SSLHonorCipherOrder On # Disable preloading HSTS for now. You can use the commented out header line that includes # the "preload" directive if you understand the implications. #Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains" Header always set X-Frame-Options DENY Header always set X-Content-Type-Options nosniff # Requires Apache >= 2.4 SSLCompression off SSLSessionTickets Off SSLUseStapling on SSLStaplingCache "shmcb:logs/stapling-cache(150000)" SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem" |
تغییرات را ذخیره و از فایل خارج شوید. حال می بایست جهت اطمینان بیشتر از فایل SSL که مرتبط با Virtual Host میباشد یک کپی تهیه کنید:
1 |
root@arshatech:~# cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bak |
سپس فایل اصلی را باز کنید:
1 |
root@arshatech:~# vim /etc/apache2/sites-available/default-ssl.conf |
شاید بهتر باشد تمامی محتوای فایل را پاک کرده و عبارات درون آن را به شکل زیر تنظیم کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin your_email@example.com ServerName server_domain_or_IP DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 </VirtualHost> </IfModule> |
در نظر داشته باشید که نام دامنه و یا آی پی سرور را باید به طور صحیح وارد کنید. سپس تغییرات را ذخیره کرده و از فایل خارج شوید.
حال بهتر است تمامی درخواست هایی که به HTTP داده میشود را به طور خودکار به HTTPS ریدایرکت کنید. به همین منظور مجددا فایل قبل را باز کنید:
1 |
root@arshatech:~# vim /etc/apache2/sites-available/000-default.conf |
سپس خط redirection مورد نظر را به فایل خود اضافه کنید:
1 2 3 4 5 6 7 |
<VirtualHost *:80> . . . Redirect permanent "/" "https://your_domain_or_IP/" . . . </VirtualHost> |
اگر نمیخواهید عمل ریدایرکت به صورت دائم تنظیم شود کافیست عبارت permanent را حذف کنید.
تنظیم فایروال
اگر فایروال ufw روی سرور شما فعال است این مراحل را نیز برای دادن مجوزهای لازم باید دنبال کنید:
ابتدا پروفایل هاب فعال روی فایروال را لیست کنید:
1 |
root@arshatech:~# ufw app list |
1 2 3 4 5 |
Available applications: Apache Apache Full Apache Secure OpenSSH |
سپس وضعیت فعال بودن فایروال را بررسی کنید:
1 |
root@arshatech:~# ufw status |
1 2 3 4 5 6 7 8 |
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6) |
با مشاهده وضعیت فوق باید مجوز پروفایل Apache Full را اضافه و پروفایل Apache را حذف کنید:
1 2 |
root@arshatech:~# ufw allow 'Apache Full' root@arshatech:~# ufw delete 'Apache' |
حال مجددا وضعیت فایروال را بررسی کنید:
1 |
root@arshatech:~# ufw status |
1 2 3 4 5 6 7 8 |
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6) |
فعال کردن تغییرات اعمال شده در آپاچی
حال باید تغییرات اعمال شده روی آپاچی و یا تغییرات فایروال را به سیستم اطلاع دهید.
ابتدا mod_ssl را فعال کنید:
1 |
root@arshatech:~# a2enmod ssl |
1 2 3 4 5 6 7 8 9 10 |
Considering dependency setenvif for ssl: Module setenvif already enabled Considering dependency mime for ssl: Module mime already enabled Considering dependency socache_shmcb for ssl: Enabling module socache_shmcb. Enabling module ssl. See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates. To activate the new configuration, you need to run: service apache2 restart |
سپس ماژول mod_headers را فعال نمائید:
1 |
root@arshatech:~# a2enmod headers |
1 2 3 |
Enabling module headers. To activate the new configuration, you need to run: service apache2 restart |
حال میبایست SSL Virtual Host را به صورت زیر فعال کنید:
1 |
root@arshatech:~# a2ensite default-ssl |
1 2 3 |
Enabling site default-ssl. To activate the new configuration, you need to run: service apache2 reload |
سپس تنظیمات مربوط به فایل ssl-params.conf را به صورت زیر فعال نمائید:
1 |
root@arshatech:~# a2enconf ssl-params |
1 2 3 |
Enabling conf ssl-params. To activate the new configuration, you need to run: service apache2 reload |
حال که تمامی ماژول های مورد نظر فعال شده اند می بایست با استفاده از دستور زیر خطاهایی که ممکن است هنگام تایپ تغییرات بوجود آمده اند را بررسی کنیم:
1 |
root@arshatech:~# apache2ctl configtest |
1 |
Syntax OK |
همانطور که ملاحظه میکنید خطایی یافت نشد و همه تنظیمات به درستی اعمال شده اند.
بررسی صحت رمزگذاری در مرورگر
حال کافیست آدرس دامنه یا آی پی مورد نظر خود را در مرورگر وارد کنید:
1 |
https://server_domain_or_IP |
صفحه قرمز رنگی برای شما باز میشود که باید مراحل زیر را در آن دنبال کنید:
همانطور که ملاحظه میکنید openssl روی سرور فعال شده است. برای اینکه عمل ریدایرکت از http به https را نیز مورد بررسی قرار دهید این بار آدرس سرور را بدون https در مرورگر خود وارد کنید و نتیجه را بررسی نمائید.
2 دیدگاه
رضا
سلام وقت بخیر
من مراحل رو رفتم اما
در انتها این خطا رو دارم
Syntax error on line 1 of /etc/apache2/conf-enabled/ssl-params.conf:
ادمین
سلام و عرض ادب
خطای سینتکس در خط اول کانفیگ فایل وجود دارد.