SSL/HTTPS sozlash
Bugungi kunda har bir jiddiy sayt HTTPS orqali ishlashi shart. Bu ma'lumotni shifrlaydi va foydalanuvchi ishonchini oshiradi. Ushbu darsda nima uchun HTTPS zarurligini, bepul sertifikat olishni (Let's Encrypt / certbot), Nginx'da SSL sozlashni va HTTP'dan HTTPS'ga yo'naltirishni batafsil o'rganamiz.
Nega HTTPS kerak?
HTTP โ oddiy, shifrlanmagan protokol. Uning kamchiligi: brauzer bilan server o'rtasidagi ma'lumot ochiq (matn ko'rinishida) uzatiladi. Buni yo'ldagi har qanday oraliq (masalan, ochiq Wi-Fi tarmog'idagi hujumchi) o'qishi mumkin โ parollar, kredit karta ma'lumotlari va h.k.
HTTPS (HTTP + TLS/SSL shifrlash) esa bu muammoni hal qiladi:
- Maxfiylik: ma'lumot shifrlanadi, uni yo'lda hech kim o'qiy olmaydi;
- Yaxlitlik: ma'lumot yo'lda o'zgartirilmaganini kafolatlaydi;
- Autentifikatsiya: siz haqiqatan ham o'sha sayt bilan gaplashayotganingizni tasdiqlaydi;
- Ishonch: brauzerlar HTTP saytlarni "xavfsiz emas" deb belgilaydi, HTTPS esa qulf belgisini ko'rsatadi;
- SEO: qidiruv tizimlari HTTPS saytlarni afzal ko'radi.
Let's Encrypt va certbot
Ilgari SSL sertifikatlar pullik edi. Endi Let's Encrypt degan bepul, avtomatlashtirilgan sertifikat markazi mavjud. Uni ishlatishning eng oson yo'li โ certbot vositasi. Certbot sertifikatni oladi, Nginx config'ini avtomatik sozlaydi va sertifikatni yangilab turadi.
Certbot'ni o'rnatish (Ubuntu misolida):
sudo apt update
sudo apt install certbot python3-certbot-nginx
Bu yerda python3-certbot-nginx โ certbot'ning Nginx bilan avtomatik ishlash uchun qo'shimchasi (plugin).
certbot --nginx bilan avtomatik sozlash
Eng oson usul โ certbot'ga hamma ishni topshirish. U sertifikatni oladi va Nginx config'ini o'zi tahrirlaydi:
sudo certbot --nginx -d mysite.com -d www.mysite.com
Bu buyruq bajarilishida certbot quyidagilarni qiladi:
- Let's Encrypt'dan
mysite.comvawww.mysite.comuchun sertifikat so'raydi; - Domen haqiqatan ham sizga tegishli ekanini tekshiradi;
- Sertifikat fayllarini serverga saqlaydi;
- Nginx config'iga
listen 443 sslva sertifikat yo'llarini avtomatik qo'shadi; - HTTP'dan HTTPS'ga yo'naltirishni sozlashni taklif qiladi;
- Nginx'ni qayta yuklaydi.
certbot --nginx yetarli โ u hammasini o'zi bajaradi. Lekin nima sodir bo'layotganini tushunish uchun quyida qo'lda sozlashni ham ko'rib chiqamiz.Sertifikatni qo'lda sozlash
Certbot sertifikat olgach, uni olganda fayllar odatda /etc/letsencrypt/live/mysite.com/ papkasida saqlanadi. Nginx config'ida ularni quyidagicha ko'rsatamiz:
server {
listen 443 ssl;
server_name mysite.com www.mysite.com;
ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem;
root /var/www/mysite;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Asosiy direktivalar:
listen 443 ssl;โ 443-portni (HTTPS uchun standart) tinglaydi va SSL'ni yoqadi;ssl_certificateโ sertifikat (ochiq kalit) faylining yo'li;fullchain.pemsaytingiz sertifikati va oraliq sertifikatlarni o'z ichiga oladi;ssl_certificate_keyโ maxfiy kalit fayli yo'li; buprivkey.pemni hech kimga bermang.
privkey.pem โ sizning maxfiy kalitingiz. U hech qachon ommaga oshkor bo'lmasligi kerak. Agar kimdir uni qo'lga kiritsa, u sizning nomingizdan shifrlangan trafikni o'qiy oladi. Fayl ruxsatlari faqat root uchun ochiq bo'lishi shart.HTTP'dan HTTPS'ga yo'naltirish
Sayt HTTPS'da ishlashi kerak bo'lsa ham, kimdir hali ham http://mysite.com (80-port) ga kirishi mumkin. Bunday so'rovlarni avtomatik ravishda HTTPS'ga yo'naltirish (redirect) kerak. Buning uchun alohida server bloki yaratamiz:
# 80-portdagi (HTTP) barcha so'rovlarni HTTPS'ga yo'naltirish
server {
listen 80;
server_name mysite.com www.mysite.com;
return 301 https://$host$request_uri;
}
# asosiy HTTPS server
server {
listen 443 ssl;
server_name mysite.com www.mysite.com;
ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem;
root /var/www/mysite;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Yo'naltirish qatorini batafsil ko'raylik:
return 301 https://$host$request_uri;
return 301โ brauzerga "bu manzil doimiy ravishda ko'chdi" degan javob (301 โ doimiy yo'naltirish);https://โ yangi manzil HTTPS bilan boshlanadi;$hostโ so'ralgan domen nomi (masalan,mysite.com);$request_uriโ so'ralgan to'liq yo'l va parametrlar (masalan,/blog?id=5).
Natijada foydalanuvchi http://mysite.com/blog ga kirsa, avtomatik ravishda https://mysite.com/blog ga o'tkaziladi โ aynan o'sha sahifaga, lekin xavfsiz protokolda.
return 301 โ doimiy yo'naltirish; brauzer va qidiruv tizimlari buni eslab qoladi. Vaqtinchalik yo'naltirish uchun 302 ishlatiladi, lekin HTTP→HTTPS uchun doim 301 to'g'ri variant.Qo'shimcha SSL sozlamalari
Xavfsizlikni oshirish uchun ba'zi qo'shimcha direktivalar tavsiya etiladi (certbot ularni ko'pincha o'zi qo'shadi):
server {
listen 443 ssl;
server_name mysite.com;
ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem;
# faqat zamonaviy, xavfsiz protokollarga ruxsat
ssl_protocols TLSv1.2 TLSv1.3;
# server tanlagan shifrlash usulini afzal ko'rish
ssl_prefer_server_ciphers on;
# SSL sessiyalarini keshlash (tezlik uchun)
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
}
ssl_protocols TLSv1.2 TLSv1.3;โ faqat zamonaviy va xavfsiz protokollarga ruxsat (eski, zaif SSLv3/TLSv1.0 ni o'chiradi);ssl_session_cacheโ takroriy ulanishlarni tezlashtiradi (har safar SSL'ni qayta o'rnatmaydi).
Sertifikatni avtomatik yangilash
Let's Encrypt sertifikatlari 90 kun amal qiladi. Ularni muntazam yangilab turish kerak. Certbot buni avtomatlashtiradi โ u odatda tizimga rejalashtirilgan vazifa (timer/cron) o'rnatadi. Yangilashni sinab ko'rish uchun:
sudo certbot renew --dry-run
--dry-run โ haqiqiy yangilamasdan, jarayonni sinovdan o'tkazadi. Agar bu buyruq xatosiz ishlasa, avtomatik yangilash ham to'g'ri ishlaydi degani. Muddati yaqinlashgan sertifikatlarni haqiqatan yangilash uchun oddiy sudo certbot renew ishlatiladi.
sudo nginx -s reload ni unutmang.Xulosa
- HTTPS ma'lumotni shifrlaydi, foydalanuvchini himoya qiladi va ishonch beradi;
- Let's Encrypt bepul sertifikat beradi, certbot uni o'rnatishni avtomatlashtiradi;
sudo certbot --nginx -d domen.comโ eng oson usul, hammasini o'zi sozlaydi;- Qo'lda sozlashda:
listen 443 ssl;,ssl_certificatevassl_certificate_key; - HTTP'dan HTTPS'ga yo'naltirish uchun alohida 80-port server bloki va
return 301 https://$host$request_uri;; - Sertifikatlar 90 kun amal qiladi; certbot ularni avtomatik yangilaydi (
certbot renew).