HTTPS va TLS
Oldingi bo‘limlarda API’ga autentifikatsiya qo‘shdik: login paytida parol yuboriladi, keyin esa har bir so‘rovda token yuboriladi. Lekin hozircha barcha misollar oddiy http:// orqali ishladi. Bu degani parol ham, token ham tarmoq orqali ochiq matn ko‘rinishida uzatiladi.
Kafedagi umumiy Wi-Fi tarmog‘ini tasavvur qiling. Shu tarmoqqa ulangan istalgan odam tarmoq trafigini kuzatuvchi dastur yordamida sizning so‘rovingizni to‘liq o‘qiy oladi:
POST /auth/login HTTP/1.1
Host: api.example.uz
Content-Type: application/json
{"email":"[email protected]","password":"juda-maxfiy-parol"}
Bundan ham yomoni: u javobni o‘zgartirishi ham mumkin. Masalan, sahifaga zararli skript qo‘shishi yoki to‘lov rekvizitlarini almashtirishi mumkin.
HTTPS bu muammoni hal qiladi. U HTTP’ning o‘zi, lekin TLS protokoli bilan himoyalangan kanal orqali ishlaydi.
HTTPS nimani kafolatlaydi?
| Kafolat | Ma’nosi | Nimadan himoya qiladi |
|---|---|---|
| Maxfiylik | Ma’lumot shifrlangan | Trafikni o‘qib olishdan |
| Yaxlitlik | Ma’lumot yo‘lda o‘zgartirilmagan | Javobga zararli kod qo‘shishdan |
| Haqiqiylik | Server haqiqatan ham o‘zi aytgan server | Soxta serverga ulanib qolishdan |
Uchinchi kafolat ko‘pincha e’tibordan chetda qoladi, lekin u eng muhimlaridan biri. Shifrlash foydalanuvchi to‘g‘ri serverga ulangan taqdirdagina ma’noga ega. Aks holda ma’lumot hujumchining serveriga shifrlangan holda yetib boradi.
HTTPS bugun — majburiy standart
Bir necha yil oldin HTTPS faqat to‘lov sahifalari uchun ishlatilardi. Bugun esa u har qanday web xizmat uchun majburiy standartga aylangan:
- brauzerlar HTTP saytlarni "Xavfsiz emas" deb belgilaydi;
Securebelgisi qo‘yilgan cookie’lar faqat HTTPS orqali yuboriladi;- brauzerning ko‘plab imkoniyatlari, masalan geolokatsiya, kamera va Service Worker, faqat HTTPS sahifalarda ishlaydi;
- HTTP/2 va HTTP/3 brauzerlarda faqat TLS bilan ishlaydi;
- Let's Encrypt tufayli sertifikatlar bepul va avtomatik olinadi.
Go’da TLS
Go standart kutubxonasida TLS’ning to‘liq amalga oshirilgan versiyasi bor: crypto/tls paketi. net/http u bilan to‘g‘ridan-to‘g‘ri ishlaydi:
Hech qanday tashqi kutubxona yoki OpenSSL kerak emas. Go’ning TLS sozlamalari standart holatda xavfsiz qiymatlarga ega. Ular Go’ning har bir yangi versiyasida zamonaviy tavsiyalarga moslab yangilanib boriladi.
TLS qayerda tugashi kerak?
Production’da HTTPS’ni tashkil qilishning ikki keng tarqalgan usuli bor:
1. Go ilovasining o‘zi TLS'ni boshqaradi
Klient ══ HTTPS ══▶ Go ilova (:443)
2. TLS proxy'da tugaydi (TLS termination)
Klient ══ HTTPS ══▶ nginx / Caddy / load balancer ── HTTP ──▶ Go ilova (:8080)
| Go o‘zi | Proxy orqali | |
|---|---|---|
| Qo‘shimcha dastur | Kerak emas | nginx, Caddy yoki bulut load balancer’i |
| Sertifikatni yangilash | autocert bilan avtomatik |
Proxy yoki bulut xizmati bajaradi |
| Bir serverda bir nechta ilova | Qiyinroq | Oson |
| Keng tarqalganligi | Kichik loyihalar, bitta servis | Ko‘pchilik production tizimlar |
Ikkala usul ham to‘g‘ri. Qaysi birini tanlashingizdan qat’i nazar, TLS’ning qanday ishlashini tushunish muhim. Proxy ortida ishlaganda ham ilova X-Forwarded-Proto kabi sarlavhalarni to‘g‘ri tushunishi va HSTS kabi sozlamalarni to‘g‘ri qo‘yishi kerak.
Bo‘lim rejasi
| Dars | Mavzu |
|---|---|
| HTTPS nima | TLS handshake, sertifikatlar, sertifikat markazlari va ishonch zanjiri |
| Self-signed sertifikat | Lokal ishlab chiqish uchun sertifikat yaratish va Go serverini HTTPS’da ishga tushirish |
| TLS konfiguratsiyasi | tls.Config: versiyalar, shifrlar, timeoutlar |
| Let's Encrypt | autocert yordamida bepul sertifikatni avtomatik olish va yangilash |
| HTTP → HTTPS majburlash | HTTP so‘rovlarni yo‘naltirish va HSTS |
Birinchi darsda HTTPS ulanishi o‘rnatilayotganda nimalar sodir bo‘lishini ko‘rib chiqamiz.