خانه » بلاگ » نصب و فعال Https روی Apache در لینوکس

نصب و فعال Https روی Apache در لینوکس

در این پست می خوایم نحوه ای نصب کردن گواهی نامه اچ تی تی پی روی سرور های لینوکس بر روی وب سرور آپاچی رو آموزش بدم و در پست بعدی نحوه ای نصب روی وب سرور انجین ایکس اموزش خواهم داد.اینکه اچ تی تی پی اس چیه و چه مزایای نسبت به اچ تی تی پی داره می تونید از این لینک در موردش بخونید و در یک جمله اینو بگم که فرق بین اچ تی تی پی و اچ تی تی پی اساینکه در پروتکل ارتباطی اچ تی تی پی اس ارتباط بین کاربر و سرور به صورت امن خواهد بود و از نظر سئو هم تاثیر داره بر روی سایت.

یکی از راه های نصب و فعال کردن https خرید گواهینامه SSL یا همون TLS از سایت معتبر هست که بعد از خرید سه تا فایل می دن که اون ها روی سرور آپلود می کنید یا اگه از CDN استفاده می کنید روی سرویس CDN که از آن استفاده می کنید , آپلود می کنید ولی ما در این پست نحوه ای نصب و استفاده از https های رایگان که در سطح اینترنت هستند رو آموزش می دیم.

در واقع TLS همون نسخه ای ارتقا یافته ای SSL هست ورژن SSL 3.1 همان TLS 1.0 است. در حال حاضر TLS به ورژن 1.2 ٰرسیده و در هریک از این آپدیت‌ها امکانات امنیتی جدیدی افزوده و معرفی می شود.

این نکته رو هم بگم که گواهینامه های پولی مدت اعتبارشون 1 سال هست ولی گواهینامه های رایگان مدتش 90 روزه که می شه دوباره تمدید کرد

خب بریم سراغ آموزش ما در این پست می خوایم از Let’s Encrypt استفاده کنیم ما داخل سرور ممکنه چندن دامنه و ساب دامنه داشته باشه که برای هر کدوم باید جداگانه نصب کنیم https رو.

اول apache رو نصب می کنیم یا اگه نصب بررسی می کنیم که نسخه چنده رو نصب کردیم می توانید از دستور برای بررسی نصب بودن روی سرور چک کنید :

apache2 -v 

و اگه نصب نیست با این دستور نصب کنید :

sudo apt install apache2 

خب یک پوشه ایجاد می کنیم

sudo  mkdir/var/www/html/api.ir 

داخل پوشه api.ir به فایل به نام index.html ایجاد می کنیم که محتواش می تونه هر چی باشه:

sudo  nano/var/www/html/api.ir/index.html 

خب یه فایل server block برای دامنه ایجاد می کنیم

sudo nano/etc/apache2/sites-available/api.ir.conf 

و داخلش این تنظیمات مربوط به server block رو کپی می کنیم

ServerAdminadmin@example.com
ServerName api.ir
ServerAlias www.api.ir
DocumentRoot/var/www/html/api.ir

و با این دستور این server block رو به پوشه اس site-enable لینک می کنیم 

ln  -s  /etc/apache2/sites-available/api.ir/      etc/apache2/sites-enabled/api.ir 

سیستم کلی وب سرور اینجوری که یه پوشه برای سایت ها و دامنه ای در دسترس وجود و هر کدوم رو خواستم لینک می کنیم به پوشه سایت های فعال حتی nginx هم این روند رو داره

حالا تنظیمات مربوط به وب سرور تموم هست می ریم Let’s Encrypt رو نصب کنیم

sudo apt install certbot 

بعد از نصب برای اینکه بتوانیم از پلاگین webroot استفاده کنیم یک پوشه ایجاد می کنیم بعد سطح دسترسی به اون رو تغییر می دیم

sudo mkdir  -p  /var/lib/letsencrypt/.well-known
sudo chgrp www-data/var/lib/letsencrypt
sudo chmod   g+s   /var/lib/letsencrypt 
 sudo  nano   /etc/apache2/conf-available/well-known.conf  

و داخلش این دستورات رو کپی می کنیم و در اخر ذخیره می کنیم و از فایل بیرون می ایم

 Alias/.well-known/acme-challenge

همه ای دامنه ها به یه ip آدرسی که مربوط به سرور هست اشاره می کنند و بعد از رسیدن به سرور این apache هست که این درخواست رو هندل می کنه و برای اینکه برای این درخواست ها گواهینامه ssl رو فعال کنیم باید این کامند ها رو اجرا کنیم

sudo a2enmod ssl
sudo a2enmod headers
sudo a2enmod http2
sudo a2enconf well-known

بعد از فعال کردن apache رو ریستارت می کنیم

خب بعد از اینکه گواهینامه ssl رو فعال کردیم باید برای هر دامنه یا ساب دامنه یک بار https رو نصب کنیم ما اینجا یک دامنه به آدرس api.ir ایجاد کردیم که بدین صورت خواهد بود

sudo systemctl restart apache2 
sudo certbot certonly   --agree-tos  --email    admin@api.ir  --webroot  -w       /var/lib/letsencrypt/   -d   api.ir   -d  www.api.ir 

اگه درست نصب شده باشه باید با خروجی زیر رو به رو بشیم که می گه تبریک با موفقیت نصب شده

 importantnotes:-Congratulations!Yourcertificateandchainhavebeensavedat:/etc/letsencrypt/live/api.ir/fullchain.pemYourkeyfilehasbeensavedat:/etc/letsencrypt/live/api.ir/privkey.pemYourcertwillexpireon2020-06-27.Toobtainanewortweakedversionofthiscertificateinthefuture,simplyruncertbotagain.Tonon-interactivelyrenew*all*ofyourcertificates,run 

خب برای اینکه بخواهیم تبادل اطلاعات بین کاربر و سرور به صورت رمز نگاری شده باشد باید یک کلید تبادل به مقدار 2048 تولید کنیم

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

دوباره فایل server block که برای دامنه api.ir ایجاد کرده بودیم رو باز می کنیم و به این صورت ویراش می کنیم

<VirtualHost *:80>      
    ServerAdmin admin@example.com     
    ServerName api.ir
    ServerAlias www.api.ir    
    DocumentRoot /var/www/html/api.ir  
     ErrorLog ${APACHE_LOG_DIR}/api.ir-error.log 
</VirtualHost>

<VirtualHost *:443>
  ServerName api.ir
  ServerAlias www.api.ir 
  DocumentRoot /var/www/html/api.ir

  Protocols h2 http:/1.1

  <If "%{HTTP_HOST} == 'www.api.ir'">
    Redirect permanent / https://api.ir/
  </If>
  
  ErrorLog ${APACHE_LOG_DIR}/api.ir-error.log
  CustomLog ${APACHE_LOG_DIR}/api.ir-access.log combined

  SSLEngine On
  SSLCertificateFile /etc/letsencrypt/live/api.ir/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/api.ir/privkey.pem
  SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"
  
  SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
  SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
  SSLCompression off
  SSLUseStapling on

</VirtualHost>

برای اینکه پروتکل https هم بتونه اطلاعات رو کش کنه و از کش بخونه باید تنظیمات مربوط به ان را توی تنظیمات apache فعال کنیم

فایل ssl.conf رو باز می کنیم

sudo nano /etc/apache2/mods-available/ssl.conf


بعد دارکتیو SSLStaplingCache رو اضافه می کنیم

# Set the location of the SSL OCSP Stapling Cache
 SSLStaplingCache shmcb:/tmp/stapling_cache(128000)

و مرحله ای آخر apache رو ریستارت می کنیم

sudo systemctl restart apache2

برای اینکه هر 30 روز به صورت خودکار اعتبار گواهینامه دوباره تمدید بشه البته گفتم مدت اعتبارش 90 روزه داخل cronjob این دستور رو اضافه می کنیم

0 1 * * * /usr/bin/certbot renew & > /dev/null

برای اینکه تست کنیم تمدید تاریخ اعتبار به درستی کار می کنه یه بار دستی تست می کنیم

sudo certbot renew --dry-run

تبریک می گم شما تونستید گواهینامه SSL رو روی دامنه خود نصب کنید و از این به بعد ارتباط بین سرور و کاربر شما به صورت امن و رمز نگاری خواهد شد 

برچسب‌ها:

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

نشانی ایمیل شما منتشر نخواهد شد.