Tarkibga o'tish

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;
  • Secure belgisi 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:

http.ListenAndServeTLS(":8443", "cert.pem", "key.pem", handler)

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.