IlmHamroh
JavaScript Full-stack/2-qism. Internet, veb va brauzer9/20-dars17 daqiqa
Mundarija (31)

HTTPS va TLS: shifrlash, sertifikat va qulf belgisi

Qisqacha: HTTPS — bu TLS shifrlash ichiga o'ralgan oddiy HTTP. TLS ikki ishni qiladi: yo'ldagi ma'lumotni begonalar o'qiy olmaydigan qilib shifrlaydi va sertifikat orqali "siz haqiqatan shu sayt bilan gaplashyapsiz"ni isbotlaydi. Qulf belgisi aloqa shifrlanganini bildiradi, lekin sayt egasi halol ekanini kafolatlamaydi.

Bu darsda

  • Oddiy HTTP nega xavfli ekanini va "oradagi odam" (MITM) hujumini tushuntira olasiz.
  • Simmetrik va asimmetrik shifrlash farqini va nega TLS ikkalasini ishlatishini bilasiz.
  • TLS 1.3 handshake qadamlarini sanab bera olasiz.
  • Sertifikat, CA va ishonch zanjirini terminalda o'z ko'zingiz bilan ko'rasiz.
  • HSTS, mixed content va sertifikat xatolarini taniysiz va tuzatasiz.

Oldin bilishingiz kerak: HTTP sarlavhalari, MIME turlari, cookie va kesh, Protokol qatlamlari: TCP va UDP, Tarmoq va Internet nima.

1. Nega bu kerak?

Oldingi darsda cookie'ni ko'rdik: Cookie: sessiya=a8f3k2. Kim shu jetonni qo'lga kiritsa, sayt uni siz deb o'ylaydi. Endi savol: bu jeton yo'lda qanday uchadi?

Birinchi darsda ko'rgandik: ma'lumot paketlarga bo'linib, ko'plab routerlar orqali o'tadi. Shu darslar yozilgan kompyuterdan Cloudflare serverigacha paket 12 ta routerdan o'tdi — buni o'sha darsdagi tracert ko'rsatadi. Birinchisi — uydagi Wi-Fi router, keyin provayder, keyin boshqa davlatlardagi uzellar.

Oddiy HTTP'da ma'lumot ochiq matn bo'lib uchadi. Yo'ldagi har bir uzel uni o'qiy oladi. Xuddi pochta orqali konvertsiz, ochiq otkritka yuborgandek: pochtachi ham, saralovchi ham, qo'shni ham o'qiy oladi.

Choyxonadagi ochiq Wi-Fi'ni tasavvur qiling. O'sha tarmoqqa ulangan boshqa odam Wireshark kabi bepul dastur bilan hamma paketlarni ko'radi. Siz http:// saytga parol kiritsangiz — u ham ko'radi. Bunday hujum MITM (Man-in-the-Middle — "oradagi odam") deyiladi.

Oradagi odam uch xil zarar qila oladi:

  1. O'qiydi — parol, cookie, xabarlarni ko'radi.
  2. O'zgartiradi — sahifaga o'z reklamasini yoki zararli skriptni qo'shadi.
  3. Aldaydi — o'zini bank sayti qilib ko'rsatadi.

HTTPS uchala muammoni ham yopadi. Qanday qilib — shu darsda.

2. HTTPS nima?

HTTPS (HTTP Secure — xavfsiz HTTP) — o'sha tanish HTTP, faqat TLS ichiga o'ralgan. TLS (Transport Layer Security — transport qatlami xavfsizligi) — ma'lumotni shifrlaydigan va serverni tekshiradigan protokol.

Protokol qatlamlari darsidagi "konvert ichida konvert"ni eslang. HTTPS'da bitta qo'shimcha konvert paydo bo'ladi:

text
HTTP   (GET /savatcha, Cookie: ...)   ← siz yozgan xat
 └─ TLS   (shifrlangan konvert)       ← yangi qatlam
     └─ TCP   (ishonchli yetkazish)
         └─ IP   (manzil)

HTTP xabari o'zgarmaydi — metodlar, sarlavhalar, status kodlari o'sha-o'sha. Farqi shundaki, u yo'lga chiqishdan oldin shifrlanadi.

Yana ikki tanish farq:

  • HTTP 80-portda ishlaydi, HTTPS — 443-portda (portlar darsi).
  • Manzil http:// emas, https:// bilan boshlanadi.

Maslahat: "SSL sertifikat" iborasini ko'p eshitasiz. SSL — TLS'ning eski nomi. SSL'ning hamma versiyalari xavfli deb topilgan va o'chirilgan. Bugun hamma joyda TLS 1.2 yoki TLS 1.3 ishlaydi, lekin odatga ko'ra "SSL" deyishda davom etishadi.

3. Shifrlash asoslari

3.1 Simmetrik shifrlash — bitta kalit

Shifrlash (encryption) — ma'lumotni kalitsiz o'qib bo'lmaydigan ko'rinishga keltirish. Salom so'zi x9#Kq2 ga aylanadi. Kaliti bor odam uni qaytadan Salom ga aylantira oladi.

Simmetrik shifrlash — qulflash ham, ochish ham bitta kalit bilan. Sandiq va uning kaliti kabi: kaliti bor odam sandiqni yopadi ham, ochadi ham.

Afzalligi — juda tez. Zamonaviy protsessorlar uni maxsus buyruqlar bilan bajaradi. Eng mashhur algoritm — AES.

Muammosi — kalitni qanday uzatish? Siz Toshkentda, server Frankfurtda. Kalitni internet orqali yuborsangiz, oradagi odam uni ham ushlab oladi. Kalit ochiq ketsa, shifrlashdan foyda yo'q.

3.2 Asimmetrik shifrlash — ikki kalit

Asimmetrik shifrlash — bir-biriga bog'langan ikkita kalit: ochiq kalit (public key) va yopiq kalit (private key).

Buni ochiq qulf bilan tasavvur qiling. Siz do'konda yuzta bir xil qulf sotib oldingiz, kaliti esa faqat sizda. Qulflarni ochiq holda hammaga tarqatasiz. Kim sizga xat yubormoqchi bo'lsa — qutiga soladi va sizning qulfingiz bilan "shiq" etib yopadi. Endi qutini hech kim ochmaydi — hatto yopgan odamning o'zi ham. Faqat sizning kalitingiz ochadi.

  • Ochiq kalit — hammaga tarqatiladigan qulf.
  • Yopiq kalit — faqat egasida turadigan kalit. Uni hech kimga berilmaydi.

Asimmetrik kalitlarning ikkinchi foydali ishi ham bor — raqamli imzo. Egasi yopiq kalit bilan "imzo qo'yadi". Hamma ochiq kalit bilan imzo haqiqiyligini tekshira oladi. Soxtalashtirib bo'lmaydi: imzo qo'yish uchun yopiq kalit kerak.

Kamchiligi — asimmetrik hisob-kitob simmetrikdan yuzlab marta sekin. Butun sahifani shunday shifrlash protsessorni qiynaydi.

3.3 TLS ikkalasini birlashtiradi

TLS ikkala usulning yaxshi tomonini oladi:

  1. Ulanish boshida asimmetrik matematika yordamida ikki tomon umumiy maxfiy kalit kelishib oladi. Bu kalit yo'lda hech qachon ochiq uchmaydi.
  2. Keyin butun ma'lumot shu kalit bilan tez simmetrik usulda (AES) shifrlanadi.

Hayotdan o'xshatish: telefonda qisqa gaplashib, bir xil parol tanlab olasiz, keyin uzoq xatlarni shu parol bilan yopib yuborasiz.

Tekshirib ko'ring: Nega TLS butun sahifani asimmetrik usulda shifrlamaydi?

Javob

Chunki asimmetrik shifrlash juda sekin. U faqat boshida kalit kelishish va imzo uchun ishlatiladi. Asosiy ma'lumot tez simmetrik usul (AES) bilan shifrlanadi.

4. Kalitni yo'lda uzatmasdan qanday kelishish mumkin?

Bu savol boshida sehrdek tuyulishi tabiiy. Keling, sekin ko'ramiz. Klassik tushuntirish — bo'yoq aralashtirish.

  1. Ali va server ochiqchasiga bitta umumiy rang tanlaydi — sariq. Buni hamma ko'radi, sir emas.
  2. Ali o'zining maxfiy rangini (qizil) tanlaydi. Server ham o'zinikini (ko'k) tanlaydi. Bularni hech kimga aytishmaydi.
  3. Har biri sariqqa o'z maxfiy rangini qo'shadi. Ali "sariq + qizil" = to'q sariq aralashmani yuboradi. Server "sariq + ko'k" = yashil aralashmani yuboradi.
  4. Ali serverdan kelgan yashilga o'zining qizilini qo'shadi. Server Alidan kelgan to'q sariqqa o'zining ko'kini qo'shadi.
  5. Ikkalasida ham bir xil rang chiqadi: sariq + qizil + ko'k. Bu — umumiy maxfiy kalit.

Oradagi odam sariqni, to'q sariqni va yashilni ko'rdi. Lekin aralashmani qaytadan ranglarga ajratish amalda mumkin emas. Maxfiy qizil va ko'kni bilmasa — yakuniy rangni ham topa olmaydi.

Haqiqiy TLS'da ranglar o'rnida juda katta sonlar ustida matematik amallar bo'ladi. Bu usul kalit almashish (key exchange) deyiladi. Uning muallif nomi bilan atalgan nomi — Diffie–Hellman.

Maslahat: Ko'p maqolalarda "brauzer seans kalitini serverning ochiq kaliti bilan shifrlab yuboradi" deb yozilgan. Bu — eski TLS versiyalaridagi usul. TLS 1.3 undan voz kechgan: agar serverning yopiq kaliti yillar o'tib o'g'irlansa, eski yozib olingan trafikni ham ochish mumkin bo'lardi. Bugun kalit yuqoridagidek "aralashtirib" kelishiladi.

Xo'sh, unda serverning sertifikati va ochiq kaliti nima uchun kerak? Haqiqiylikni isbotlash uchun. Bo'yoq usulida bitta teshik bor: hujumchi o'zini server qilib ko'rsatib, Ali bilan o'zi "rang aralashtirishi" mumkin. Bunga qarshi server o'z aralashmasiga yopiq kaliti bilan imzo qo'yadi. Brauzer imzoni sertifikatdagi ochiq kalit bilan tekshiradi.

5. TLS handshake qadamma-qadam

Brauzer va server TCP ulanishni o'rnatgach (3-way handshake), shifrlash kelishuvi boshlanadi. Bu TLS handshake ("qo'l siqish") deyiladi. TLS 1.3 da u bir borib-kelishda tugaydi:

sequenceDiagram
    participant B as Brauzer
    participant S as Server
    B->>S: ClientHello: shifrlar, kalit ulushi, domen
    S->>B: ServerHello: tanlov, kalit ulushi
    S->>B: Sertifikat + imzo + Finished
    Note over B: Sertifikat va imzoni tekshiradi
    B->>S: Finished
    Note over B,S: Endi hamma HTTP shifrlangan
  1. ClientHello — brauzer: "Men TLS 1.3 va 1.2 ni bilaman. Shu shifrlarni qo'llayman. Mana mening kalit ulushim (bo'yoq aralashmam). Men example.com ga kelyapman."
  2. ServerHello — server: "TLS 1.3 va shu shifrni tanladim. Mana mening kalit ulushim." Shu zahoti ikkala tomonda umumiy kalit paydo bo'ladi.
  3. Sertifikat va imzo — server o'z sertifikatini yuboradi va yopiq kaliti bilan butun suhbatga imzo qo'yadi. Bu qism allaqachon shifrlangan.
  4. Tekshiruv — brauzer sertifikatni tekshiradi (buni pastda ko'ramiz) va imzo to'g'riligiga ishonch hosil qiladi.
  5. Finished — ikkala tomon "tayyorman" deydi. Endi HTTP so'rovlari shifrlangan holda yuboriladi.

ClientHello'da domen nomi ochiq yuboriladi. Bu SNI (Server Name Indication) deyiladi. Bitta IP manzilda yuzlab sayt turishi mumkin. Server qaysi saytning sertifikatini ko'rsatishni shu nomdan biladi.

5.1 Terminalda handshake izlari

curl -v (verbose — batafsil) ulanish jarayonini ko'rsatadi. Client–server darsida > va < qatorlarini ko'rgandik. Endi * qatorlariga e'tibor beramiz:

bash
curl -v https://example.com

Windows'dagi curl natijasi (qisqartirilgan):

text
* Host example.com:443 was resolved.
*   Trying 104.20.23.154:443...
* ALPN: curl offers http/1.1
* ALPN: server accepted http/1.1
* Established connection to example.com (104.20.23.154 port 443)
> GET / HTTP/1.1
> Host: example.com

* qatorlari — curl'ning o'z izohlari. 443-portga ulandi, TLS kelishuvi o'tdi (ALPN — HTTP versiyasini kelishish, uni HTTP versiyalari darsida ko'ramiz). Faqat shundan keyin > so'rov ketdi.

Windows'dagi curl tizimning o'z shifrlash kutubxonasini ishlatadi va sertifikat tafsilotlarini ko'rsatmaydi. Linux va macOS'da curl -v qo'shimcha ravishda SSL connection using TLSv1.3 va Server certificate: qatorlarini chiqaradi. Windows'da buni boshqa vosita bilan ko'ramiz.

Tekshirib ko'ring: HTTPS'da oradagi odam qaysi narsani ko'ra oladi: (a) siz kirgan domen nomi, (b) sahifa yo'li /savatcha, (c) cookie?

Javob

Faqat (a). Domen nomi ClientHello'dagi SNI'da ochiq ketadi, server IP manzili ham ko'rinadi. Yo'l, sarlavhalar, cookie va tana — hammasi HTTP xabari ichida, u esa shifrlangan. Ya'ni provayder "Malika example.com ga kirdi" ni biladi, lekin qaysi sahifani ochgani va nima yozganini bilmaydi.

6. Sertifikat va CA

6.1 Sertifikat — serverning ID-kartasi

Brauzer server bilan kalit kelishdi. Lekin bu server haqiqiy example.com ekanini qayerdan biladi?

Bankka borganingizni eslang. Kassir sizga ishonish uchun ID-kartangizni so'raydi. Karta haqiqiyligiga u davlat bergani uchun ishonadi — o'zingiz chizib kelgan karta o'tmaydi.

Sertifikat (certificate) — serverning ID-kartasi. Unda yozilgan:

  • qaysi domen uchun (example.com);
  • serverning ochiq kaliti;
  • kim bergan (tasdiqlagan);
  • amal qilish muddati (qachondan qachongacha);
  • beruvchining raqamli imzosi.

CA (Certificate Authority — sertifikat beruvchi markaz) — sertifikatlarni tekshirib beradigan tashkilot. Brauzer uchun u "davlat" rolini o'ynaydi. Mashhurlari: Let's Encrypt, DigiCert, Sectigo, Google Trust Services.

6.2 Ishonch zanjiri

Brauzer har bir CA'ni qayerdan taniydi? Operatsion tizim va brauzer ichida oldindan o'rnatilgan ishonchli ildiz sertifikatlar ro'yxati (trust store) bor. Unda bir necha o'nlab eng ishonchli CA'lar turadi.

Ildiz CA sertifikatlarni to'g'ridan-to'g'ri saytlarga bermaydi. U oraliq (intermediate) CA'ga imzo qo'yadi, oraliq CA esa saytga. Natijada zanjir hosil bo'ladi:

text
Ildiz CA   (tizimda o'rnatilgan, ishonchli)
  └─ imzolaydi → Oraliq CA
                   └─ imzolaydi → example.com sertifikati

Brauzer zanjirni pastdan yuqoriga tekshiradi: sayt sertifikati → oraliq → ildiz. Ildiz ro'yxatda bo'lsa va hamma imzolar to'g'ri bo'lsa — ishonadi.

6.3 Haqiqiy sertifikatni ko'ramiz

Git Bash ichida openssl degan vosita tayyor turibdi. U TLS ulanishni ochib, sertifikatni ko'rsata oladi. Buyruq uzun, shuning uchun \ bilan qatorlarga bo'lingan:

bash
echo | openssl s_client -connect example.com:443 \
  -servername example.com 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates

Buyruqni yodlash shart emas. Qismlari: echo | bo'sh kiritish beradi, shunda ulanish kutib turmay yopiladi. s_client serverga TLS bilan ulanadi. 2>/dev/null ortiqcha xabarlarni yashiradi (yo'naltirish darsi). Ikkinchi openssl x509 sertifikatdan kerakli maydonlarni ajratadi.

Natija (2026-yil 28-sentabr):

text
subject=CN=example.com
issuer=C=US, O=SSL Corporation, CN=Cloudflare TLS Issuing ECC CA 3
notBefore=Sep 26 22:49:11 2026 GMT
notAfter=Dec 25 22:56:35 2026 GMT
  • subject — kimga berilgan: example.com.
  • issuer — kim bergan: Cloudflare'ning oraliq CA'si.
  • notBefore / notAfter — 26-sentabrdan 25-dekabrgacha. Atigi 90 kun.

openssl s_client ning to'liq chiqishida butun zanjir ham bor (qisqartirilgan):

text
0 s:CN=example.com
  i:CN=Cloudflare TLS Issuing ECC CA 3
1 s:CN=Cloudflare TLS Issuing ECC CA 3
  i:CN=SSL.com TLS Transit ECC CA R2
2 s:CN=SSL.com TLS Transit ECC CA R2
  i:CN=SSL.com TLS ECC Root CA 2022
Protocol: TLSv1.3
Cipher is TLS_AES_256_GCM_SHA384
Verification: OK

s: — sertifikat egasi, i: — uni imzolagan. Har bir qatorning i: i keyingi qatorning s: iga teng — mana zanjir. Oxirida: protokol TLS 1.3, ma'lumot AES (256-bitli kalit) bilan shifrlanadi, tekshiruv muvaffaqiyatli.

6.4 Let's Encrypt va qisqa muddatlar

Ilgari sertifikat yiliga o'nlab-yuzlab dollar turardi, uni qo'lda o'rnatish ham qiyin edi. Shuning uchun ko'p saytlar HTTP'da qolib ketgan.

2015–2016-yillarda Let's Encrypt ishga tushdi. U sertifikatni bepul va avtomatik beradi. Serverdagi certbot dasturi sertifikatni o'zi oladi va muddati tugashidan oldin o'zi yangilaydi. Bugun Let's Encrypt — dunyodagi eng ko'p sertifikat bergan CA.

Sertifikat muddatlari ataylab qisqartirilmoqda. Muddat qisqa bo'lsa, o'g'irlangan kalit uzoq vaqt yaroqli bo'lib qolmaydi. Brauzerlar va CA'lar 2025-yilda kelishgan jadval bo'yicha maksimal muddat 2026-yil martdan 200 kun, 2029-yilga borib esa 47 kunga tushadi. Shuning uchun sertifikatni qo'lda yangilash o'tmishda qoldi — faqat avtomatika.

Maslahat: Netlify, Vercel, Cloudflare Pages, GitHub Pages kabi hosting xizmatlari HTTPS'ni o'zi yoqadi va o'zi yangilaydi. Birinchi saytingizni joylashtirganda sertifikat haqida o'ylamaysiz ham. certbot bilan qo'lda ishlashni server qismida o'rganamiz.

Tekshirib ko'ring: Hujumchi o'z kompyuterida example.com uchun sertifikat yasadi va unga o'zi imzo qo'ydi. Brauzer unga ishonadimi?

Javob

Yo'q. Imzo qo'ygan "CA" — hujumchining o'zi, u brauzerning ishonchli ro'yxatida yo'q. Zanjir ildizga yetib bormaydi. Brauzer qizil ogohlantirish ekranini ko'rsatadi. Bunday sertifikat o'zi imzolagan (self-signed) deyiladi.

7. Qulf belgisi nimani bildiradi

Manzil satri yonidagi belgi haqida noto'g'ri tushuncha juda ko'p:

Kafolatlaydi Kafolatlamaydi
Aloqa shifrlangan Sayt egasi halol
Yo'lda hech kim o'qimaydi va o'zgartirmaydi Saytda firibgarlik yo'q
Siz aynan shu domen bilan gaplashyapsiz Domen nomi to'g'ri yozilgan

Firibgar bank-kirish.example.com kabi bankka o'xshash domen oladi va unga bepul Let's Encrypt sertifikatini qo'yadi. Qulf chiqadi — lekin bu firibgarning sayti. Qulf faqat "siz firibgar bilan shifrlangan holda gaplashyapsiz" deydi.

Aynan shu chalkashlik tufayli Chrome 2023-yilda (117-versiya) qulf belgisini oddiy sozlamalar belgisiga almashtirdi. Odamlar qulfni "xavfsiz sayt" deb tushunayotgan edi. HTTP sayt esa "Not secure" (Xavfsiz emas) deb belgilanadi.

Diqqat: To'lov yoki parol sahifasida doim domen nomini harfma-harf o'qing. Qulf yoki sozlamalar belgisi borligi — yetarli emas.

8. HTTP'dan HTTPS'ga: yo'naltirish va HSTS

Foydalanuvchi manzil satriga github.com deb yozdi — https:// siz. Brauzer avval http:// ni sinab ko'rishi mumkin. Server nima qiladi? curl -I http://github.com:

text
HTTP/1.1 301 Moved Permanently
Location: https://github.com/

301 yo'naltirish: "HTTPS manzilga o't". Lekin bitta teshik qoldi: birinchi http:// so'rov baribir ochiq ketdi. Hujumchi aynan shu lahzada javobni almashtirib, sizni HTTPS'ga o'tkazmay qo'yishi mumkin. Bu hujum SSL stripping deyiladi.

Yechim — HSTS (HTTP Strict Transport Security) sarlavhasi. GitHub'ning HTTPS javobida:

text
Strict-Transport-Security: max-age=31536000;
  includeSubdomains; preload

Tarjimasi: "Keyingi 31 536 000 soniya (1 yil) davomida menga faqat HTTPS orqali kel. Subdomenlarimga ham." Brauzer buni eslab qoladi. Keyingi safar http://github.com yozsangiz, brauzer so'rovni tarmoqqa chiqarmasdan o'zi https:// ga almashtiradi.

preload — "meni brauzerlarning oldindan o'rnatilgan ro'yxatiga qo'shinglar". Bunday saytlar uchun hatto birinchi tashrif ham faqat HTTPS bo'ladi.

9. Mixed content — aralash kontent

Saytingiz https:// da ochildi. Lekin HTML ichida bitta skript eski manzil bilan ulangan:

html
<script src="http://cdn.example.com/hisoblagich.js"></script>

Sahifa shifrlangan, skript esa yo'lda ochiq keladi. Hujumchi skriptni almashtirsa — butun sahifa uning qo'lida. Bu holat mixed content (aralash kontent) deyiladi.

Brauzerlar bunga shunday munosabatda:

  • Skript, CSS, iframe — darhol bloklanadi. Konsolda xato chiqadi.
  • Rasm, audio, video — brauzer manzilni o'zi https:// ga almashtirib ko'radi. U yerda fayl bo'lmasa — bloklanadi.

Chrome konsolidagi xabar:

text
Mixed Content: The page at 'https://example.com/' was loaded over
HTTPS, but requested an insecure script
'http://cdn.example.com/hisoblagich.js'. This request has been
blocked; the content must be served over HTTPS.

Tarjimasi: "Sahifa HTTPS orqali yuklandi, lekin xavfsiz bo'lmagan skriptni so'radi. So'rov bloklandi: kontent HTTPS orqali berilishi shart."

Tuzatish: manzilni https:// ga o'zgartiring. Fayl o'z saytingizda bo'lsa — nisbiy yo'l (/js/hisoblagich.js) ishlating: u sahifa qaysi protokolda bo'lsa, o'shani oladi.

10. Hujumchi nigohi

Soxta Wi-Fi. Hujumchi aeroportda Free_WiFi_Tashkent nomli tarmoq ochadi. Siz ulanasiz — endi hamma trafikingiz uning qurilmasidan o'tadi. U o'zini bank sayti qilib ko'rsatmoqchi. Lekin bankning haqiqiy sertifikati va yopiq kaliti unda yo'q. O'zi yasagan sertifikatni ko'rsatsa, brauzer qizil ekran chiqaradi:

text
Your connection is not private
NET::ERR_CERT_AUTHORITY_INVALID

HTTPS'ning butun himoyasi shu ekranda turibdi. Hujumchining yagona umidi — siz "Advanced → Proceed" (baribir davom etish) tugmasini bosishingiz. Begona tarmoqda bu tugmani hech qachon bosmang.

SSL stripping. Hujumchi birinchi http:// so'rovni ushlab, sizni HTTP'da ushlab qoladi. Qarshi chora — yuqorida ko'rgan HSTS.

Qulfli fishing. Firibgar sayt haqiqiy sertifikat bilan ishlaydi. Qarshi chora — texnika emas, odat: domen nomini tekshirish.

11. Ko'p uchraydigan xatolar

Quyidagi xatolar ataylab buzilgan sertifikatli sinov saytlarida (badssl.com) olingan. Avval curl xabari, keyin o'sha holatda brauzer ko'rsatadigan xabar.

11.1 Sertifikat muddati o'tgan

text
curl: (35) schannel: ... SEC_E_CERT_EXPIRED (0x80090328)
- The received certificate has expired.

Brauzerda: NET::ERR_CERT_DATE_INVALID. Tarjimasi: "qabul qilingan sertifikat muddati tugagan". Ko'pincha certbot avtomatik yangilashi buzilganda yuz beradi. Saytga kirgan hammaga qizil ekran chiqadi. Tuzatish: sertifikatni yangilash va avtomatik yangilanish ishlayotganini tekshirish.

11.2 O'zi imzolagan sertifikat

text
curl: (60) schannel: SEC_E_UNTRUSTED_ROOT (0x80090325) - The
certificate chain was issued by an authority that is not trusted.

Brauzerda: NET::ERR_CERT_AUTHORITY_INVALID. Tarjimasi: "zanjirni ishonchsiz markaz bergan". O'z kompyuteringizda sinash uchun normal. Internetdagi saytda — yo'q.

11.3 Sertifikat boshqa domen uchun

text
curl: (60) schannel: SNI or certificate check failed:
SEC_E_WRONG_PRINCIPAL (0x80090322)
- The target principal name is incorrect.

Brauzerda: NET::ERR_CERT_COMMON_NAME_INVALID. Tarjimasi: "sertifikatdagi nom siz kirgan nomga mos emas". Masalan, sertifikat example.com uchun, siz esa www.example.com ga kirdingiz. Tuzatish: sertifikatga barcha kerakli nomlarni qo'shish.

11.4 Kompyuter soati noto'g'ri

Birdaniga hamma saytlar sertifikat xatosini bera boshladi — Google ham, YouTube ham. Sababi ko'pincha kompyuter sanasi: u 2019-yilni ko'rsatyapti. Brauzer "sertifikat hali boshlanmagan" deb o'ylaydi. Tuzatish: Windows sozlamalarida sana va vaqtni avtomatik qiling.

11.5 curl -k odati

Internetda curl -k yoki --insecure maslahatini uchratasiz. Bu "sertifikatni tekshirma" degani — HTTPS himoyasining yarmini o'chiradi. Faqat o'z kompyuteringizdagi sinov serveri uchun ishlating, hech qachon haqiqiy saytlar va skriptlarda emas.

12. Mashqlar

1-mashq (oson): Brauzerda sertifikatni ko'ring

Chrome'da istalgan HTTPS saytni oching. Manzil satrining chap tomonidagi belgini bosing → "Connection is secure" (Ulanish xavfsiz) → "Certificate is valid" (Sertifikat haqiqiy). Toping:

  1. Sertifikat qaysi domen uchun berilgan?
  2. Kim bergan (Issued by)?
  3. Qachon tugaydi (Expires on)?
Yechim

Masalan, example.com uchun: domen — example.com, beruvchi — "Cloudflare TLS Issuing ECC CA 3", tugash sanasi — 2026-yil 25-dekabr. Sizda sana boshqacha bo'lishi mumkin: sertifikat har 2–3 oyda yangilanadi.

"Certification Path" (Sertifikat yo'li) yorlig'ida butun zanjirni ham ko'rasiz: ildiz → oraliq → sayt.

2-mashq (o'rta): Xatoni tashxislang

Git Bash'da uchta buyruqni bajaring va har biri uchun sababni ayting:

bash
curl -I https://expired.badssl.com
curl -I https://self-signed.badssl.com
curl -I https://wrong.host.badssl.com
Yechim
  1. SEC_E_CERT_EXPIRED — sertifikat muddati o'tgan.
  2. SEC_E_UNTRUSTED_ROOT — sertifikat o'zi imzolagan, ishonchli CA bermagan.
  3. SEC_E_WRONG_PRINCIPAL — sertifikat boshqa domen nomi uchun berilgan.

Uchala holatda ham curl hech qanday HTTP so'rov yubormadi. U TLS bosqichida to'xtadi, chunki serverga ishonib bo'lmaydi. Linux yoki macOS'da xabar matni boshqacha (certificate has expired kabi), ma'nosi bir xil.

3-mashq (qiyin): Mixed content'ni tuzating

Sahifa https://example.com/menyu da ochiladi. Uning ichida:

html
<link rel="stylesheet" href="http://example.com/css/menyu.css">
<img src="http://example.com/rasmlar/plov.jpg" alt="Plov">
<script src="http://cdn.example.org/sanoq.js"></script>
<img src="https://example.com/rasmlar/logo.png" alt="Logo">
  1. Qaysi qatorlar mixed content?
  2. Brauzer har birini nima qiladi?
  3. Tuzatilgan variantni yozing.
Yechim
  1. Birinchi uchtasi — ular http:// bilan. To'rtinchisi to'g'ri.
  2. CSS va skript bloklanadi — sahifa dizaynsiz va skriptsiz qoladi. plov.jpg rasmini brauzer avval https:// ga almashtirib yuklashga urinadi. U manzilda fayl bor bo'lsa, rasm chiqadi.
  3. O'z saytingizdagi fayllar uchun nisbiy yo'l, begona sayt uchun https://:
html
<link rel="stylesheet" href="/css/menyu.css">
<img src="/rasmlar/plov.jpg" alt="Plov">
<script src="https://cdn.example.org/sanoq.js"></script>
<img src="/rasmlar/logo.png" alt="Logo">

13. Real ishda

  • Har bir sayt HTTPS'da. Bugun brauzerlar HTTP saytni "Not secure" deb belgilaydi. Google HTTPS saytlarni qidiruvda yuqoriroq qo'yadi. Ko'p yangi brauzer imkoniyatlari (kamera, geolokatsiya, service worker) faqat HTTPS'da ishlaydi.
  • Backend va DevOps: Nginx'da sertifikat o'rnatish, certbot bilan avtomatik yangilash, muddat tugashini kuzatish — server ishining oddiy qismi. Buni server qismida qilasiz.
  • Kasbiy odat: sertifikat muddatini kuzatuvchi xizmatlar (monitoring) "7 kun qoldi" deb ogohlantiradi. Tugagan sertifikat — butun sayt "yiqildi" degani.
  • Intervyu: "HTTPS qanday ishlaydi?", "Simmetrik va asimmetrik shifrlash farqi?", "Qulf belgisi nimani kafolatlaydi?" — klassik savollar.

Xulosa

  • HTTPS = HTTP + TLS. HTTP xabari o'zgarmaydi, faqat shifrlangan konvertda uchadi (443-port).
  • TLS kalitni yo'lda uzatmasdan kelishadi, keyin ma'lumotni tez simmetrik usulda (AES) shifrlaydi.
  • Sertifikat — serverning ID-kartasi; brauzer uni CA zanjiri orqali tekshiradi.
  • Qulf — "aloqa shifrlangan", "sayt halol" emas. Domen nomini doim tekshiring.
  • HSTS birinchi http:// so'rov teshigini yopadi; mixed content — HTTPS sahifadagi http:// resurs.

Keyingi dars: Manzilni yozganda nima bo'ladi: to'liq sayohat — DNS, TCP, TLS va HTTP'ni bitta zanjirga yig'ib, Enter bosilgandan sahifa chizilguncha bo'lgan yo'lni kuzatamiz.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
HTTPS va TLS: shifrlash, sertifikat va qulf belgisi — IlmHamroh