توسعه دهنده ، دوستدار روانشناسی ،هوش مصنوعی ،کارآفرینی،برنامه نویسی
نصب و فعال Https روی Apache در لینوکس
در پست می خوایم نحوه ای نصب کردن گواهی نامه SSL یا همون https روی سرور های لینوکس بر روی وب سرور apache رو آموزش بدم و در پست بعدی نحوه ای نصب روی وب سرور nginx اموزش خواهم داد.
اینکه https چیه و چه مزایای نسبت به http داره می تونید از این لینک در موردش بخونید و در یک جمله اینو بگم که فرق بین http و https اینکه در پروتکل ارتباطی https ارتباط بین کاربر و سرور به صورت امن خواهد بود و از نظر سئو هم تاثیر داره بر روی سایت.
یکی از راه های نصب و فعال کردن 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 systemctl status 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 رو ریستارت می کنیم
sudo systemctl restart apache2
خب بعد از اینکه گواهینامه ssl رو فعال کردیم باید برای هر دامنه یا ساب دامنه یک بار https رو نصب کنیم ما اینجا یک دامنه به آدرس api.ir ایجاد کردیم که بدین صورت خواهد بود
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 رو روی دامنه خود نصب کنید و از این به بعد ارتباط بین سرور و کاربر شما به صورت امن و رمز نگاری خواهد شد .
مطلبی دیگر از این انتشارات
Mysql Storage Engine
مطلبی دیگر از این انتشارات
حذف و غیر فعال سازی ویروس kdevtmpfsi
مطلبی دیگر از این انتشارات
بک آپ گرفتن از دیتابیس در سرور