Maqolalar 6 daqiqa 26 ko‘rish
HTTPS va TLS: brauzerdagi qulf ortida nima yashiringan
Har kuni ko‘ramiz, lekin kamdan-kam o‘ylaymiz: manzil qatoridagi qulf belgisi aslida nimani kafolatlaydi? TLS handshake, sertifikatlar va nega HTTPS shunchaki «shifrlash»dan ko‘ra kengroq narsa ekanini soddalab ko‘ramiz.
Mundarija
Biz HTTPS'ni har kuni ishlatamiz, lekin manzil qatoridagi kichkina qulf belgisi aslida nimani anglatishini kamdan-kam o‘ylaymiz. Ko‘pchilik uni "shifrlangan, demak xavfsiz" deb tushunadi. Bu to‘g‘ri, lekin to‘liq emas, va aynan shu to‘liq bo‘lmagan tushuncha ba'zan xato qarorlarga olib keladi. Keling, o‘sha qulf ortida nima borligini bosqichma-bosqich ochamiz.
HTTPS — bu HTTP ustiga qo‘yilgan himoya qatlami#
Oddiy HTTP'da ma'lumot ochiq matnda uzatiladi. Bu shuni anglatadiki, siz bilan server orasidagi yo‘lda turgan har kim — masalan bir xil kafedagi Wi-Fi orqali — sizning so‘rovlaringizni o‘qiy oladi. Parol yozsangiz, u ham ochiq ketadi.
HTTPS bu muammoni HTTP'ni TLS degan qatlam bilan o‘rab hal qiladi. Va TLS bitta emas, uchta narsani birdan ta'minlaydi. Birinchisi — maxfiylik, ya'ni ma'lumot shifrlanadi va yo‘ldagi odam uni o‘qiy olmaydi. Ikkinchisi — yaxlitlik, ya'ni ma'lumot yo‘lda o‘zgartirilmaganini tekshirish. Uchinchisi esa ko‘pincha e'tibordan chetda qoladi, lekin aslida eng muhimi: autentifikatsiya, ya'ni siz gaplashayotgan server haqiqatan o‘zi da'vo qilayotgan sayt ekanini isbotlash.
Uchinchisining nega muhimligini bir savol bilan tushunish mumkin: agar ma'lumotingiz mukammal shifrlangan bo‘lsa-yu, lekin uni o‘g‘ri serverga yuborayotgan bo‘lsangiz, shifrlashdan nima naf? Shuning uchun "kim bilan gaplashyapman" degan savolga javob "qanday gaplashyapman" degan savol qadar muhim.
Handshake: shifrlash boshlanishidan oldingi suhbat#
Har HTTPS ulanish shifrlangan ma'lumot ketishidan oldin qisqa "tanishuv" bilan boshlanadi. Uni sodda tilda shunday tasavvur qilish mumkin.
Brauzer serverga ulanadi va "salom" deydi. Server javoban o‘zining sertifikatini yuboradi — bu hujjatning ichida serverning public key'i va qaysi domenga tegishli ekani yozilgan. Brauzer shu sertifikatni tekshiradi: uni ishonchli tashkilot imzolaganmi va u haqiqatan shu domenga berilganmi? Agar hammasi joyida bo‘lsa, ikki tomon faqat o‘zlariga ma'lum bo‘lgan umumiy shifrlash kalitini kelishib oladi. Shundan keyingina haqiqiy ma'lumot ketadi, va u endi o‘sha kalit bilan shifrlangan bo‘ladi.
Bu suhbatning eng nozik joyi — kalitni kelishish. Ikki tomon ochiq tarmoq orqali gaplashsa ham, hech kim eshita olmaydigan umumiy sirni qanday yasashadi? Buning matematikasi chuqur, lekin natijasi shu: yo‘ldagi odam butun suhbatni eshitib tursa ham, oxirida kelishilgan kalitni bila olmaydi.
Qulf ortiga o‘zingiz qarang#
Bularning hammasini gapirib o‘tirgandan ko‘ra, bir marta ko‘rgan yaxshi.
Bu suhbatni o‘z terminalingizda kuzatish mumkin — hech narsa o‘rnatish
shart emas, openssl deyarli hamma tizimda bor. Shu saytning o‘zini
tekshirib ko‘raylik:
echo | openssl s_client -connect solijonov.uz:443 -servername solijonov.uz
Chiqish uzun, lekin undagi eng muhim qatorlar shular:
0 s:CN=solijonov.uz
i:C=US, O=Let's Encrypt, CN=YE2
1 s:C=US, O=Let's Encrypt, CN=YE2
i:C=US, O=ISRG, CN=Root YE
Protocol: TLSv1.3
Cipher is TLS_AES_256_GCM_SHA384
Verify return code: 0 (ok)
Bu to‘rt qator — yuqorida "notarius" deb aytganim, faqat endi ko‘rinadigan
shaklda. s: — sertifikat kimga berilgan, i: — uni kim imzolagan. Birinchi
qatorda saytning o‘z sertifikati turibdi va uni Let's Encrypt imzolagan;
ikkinchi qatorda esa Let's Encrypt'ning o‘z sertifikati va uni imzolagan
yuqoriroq markaz. Zanjir shu tarzda brauzeringizga oldindan o‘rnatilgan
ildiz sertifikatgacha ko‘tariladi. Verify return code: 0 (ok) — brauzer
ham aynan shu tekshiruvni qiladi va shu javobni oladi.
Qolgan ikki qator ham foydali: TLSv1.3 — protokolning eng yangi versiyasi,
TLS_AES_256_GCM_SHA384 esa kelishib olingan shifrlash usuli. Ya'ni bu
buyruq sizga "qulf bormi" degan savolga emas, "qulf qanday" degan savolga
javob beradi — va bu sizning o‘z serveringizni tekshirganingizda ancha
qimmatli.
Sertifikat kimga berilgani va qachongacha amal qilishini ham ko‘rish mumkin:
echo | openssl s_client -connect solijonov.uz:443 -servername solijonov.uz 2>/dev/null \
| openssl x509 -noout -dates -subject -ext subjectAltName
notBefore=Aug 15 07:53:18 2026 GMT
notAfter=Nov 13 07:53:17 2026 GMT
subject=CN=solijonov.uz
X509v3 Subject Alternative Name:
DNS:solijonov.uz, DNS:www.solijonov.uz
Ikki sana orasi — roppa-rosa 90 kun. Let's Encrypt sertifikatlari shunday qisqa muddatga beriladi, shuning uchun ularni qo‘lda emas, avtomatik yangilash kerak bo‘ladi.
Sertifikatga nega ishoniladi#
Endi asosiy savol: brauzer serverning sertifikatiga nega ishonadi? Axir uni har kim yasashi mumkin. Javob — signature'da. Sertifikatni sertifikat markazi (masalan Let's Encrypt) imzolaydi, va bu markazlarning ishonchli ro‘yxati brauzeringizga oldindan o‘rnatilgan. Ya'ni brauzer "bu sertifikatni men ishonadigan markaz imzolaganmi?" deb tekshiradi. Signature to‘g‘ri bo‘lsa — ishonadi, bo‘lmasa yoki domen mos kelmasa — o‘sha qo‘rqinchli qizil ogohlantirishni ko‘rsatadi.
Sertifikat markazi bu yerda notarius rolini o‘ynaydi: u "ha, bu sayt haqiqatan shu domenning egasiga tegishli" deb tasdiqlaydi, siz esa notariusga ishongan holda saytga ishonasiz.
Bu tekshiruv qanday buzilishini ham ko‘rish mumkin. badssl.com — aynan
shuning uchun yasalgan sayt: uning har bir subdomeni ataylab bitta buzuq
sertifikat bilan ishlaydi. Uchtasini sinab ko‘ring:
curl https://expired.badssl.com/
curl https://wrong.host.badssl.com/
curl https://self-signed.badssl.com/
curl: (60) SSL certificate problem: certificate has expired
curl: (60) SSL: no alternative certificate subject name matches target host name 'wrong.host.badssl.com'
curl: (60) SSL certificate problem: self signed certificate
Uchta xato — uchta boshqa sabab, va ular yuqorida sanagan shartlarga aynan mos keladi: birinchisida sertifikat muddati tugagan, ikkinchisida u boshqa domenga berilgan, uchinchisida esa uni hech qanday ishonchli markaz imzolamagan — sayt uni o‘ziga o‘zi yozib bergan. Brauzerda ham xuddi shu uchta holat o‘sha qizil ogohlantirishni keltirib chiqaradi.
Amalda nima eslab qolish kerak#
Bu mavzudan bir necha amaliy xulosa chiqadi. Birinchisi: har doim HTTPS ishlating, hatto "muhim emas" ko‘ringan saytda ham — Let's Encrypt tufayli u bepul, va uni sozlashning amaliy tomonini alohida maqolada bosqichma-bosqich ko‘rsataman. Ikkinchisi: HSTS sarlavhasini qo‘ying, u brauzerni shu sayt bilan doim HTTPS orqali gaplashishga majbur qiladi. Shu saytda u shunday turibdi:
curl -sI https://solijonov.uz | grep -i strict-transport
strict-transport-security: max-age=31536000; includeSubDomains; preload
max-age=31536000 — bir yil: brauzer shu muddat davomida bu domenga
http:// bilan umuman urinib ko‘rmaydi, to‘g‘ridan-to‘g‘ri HTTPS'ga
o‘tadi. includeSubDomains qoidani barcha subdomenlarga yoyadi,
preload esa saytni brauzerlarga oldindan o‘rnatilgan ro‘yxatga qo‘shish
uchun so‘rov — u holda birinchi tashrifda ham himoya ishlaydi.
Va uchinchi, eng muhim xulosa: HTTPS saytni xavfsiz qilmaydi, u faqat aloqani himoya qiladi. Qulf belgisi "yo‘ldagi hech kim bizning suhbatni o‘qiy olmaydi" degani, "bu saytda hech qanday zaiflik yo‘q" degani emas. SQL injection ham, boshqa kamchiliklar ham HTTPS ostida bemalol yashashi mumkin. Aynan shu farqni bilish — xavfsizlik savodxonligining muhim qismi.