main-post-cover

    'SSL - Secret Socket Layer' nədir? İnernetdə məlumatlar necə təhlükəsiz ötürülür?

    14.03.2018
        Əgər sizin ixtisasınız IT ilə əlaqəlidirsə və adında mühəndis sözü varsa, bu məqaləni siz mütləq oxumalısınız. Bu məqalədə maksimum sadə dildə ifadə edərək "SSL"in nə olduğunu və "https"in necə işlədiyini izah etməyə çalışacağıq.
        Hər bi yeni texnologiyanın yaranması üçün ona tələb yaranmalıdır. Bu mövzunu daha yaxşı qavramaq üçün nümunə olaraq interet istifadəçiləri üzərindən misal çəkək və fərz edək ki, aşağıdakı internet istifadəçiləri mövcuddur:
    • Attacker  ( Hacker )
    • User ( Adi istifadəçi )
    • Client ( Web brauzer )
    • Software Engineer ( Bu məqaləni oxuanlar )
        "User"lər proqram təminatını yaradan mühəndislərin yəni "Software Engineer"lərin yaratdığı tətbiqdən istifadə edir və öz məlumatlarını bölüşür. Bunlara misal hər hansı bank kartı məlumatları ola bilər. Digər bir tərəf "Hacker"lər isə adi istifadəçinin həmin kanalda göndərdiyi məlumatı oğurlamağa çalışan şəxslərdir. "Hacker"lər bu məlumatları oğurlamaq üçün bir neçə metodlardan istifadə edirlər. Bunlar arasında ən geniş yayılmışı və məşhuru Wifi şəbəkəsi üzərindən "Proxy" vasitəsilə internetdə ötürülən məlumatı tutmaqdır.
    Bəs bu nə deməkdir?
        İstifadəçi (User) internet brauzerindən istifadə edərək, veb səhifədə öz məlumatlarını yazır. Bütün bu məlumatlar veb serverə şəbəkə üzərindən ötürülür. Və təsəvvür edin ki, istifadəçi ilə veb server arasında gedən bu məlumatı "proxy" şəkildə hər hansı bir proqram tutur, özünə bir yerə yazır və yenidən həmin veb serverə göndərir. Təbii ki, bu prosesdən sizin heç xəbəriniz belə olmur.
        Deməli, artıq problem məlumdur. İstifadəçi ilə veb server arasında olan məlumat mübadiləsinin təhlükəsizliyini təmin etmək. Bu problemi həll etməyin ən sadə yolu göndərilən məlumatları şifrələməkdir. Siz məlumatı göndərən zaman şifrələyirsiniz və veb server bu məlumatı qəbul edəndə, eyni məlumatı deşifrə edərək əldə edir. Beləcə ortada ola biləcək müdaxilələr aradan qaldırılır. Bəs bu proses SSL ilə necə mümkündür?
    SSL-də 2 cür şifrələmə metodu mövcuddur
    1. Simmetrik açar ilə şifrələmə ( Symetric Key Encryption ) - Ən sadə şifrələmə növüdür. Deməli, sizin bir açarınız olur və bu açarla siz həm məlumatı şifrələyə həm də deşifrə edə bilirsiniz.
    2. Asimmetrik açar ilə şifrələmə ( Asymmetric Key Encryption ) - Burada proses biraz mürəkkəbdir, amma mürəkkəb olmağı ilə bərabər riyaziyyatın gözəlliyini göstərir. Sadə dilə izah etsək, bu prosesdə iki açar istifadə olunur: "Public Key" və "Private Key" . Bu açarlar biribirnə riyazi alqoritmlər əsasında bağlıdır. Vacib məqam ondan ibarətdir ki, "Public Key" tərəfindən şifrələnən məlumatları yalnız "Private Key" ilə deşifrə etmək mümkündür.
        Yəqin ki, şifrələmənin ümumi məntiqi aydın oldu. İndi isə "https" üzərindən bu əməliyyatların necə çalışdığını izah edək.  "Https" əsasən iki protokol üzərindən çalışır. Bunlar TLS / SSL üzərindən qurulmuş protokollardır. Bəs TLS / SSL protokolları necə işləyəcək? Yuxarıda qeyd etdiyimiz 2 şifrləmə metodunu bu protokollar üzərindən çalışdıraq. Deməli, məlumat bu protokollar üzərindən ötürülərsə, onsa sistem bu məlumatları şifrələmək üçün 2 protokoldan birini dəstəkləməlidir. Yəni sizin veb saytınız bu protokollardan birini dəstəkləməlidir ki, məlumat mübadiləsi zamanı şifrələmə aparıla bilinsin. Deyək ki, siz istifadəçi olaraq hər hansı bu protokolları (TSL VƏ SSL) dəstəkləyən bir veb serverə məlumat göndərirsiniz. Çox yaxşı. Deməli şifrələmək üçün məlumat var. Lakin buradan belə bir sual ortaya çıxır: Siz hansı yol ilə istifadəçinin kompüterinə "KEY" ( Açar ) ötürməlisiniz ki, o məlumatları şifrələyə bilsin? Burada bir neçə metod var:
    1. Əgər sizin kompüterlər lokal şəbəkə əsasında çalışdırsa. Bu halda siz açarları kompüterlərə bir-bir yükləyə bilərsiniz. Məlumat mübadiləsi internet üzərindən yox, lokal şəbəkə üzərindən baş tutur və məlumatlar şifrələnir.
    2. Əgər siz internet şəbəkəsi üzərindən açarı göndərmək istəyirsinizsə burada diqqətli olmaq lazımdır. Çünki, siz elə birinci bağlantıda istifadəçiyə şifrələmə üçün "KEY" (Açarı) - ı göndərməməlisiniz. Belə olan halda "hacker"lər həmin açarı əldə edə bilərlər. Onda siz deyə bilərsiniz ki, gəlin "Private Key"i web serverdə saxlayaq və istifadəçiyə "Public Key" göndərək. Onda Atcacker bu "Public Key"i əldə etsə belə, məlumatları deşifrələyə bilməz. Lakin, burada bir nüans var. Serverdən istifadəçiyə ötürülən "Public Key", hacker tərəfindən ələ keçirilib, öz "Key" ilə əvəzlənsə necə? Belə olan halda, hacker bu açarı əvəzləyir və bir növ "user"ə saxta "Public Key" göndərir. User isə aldanıb, öz məlumatlarını bu açarla şifrələyir və hacker öz açarı olduğu üçün bütün məlumatları tuta bilir. Belə olan halda bir problem daha ortaya çıxır: İstifadəçi necə inanmalıdır ki, ona göndərilən "Public Key" həqiqətən ona lazım olandır? Gəlin bunun adını etibarlılıq (Trust) qoyaq.
    3 Növ etibarlılıq səviyyəsi mövcuddur
    • "Personal Trust" - Şəxsi Etibarlılıq
    • "Private Trust (By Association)" - Məxfi Etibarlılıq ( Dərnək tərəfindən Təsdiqlənmiş )
    • "Public Trust ( Verified )" - İctimai Etibarlılıq ( Təsdiqlənmiş )
        Birincisi - sadədir. Əgər şəbəkədə 2 kompüter varsa, onlar arası məlumat mübadiləsi gedir və onlar biribirilərini tanıyırlar və məlumatı bölüşürlər.
        İkincisi - az əvvəl yuxarıda qeyd etdiyimiz, lokal şəbəkələr arasında gedən məlumat mübadiləsidir. Fərz edək ki, sizin öz şəbəkəniz var və siz bütün kompüterlərə bu açarı yükləmisiniz və mübadiləni aparırsınız. Buna adətən "Self-Signed-SSL" deyirlər.
        Üçüncüsü isə yuxarıda qeyd etdiyimiz kimi, internet üzərindən göndərilən məlumat mübadiləsi zamanı "Public Key"-in həqiqətən bizə lazım olan açar olduğuna inanmaqdır. Deməli bizim qarşımızda duran güvən problemidir. Aramızdan bir ağıllı çıxdı və bu problemin həllini bizə təklif etdi:
    - Einstein: "Gəlin məlumatları imzalayaq."
    - Mən: " Bir dəqiqə mən başa düşmədim, məlumatları imzalamaq nədir?"
    İzah:
        Veb Server tərəfdən birinci cəhddə məlumatları göndərmədən öncə, "SALAM ALEYKUM" ifadəsini "Private Key" ilə şifrələsin və alınan şifrəni ifadənin özü ilə birgə istifadəçiyə göndərsin. "User" isə özündə olan "Public Key" ilə həmin şifrəli faylı açsın. Eyni zamanda şifrəli fayldan çıxan ifadəni ona paralel olaraq göndərilən şifrələnməmiş orjinal ifadə "SALAM ALEYKUM" ilə müqaisə etsin. Əgər ifadələr eyni olsa, onda məlum olacaq ki, gələn "Public Key" əslində doğru açardır.
    - Mən: " Onda belə çıxır ki, biz internetdə olan hər bir istifadəçiyə "Public Key" göndərməliyik?
    - Einstein: Dayan, hələ mən qurtarmamışam
    Davamı:
        İndi isə gəlin internetdə bir sever yaradaq və adını "CA - Certificate Authority" qoyaq. Bu serverdə bir ədəd "SUPER Private Key" və ona bağlı "SUPER Public Key" hazırlayaq. Daha sonra bütün internet brauzerlərlə danışıb bu "SUPER Public Key"i onlara yükləyək. Budan əlavə bir ədəd SUPER İfadə hazırlyaq. Məsələn: "MƏN SUPER SERVERİN İMZASIYAM". Beləliklə, artıq istifadəçilər "Public Key"i əldə etmiş oldular - İnternet brauzerlər vasitəsilə. Biz artıq mükəmməl bir sistem yaratdıq. İndi isə bu sistem vasitəsilə (https) işləmək istəyən veb serverlər bizə müraciət etsinlər. Müraciət edərkən həmin veb serverlər, bizə "CSR ( Certificate Singning Request ) Key" göndərsinlər. CSR içərisində saytlar öz məlumatlarını və "Public Key"lərini göndərsinlər, amma "Private Key"lərini öz severlərində saxlamaq şərti ilə. Biz isə öz növbəmizdə CSR faylını "CSR Key" ilə parse edib, bir ədəd CRT (certificate) formatında fayl hazırlayıb geri göndərək. Bu faylın içində yer alır:
    • Super ifadəmizin orjinalı
    • Həmin ifadənin "SUPER Private Key" ilə şifrələnmiş forması
    • Veb serverin bizə göndərdiyi "Public Key"in "Super Private Key" ilə şifrələnmiş forması
    Ela, deməli "https" üzərindən işləmək istəyən veb serverlər CRT fayllarını əldə etdilər. User-lər isə SUPER Public Key-i əldə etdilər.
    - Mən: Deməli, indi user, web serverə bağlananda nə baş verəcək?
    Sadə dildə əlaqəni izah etsək:
    1. "User" hər hansı "https" üzərindən çalışan veb səhifəyə girmək istəyir
    2. Veb serverə "Salam, mən sizə qoşulam istəyirəm" kimi bir sorğu gəlir
    3. Veb server, özündə olan CRT faylnı "user"ə göndərir.
    4. "Use"r faylı "parse" edir və içində olan SUPER İfadəni deşifrələyir, özündə mövcud olan SUPER Public Key ilə.
    5. Daha sonra alınmış ifadəni CRT içində olan şifrələnməmiş ifadə ilə müqaisə edir.
    6. Əgər ifadələr üst-üstə düşərsə, deməli "user" bu serverdən gələn CRT-ə etibar edir. Və götürür CRT-nin içində olan 3-cü faylı, yəni şifrələnmiş "Public Key"i həmin SUPER Public Key ilə deşifrə edir və nəyahət ki, "user" özünə lazım olan veb səhifənin "Public Key"ni təhlükəsiz şəkildə əldə edir.
    - Mən: Əhsən sənə ay Einstein, üstəlik mənim də bir təklifim var.
    1. Gəl "user" tərəfdən "Public Key"i əldə etdikdən sonra, bir dənə Simmetrik Açar yaradaq və onu həmin "Public Key" ilə şifrələyib, veb serverə geri göndərək.
    2. Daha sonra veb server onu "Private Key" ilə deşifrə etsin və Simmetrik Açarı əldə etsin.
    3. Nəticədə həm "user"də həm veb serverdə təhlükəsiz simmetrik açar olacaq.
    4. Daha sonra hər iki tərəf arasında simmetrik şifrələmə getməkdə davam etsin. Hər iki tərəf biribirinə məlumatı göndərəndə onu həmin yeni yaranmış açar ilə şifrələsin və gələni deşifrə etsin.
    Beləliklə, host və client arasında təhlükəsiz əlaqə quruldu.
        Bu məqalədə nisbətən SSL haqqında xülasə verdik. Ümumiyyətlə CA ( Certifficte Authority ) rolunda real həyatda çəşhur şirkətlər durur. Və bu şirkətlərin "Public Key"ləri bizim kompüterlərimizdə var. Bildiyiniz kimi bu pullu servisdir. Lakin alternativ olaraq bu linkdən pulsuz sertifikat əldə etmək olar. Üstəlik əslində, "CRT"də SUPER ifadə dediyim signature, əslində "CSR" üzərində yaradılmış və "hash" kimi saxlanılmış SSL sertifikatıdır. 
    Bu məqalədə daha detallı "SSL Certificate Chain" nədir və necə işləyir barədə məlumat vermədim, amma məncə ən azından burada yazılanları hər bir developer başa düşməlidir.
    Linki kopyala