Knowledge for SSL and TLS

IT နယ်ပယ်ထဲမှာ အလုပ်လုပ်နေကြတဲ့သူတွေအနေနဲ့ SSL, TLS ဆိုတဲ့စကားလုံးတွေကိုနေ့စဉ်ကြားဖူးမြင်ဖူးကြမှာပါ။ဒါပေမယ့် SSL,TLS တွေက ဘာလဲ၊ဘယ်လိုအလုပ်လုပ်သလဲ၊ ဘာအကျိူးကျေးဇူးတွေကြောင့် အသုံးပြုရသလဲဆိုတာကို တိတိကျကျ ပြောနိုင်တဲ့သူနည်းပါတယ်။ အထူးသဖြင့်ကျနော်တို့လို IT security ပိုင်းနဲ့ပတ်သက်ရင် သိပ်မလေ့လာဖူးတဲ့ network engineer တွေဟာ SSL ဆိုတာကို ရင်းနှီးပေမယ့်အသေးစိတ်ပြောပါဆိုရင် မပြောတတ်ကြတော့ပါဘူး။ဒီလိုလူမျိူးတွေအတွက်ရည်ရွယ်ပြီး ကျနော်လက်လှမ်းမှီသလောက်လေ့လာထားတဲ့ SSL အကြောင်းကိုမျှဝေပေးလိုက်ပါတယ်။

SSL/TLS ဆိုတာဘာလဲ
▪▪▪▪▪▪▪▪▪▪
‍‍‍‍‍‍
➡ အင်တာနက်လိုမျိူး မလုံခြုံတဲ့ ကွန်ရက် (Unsecure Network) တွေအပေါ်မှာ အချက်အလက်တွေ ပို့ဆောင်တဲ့ အခါမှာ မသမာတဲ့ သူတွေက ကြားဖြတ်ရယူနိုင်တယ်ဆိုတာကို ကျနော်တို့အားလုံးသိထားကြပါတယ်။ ဒီတော့ ကြားဖြတ်လို့မရအောင် VPN အစရှိတဲ့ Secure Channel တွေကိုအသုံးပြုကြပါတယ်။ ဒါ့အပြင် <<<အကယ်၍များ ကြားထဲကတစ်ယောက်ယောက်က ရရှိသွားခဲ့တယ် >>> ဆိုရင်တောင်မှ ဒီလိုရရှိသွားတဲ့အချက်အလက်တွေကို အလွယ်တကူဖတ်ရှူလို့မရအောင် Encrypted လုပ်ကြရပါတယ်။ Encrypted လုပ်ပြီးပို့လိုက်တဲ့ အချက်အလက်တွေကို တဖက်က လက်ခံသူက စနစ်တကျ Decrypted ပြန်လုပ်နိုင်ဖို့လဲ လိုအပ်ပါသေးတယ်။
‍‍‍‍‍‍
ကျနော်တို့လို User တွေအနေနဲ့ ဒီလိုမျိူးလုံခြုံရေးအစီအမံတွေကို အမြဲတမ်းလိုက်လုပ်ပေး နေဖို့မဖြစ်နိုင်ပါဘူး။ ဒီတော့ ထုံးစံအတိုင်း Protocol တွေလိုအပ်လာတာပါတယ်။Cryptographic Protocol တွေဆိုတာ ဒီလိုမျိူးချိတ်ဆက်မှုတွေ ပိုပြီးလုံခြုံစေဖို့အတွက်
လူတွေရဲ့ ကိုယ်စား အလုပ်လုပ်ပေးတဲ့ Protocol တွေဖြစ်ပါတယ်။ Secure Socket Layer လို့ခေါ်ကြတဲ့ SSL ဟာဆိုရင်လဲ ဒီ Cryptographic Protocol အမျိူးအစားတွေထဲက တစ်ခုအပါအဝင်ဖြစ်ပါတယ်။ Transport Layer Security Protocol (TLS)ကတော့ SSL ရဲ့ နောက်ပိုင်း Version အသစ်ဖြစ်ပါတယ်။ SSL လို့ပဲ နှုတ်ကျိူးပြီး ဆက်ခေါ်နေကြတာကများပါတယ်။ဒီပို့စ်မှာလဲ ကျနော်တို့နားယဉ်နေတဲ့ SSL ဆိုတဲ့ အခေါ်အဝေါ်နဲ့ပဲ ဆက်ပြီး ရေးသွားမှာပါ။
‍‍‍‍‍‍
➡ SSL/TLS ကို Web Browsing လုပ်တဲ့ကိစ္စတွေမှာ လုံခြုံစေဖို့အတွက် အများဆုံးသုံးကြပါတယ်။ နားလည်လွယ်အောင်ပြောရရင် မိမိသုံးနေတဲ့ Web Browser နဲ့ Web Server ကြားမှာ လုံခြုံတဲ့ Secure Channel တည်ဆောက်ပေးတာပါ။ Email Server/Client ကြားထဲက ချိတ်ဆက်မှုတွေလုံခြုံစေဖို့ အတွက်လဲသုံးကြသလို ကျနော်တို့နဲ့အမြဲတမ်းထိတွေ့နေတဲ့ Facebook Messenger လို IM တွေမှာလဲ သုံးကြပါတယ်။ VoIP တွေမှာအသုံးပြုတဲ့ Secure Real-Time Transport Protocol (SRTP) နဲ့ TLS ကိုအသုံးပြုတဲ့ Case တွေရှိပါတယ်။ SSL VPN ဆိုပြီးသုံးကြတာတွေလဲရှိပါတယ်။ SSL ကို စပြီးထွင်ခဲ့တာကတော့ Netscape Communication Corporation ကပါ။ အရင်တုံးက Netscape Web Browser တို့ကို သုံးခဲ့ဖူးကြမယ်ထင်ပါတယ်။ (ခုတော့မရှိတော့ပါဘူး။) Version အနေနဲ့ပြောရရင် SSL Version 1.0 ဟာ လုံခြုံရေး အားနည်းချက်တွေ ရှိခဲ့တာကြောင့် Public Released မဖြစ်ခဲ့ပါဘူး။Version 2.0 ကို 1995 မှာ Released လုပ်ပေမယ့် Vulnerabilityတွေပေါ်လာ တာကြောင့် Version 3.0 ကိုထပ်မြှင့်ခဲ့ပါတယ်။ 1999 မှာ SSL 3.0 ကို အဆင့်မြှင့်ထားတဲ့ TLS 1.0 (Transport Layer Security) ထုတ်ပါတယ်။ TLS 1.1, TLS 1.2 တို့ထပ်ထွက်ပါတယ်။ လက်ရှိအသုံးပြုမှုအများဆုံးက TLS 1.2 ဖြစ်ပြီး နောက်ဆုံးထွက်ထားတဲ့ TLS 1.3 ကိုတော့ Browser အများစုက Support မလုပ်သေးပါဘူး။
‍‍‍‍‍‍
➡ SSL Version 2.0 နဲ့ 3.0 ကိုတော့ အသုံးမပြုသင့်တော့ကြောင်းကို IETF (Internet Engineering Task Force) ကထုတ်ပြန်ထား ပါတယ်။ POODLE Attack ကိုအသုံးပြုပြီး SSL 3.0 ကို Exploit လုပ်လို့ရတာကို Google Security Team က 2014 မှာ တွေ့ရှှိခဲ့လို့ပါ။ TLS 1.0 ကိုအသုံးပြုရင်လဲ Hacker က Man In The Middle Attack ကနေတဆင့် ၊ အင်တာနက်အသုံးပြုတဲ့သူတွေရဲ့ Browser ကို Hijack လုပ်၊ TLS 1.0 ကနေ SSL 3.0 ကို Downgrade လုပ်ပြီးသုံးအောင် Enforce လုပ်ခိုင်းနိုင်တယ်လို့ ဖတ်ရဖူးပါတယ်။ဒါကြောင့် ဖြစ်နိုင်ရင် TLS 1.2 ကိုသုံးတာအကောင်းဆုံးပါ။ PCI DSS Compliance လိုအပ်ချက်မှာလဲ အနည်းဆုံး TLS 1.1 သို့မဟုတ် TLS 1.2 ရှိဖို့ တောင်းဆိုထားတာရှိပါတယ်။ ကျနော်တို့အနေနဲ့ အဲလိုမျိူး Attack တွေကိုကာကွယ်ဖို့ ဆိုရင် Out Of Date ဖြစ်နေတဲ့ Web Browser တွေကိုအသုံးပြုပြီး Browsing လုပ်တာမျိူးတွေကိုရှောင်သင့်ပါတယ်။ ဘာလို့လဲဆိုတော့ Out Of Date Browser တွေမှာ SSL 3.0 သုံးထားတာမျိူးတွေရှိလို့ပါ။ Server Side တွေမှာလဲ SSL 3.0, TLS 1.0 တို့ကို ပိတ်ထားသင့်ပါတယ်။

SSL ဘယ်လိုအလုပ်လုပ်သလဲ
▪▪▪▪▪▪▪▪▪▪
‍‍‍‍‍‍
SSL သုံးရင် ပိုလုံခြံတယ်ဆိုတာတော့ဟုတ်ပါပြီ။ ဘာလို့ ပိုလုံခြုံတာလဲ။ဘယ်အပိုင်းတွေကိုလုံခြုံစေတာလဲ။သူက ဘယ်လို အလုပ်လုပ်တာလဲ ဆိုတဲ့မေးခွန်းအတွက် ဆက်လေ့လာကြရအောင် ။အများဆုံးသုံးတဲ့ Use Case ဖြစ်တဲ့ Web Browsing နဲ့ ပက်သတ်ပြီး အဓိကပြောပါ့မယ်။ အရင်ဆုံး Key Terminology တွေကိုလေ့လာကြည့်ပါမယ်။
‍‍‍‍‍‍
➡ HTTP and HTTPS
ပုံမှန် Http သုံးထားတဲ့ Website တွေကို ကျွန်တော်တို့ကွန်ပျူတာတွေကနေ Internet Explorer တို့ Firefox တို့လို Web Browser ဖွင့်ပြီး လှမ်း Access လုပ်လိုက်ရင် အဲ့ဒီ Web Server နဲ့ ကျွန်တော်တို့ရဲ့web Browser ကြားထဲမှာ အချက်အလက်မှန်သမျှဟာ Plain Text အနေနဲ့ပဲ သွားလာနေပါတယ်။ Web Site ထဲ Login ဝင်ဖို့ Username Password တွေကအစ၊ ငွေကြေးနဲ့ ပတ်သက်တဲ့ Credit Number အစရှိသည်တို့ဟာ Plain Text အနေနဲ့ပဲ သွားနေတော့ စိုးရိမ်စရာကောင်းပါတယ်။ ကြားထဲကနေ တစ်ယောက်ယောက်က ဒီအချက်အလက်တွေကိုလှမ်းပြီး ဖမ်းယူခဲ့မယ် (Sniffing) လုပ်မယ်ဆိုရင် သူဟာ အဲ့ဒီ အချက်အလက် တွေကို အလွယ်တကူရသွားမှာပါ။ ဒါကြောင့် Website တွေဟာ အသုံးပြုသူတွေပိုပြီးလုံခြုံမှူရှိစေဖို့အတွက် https (Secure) ကိုအသုံးပြုလာကြပါတယ်။ Web Browser တွေကိုယ်တိုင်က http ဆိုဒ်တွေကိုကြည့်ရင် Warning ပြတာတွေရှိလာပါတယ်။
‍‍‍‍‍‍
ပုံမှာ http://example.com/ ဆိုတဲ့ website ကို လှမ်းခေါ်တဲ့အချိန်၊ http သုံးထားတာဖြစ်လို့ လုံခြုံမှူမရှိကြောင်းကို browser က သတိပေးထားတာတွေ့နိုင်ပါတယ်။ URL တွေရဲ့ ဘယ်ဖက်ကအကွက်လေးကိုနိပ်ကြည့်ရင် တွေ့ဖူးကြမှာပါ။
‍‍‍‍‍‍
➡ https အသုံးပြုထားတဲ့ Website တွေကို Access လုပ်တဲ့အခါကျရင် ကျွန်တော်တို့ရဲ့ Web Browser နဲ့ Web Server တွေကြားထဲမှာ SSL အသုံးပြုပြီး Encrypted ပြုလုပ်ချိတ်ဆက်ပေးပါတယ်။ အချက်အလက်တွေဟာ Encrypted လုပ်ပြီးမှ အပြန်အလှန်ပို့ ကြမှာ ဖြစ်ပါတယ်။ တစ်ယောက်ယောက်က လှမ်းပြီးဖမ်းယူခဲ့တယ်ဆိုရင်တောင်မှ Encrypted လုပ်ထားတဲ့စာတွေကိုသာ ရခဲ့မှာဖြစ်ပြီး မူရင်း အချက်အလက်ကိုပြန်ရဖို့ Decrypted လုပ်ရပါ့မယ်။ Encryption Algorithm သာကောင်းခဲ့မယ်ဆိုရင် နှစ်တွေဆယ်ချီ ရာချီအောင် အချိန်ပေးပြီးတော့မှ မူရင်းအချက်အလက်ကိုပြန်ဖော်နိုင်မှာပါ။ ဒီတော့ ကျနော်တို့ရဲ့ တန်ဖိုးရှိအတဲ့အချက်အလက်တွေဟာ အများကြီးလုံခြုံသွားပြီဖြစ်ပါတယ်။

Symmetric and Asymmetric Key
▪▪▪▪▪▪▪▪▪▪
‍‍‍‍‍‍
➡ အချက်အလက်တွေကို Encrypted လုပ်ချင်တဲ့အခါ Key တွေကိုအသုံးပြုရပါတယ်။ အလားတူဘဲ Encrypted လုပ်ထားတဲ့ အချက်အလက်ကို မူရင်းအချက်အလက်ပြန်ဖြစ်အောင် Decrypted လုပ်ရင်လည်း Key ကိုအသုံးပြုရပါတယ်။ ကျွန်တော်တို့ ကွန်ပျူတာရဲ့ Web Browser နဲ့ Web Server ကြားထဲမှာ အချက်အလက်တွေကို Encrypted/Decrypted လုပ်တဲ့အချိန်၊ Key တစ်ခုတည်းကိုသုံးပြီး နှစ်ဖက်စလုံးက Encrypted/Decrypted လုပ်မယ်ဆိုရင် ဒီ Key ကို Symmetric Key လို့ခေါ်ပါတယ်။ ဆိုလိုတာက ကျနော်တို့ဖက်က Key A ကိုအသုံးပြုပြီး Encrypted လုပ်လိုက်ရင် Web Server ဖက်မှာလဲ Key A ကိုအသုံးပြုမှ Decrypted ပြန်လုပ်လို့ရပါ့မယ်။ VPN ဖောက်တဲ့အချိန် Key တစ်ခုတည်းကို ဟိုဘက်ဒီဘက် နှစ်ဘက်စလုံးက ထည့်ရသလိုမျိူးပေါ့။ AES, RC4, DES အစရှိတာတွေဟာ Symmetric Cryptographic System တွေပါ။ Web Browsing ကိစ္စတွေမှာကျ Symmetric Key ကို တိုက်ရိုက်သုံးတာက အန ္တရာယ်များ ပါတယ်။ ဘာလို့လဲဆိုတော့ တစ်ဘက်က Key A သုံးမယ်ဆိုတာကို တစ်ဘက်ကသိအောင် Key A ကိုအရင်ပို့ပေးရပါတယ်။ Unsecure Network ပေါ်မှာ Key ကိုပို့လိုက်လို့ တစ်ယောက်ယောက်ကများရသွားခဲ့ရင် ကြားကနေအကုန်လုံးပေါက်ကြားကုန်မှာပါ။

➡ Asymmetric Key မှာကျတော့ Key Pair လို့ခေါ်တဲ့ Key 2 ခုရှိပါတယ်။ Key တစ်ခုကိုသုံးပြီး Encrypted လုပ်ရင် ကျန်တဲ့ Key နဲ့ပြန်ပြီး Decrypted လုပ်မှကို ရမှာပါ။ Public Key, Private Key လို့လဲ ခေါ်ကြပါတယ်။public Key ကို Encrypted လုပ်ဖို့သုံးလေ့ရှိပြီး Private Key ကို Decrypted ပြန်လုပ်ရင်သုံးကြပါတယ်။ (ပြောင်းပြန်သုံးမယ်ဆိုရင်လဲရပါတယ်။) Web Browsing ကိစ္စတွေအတွက်ဆိုရင် Web Server မှာ Private Key ကိုထည့်ထားပါတယ်။ Public Key ကိုတော့ သူနဲ့လာချိတ်ဆက်တဲ့သူတွေဆီကို ပြန်ပေးပါတယ်။ <<<မင်းတို့ငါ့ဆီအချက်အလက်ပို့ချင်ရင် ငါပေးတဲ့ Public Key နဲ့အရင် Encrypted လုပ်ကြ>>>ဆိုတဲ့သဘောပါ။ Decrypted ပြန်လုပ်မယ့် Key က တလောကလုံးမှာမှ အဲသည် Web Server တစ်ခုတည်းဆီမှာဘဲရှိတာဆိုတော့၊ ကြားထဲမှာ အချက်အလက်တွေကို Hacker ကကြားဖြတ်သွားတယ်ဆိုရင်တောင်မှ သူ့ဆီမှာ ပြန်ဖြည်စရာ Private Key မရှိပါ။ Asymmetric Key တွေဟာ ပိုလုံခြုံတယ်ဆိုပေမယ့် အားနည်းချက်က Encrypted/Decrypted လုပ်ရင် အရမ်းတွက်ချက်ရပြီးအရမ်းနှေးပါတယ်။ RSA, Diffie Hellman Group (DH), တို့ဟာ Asymmetric Cryptosystem တွေဖြစ်ပါတယ်။အခုနောက်ပိုင်းမှာ Elliptic-Curve Diffie-Hellman နာမည်ကြီးလာပါတယ်။ Perfect Forward Secrecy (PFS) ကို Support လုပ်ပြီး Private Key ပါသွားရင်တောင်မှ အကုန်လုံးကို Decryption လုပ်လို့မရပါဘူး။
‍‍‍‍‍‍
➡ အရေးကြီးတဲ့အချက်တစ်ချက်ကို ဒီနေရာမှာသိကိုသိဖို့လိုအပ်ပါတယ်။ အဲဒါကတော့ Client To Server ကြားထဲမှာ၊ အချက်အလက် တွေပို့ရင် လက်ခံတဲ့အခါ Public/Private Key ကို စစချင်းတစ်ခါပဲ သုံးတယ်ဆိုတာကိုပါ။ Public/Private Key ဟာ အရမ်းလုံခြုံတယ် ဆိုပေမယ့်အများကြီးတွက်ချက်ရပြီးအရမ်းနှေးတဲ့အတွက် တစ်ချိန်လုံးသုံးနေဖို့ဘယ်လိုမှအဆင်မပြေပါဘူး။ တကယ်မြန်မြန်ဆန်ဆန်နဲ့အလုပ်လုပ်နိုင်တာက Symmetric Key ပါ။ (အပေါ်မှာလည်း ပြောခဲ့ပါတယ်။) အဆင်မပြေတာတစ်ခုက Symmetric Key မှာ ဟိုဖက်ဒီဖက် Key ပို့တဲ့အချိန်မှာ အန္တရာယ်များပါတယ်။ ဒီတော့ အလုံခြုံဆုံးဖြစ်အောင် ဒီလိုသုံးလိုက်ပါတယ်။ <<<အရင်ဆုံး Public/Private Key သုံးပြီး Secure Channel ချိတ်မယ်။ အဲ့ဒီ Secure Channel ထဲကနေမှ Symmetric Key ကိုပို့မယ်။ Symmetric Key ဟိုဘက်ဒီဘက် ရသွားပြီဆိုရင် Public/Private Key ကိုဆက်မသုံးတော့ဘဲနဲ့ Symmetric Key သုံးပြီးတော့ အချက်အလက်ကိုပို့တော့မယ်။ >>> အခု အလုံခြုံဆုံးဖြစ်သွားပါပြီ။ ဒီလိုလုပ်တဲ့ Process ကို PKI (Public Key Interchange) လို့လည်း ခေါ်ကြပါတယ်။

SSL Certificate
▪▪▪▪▪▪▪▪▪▪
‍‍‍‍‍‍
➡ SSL ဆိုတာနဲ့ အမြဲတမ်းတွဲပြီးကြားရမှာက Certificate ပါ။ အပေါ်မှာ Encryption Algorithm တွေကိုပြောခဲ့ပါတယ်။ ဒါပေမယ့် ကျွန်တော်တို့encryption Algorithm တွေသုံးပြီး ကြိုးစားပမ်းစားသွားချိတ်တဲ့ Website ကြီးက တကယ့်ဆိုဒ်အစစ်မဟုတ်ဘဲ တစ်ယောက်က ကြားဖြတ်ပြီးဖန်တီးထားတဲ့ ဆိုဒ်ကြီးကိုသွားချိတ်မိနေရင်ကော။ Hacker တွေကိုယ်တိုင်ကလဲ သူတို့ရဲ့ ဆိုဒ်တွေမှာ SSL တွေဘာတွေ အမှန်အကန်သုံးထားနိုင်တာဖြစ်နိုင်ပါတယ်။ SSL က End To End ချိတ်ဆက်မှုကိုလုပ်ဆောင်ပေး တာဖြစ်ပေမယ့် ဟိုဘက်က ဆာဗာဟာ အတုလား၊အစစ်လား။ဂျင်းလား ဆိုတာကို Validate မလုပ်ပေးပါဘူး။ ဒီပြဿနာကိုကာကွယ်ဖို့ အတွက် SSL မှာ Certificate ကိုသုံးကြပါတယ်။ 
‍‍‍‍‍‍
➡ Certificate မှာ Self-Signed Certificate ရယ် CA Signed Certificate ရယ် ရှိပါတယ်။ ကိုယ့်ဟာကိုယ် Generate လုပ်ပြီး ကိုယ့်ဟာကိုယ် Sign လုပ်ထားတဲ့ Certificate ကို Self-Signed Certificate လို့ခေါ်ပါတယ်။ ယုံကြည်ရတဲ့အဖွဲ့အစည်းတစ်ခုခုက သူရဲ့ Digital Signature ကိုထည့်ပေးထားတာကိုကျ CA Signed Certificate လို့ခေါ်ပါတယ်။ အဲလို ကြားခံအဖွဲ့အစည်းတွေကို Certificate Authority လို့ခေါ်ပါတယ်။ အတိုကောက်ဆို CA ပေါ့။ Comodo, Symantec, Digicert, Geotrust, GoDaddy, GlobalSign အစရှိသဖြင့် ပိုက်ဆံပေးဝယ်ရတဲ့ နာမည်ကြီး CA တွေရှိပါတယ်။ https://letsencrypt.org/ တို့လိုမျိူး free ပေးတဲ့ CA တွေလဲရှိပါတယ်။ 
‍‍‍‍‍‍
➡ Server တွေဟာ သူတို့ဆီကိုလာရောက်ချိတ်ဆက်တဲ့သူတွေဆီကို CA ရဲ့ Signပါတဲ့ Certificate ကိုပို့ပေးပါတယ်။ အပေါ်မှာပြောခဲ့တဲ့ Public Key ကို Certificate မှာ တစ်ခါတည်းထည့်ထားပါတယ်။ ဒီ Certificate ကို ကျွန်တော်တို့ Browser က ရတဲ့အခါ အချက်အလက်တွေကို တိုက်စစ်ပြီးတော့ <<< ငါလှမ်းခေါ်လိုက်တဲ့ https://Www.Nex4.Net/ နဲ့ငါ့ကိုစကားပြန်ပြောနေတဲ့ https://Www.Nex4.Net/ ဟာ တစ်ယောက်တည်းပဲ။ (သို့) တခြားတစ်ယောက်ယောက်က အယောင်ဆောင်နေတယ်။ >>> ဆိုတာကို သိသွားပါတယ်။ (Certificate တွေနဲ့ပတ်သက်ပြီး စိတ်ဝင်စားစရာတွေ၊ အကြောင်းအရာတွေကများတဲ့အတွက် သီးသန့်post တစ်ခုအနေနဲ့ အချိန်ရရင် ထပ်ရေးပါ့မယ်။)
‍‍‍‍‍‍
➡ Self-Sign Certificate ကိုတော့ Testing အရဖြစ်စေ၊ မိမိရဲ့ Organization ထဲမှာဘဲဖြစ်စေ အသုံးပြုကြပါတယ်။ Trusted CA List ထဲကထုတ်ပေးထားတာမဟုတ်တဲ့အတွက် Self-Sign Certificate သုံးထားတဲ့ Site တွေကို ဖွင့်ကြည့်ရင် Warning ပြပါလိမ့်မယ်။ ကျွန်တော်တို့ IT သမားတွေကတော့ နေ့တဓူဝမြင်ဖူးကြမှာများပါတယ်။ (ပုံမှာကြည့်ပါ။) Public Internet မှာရှိတဲ့ Website တွေကို ဖွင့်တဲ့အချိန် ဒါမျိူးလာပေါ်တယ်ဆိုရင်တော့ သတိထားဖို့လိုပါတယ်။ (ပုံတွေက Mozilla Firefox ကိုသုံးပြီးယူထားတာဖြစ်ပါတယ်။ မိမိသုံးတဲ့ Browser ကိုလိုက်ပြီး ပုံစံအနည်းငယ်ကွဲသွားနိုင်ပါတယ်။)

➡ Domain Validation, Standard Validation, Extended Validation အစရှိသဖြင့် ဝယ်လို့ရတဲ့ Certificate အမျိူးအစားတွေရှိပါတယ်။ အောက်ကပုံမှာ ဆက်ကြည့်ပါ။ EV Certificate သုံးထားတဲ့ Website ရဲ့ အချက်အလက်ကို တွေ့နိုင်ပါတယ်။သော့ခလောက်အစိမ်း လေးနဲ့PayPal Inc စာလုံးလေး URL မှာစိမ်းနေတာကိုကြည့်ရင် EV certificate သုံးထားတဲ့ဆိုဒ်ဆိုတာ သိနိုင်ပါတယ်။Symantec CA ကထုတ်ပေးထားတာသိနိုင်ပြီး domain info ပါ တွေ့မှာပါ။ စိတ်ဝင်စားရင် More information ကိုနိပ်ပြီး အသေးစိတ်တွေထပ် ကြည့်နိုင်ပါတယ်။

SSL ရဲ့ Step by Step လုပ်ဆောင်ပုံအဆင့်ဆင့်
▪▪▪▪▪▪▪▪▪▪
‍‍‍‍‍‍
အပေါ်က terminology တွေကိုလေ့လာပြီးရင်တော့ SSL ရဲ့တစ်ဆင့်ချင်းစီ အလုပ်လုပ်ပုံကို ဆက်လေ့လာကြရပါမယ်။
‍‍‍‍‍‍
1️⃣ ကျွန်တော်တို့ရဲ့web Browser ကနေ https://www.nex4.net/ ဆိုပြီး ဖွင့်လိုက်ပြီဆိုပါစို့။ (ကျနော်တို့ စက်ရဲ့ Browser ကို “Client” လို့ ဆက်သုံးပြီးရေးပါ့မယ်။) Client ကနေ Clienthello Message ကို Nex4 Web Server ဆီကိုပို့လိုက်ပါတယ်။ Clienthello Message မှာ Client Browser ကလက်ခံနိုင်တဲ့ Encryption Algorithm, Compression Method နဲ့ အမြင့်ဆုံးလက်ခံနိုင်တဲ့ Version ရယ်၊ Session ID ရယ်၊ Random Number တစ်ခုရယ် ကိုထည့်ပေးထားပါတယ်။
‍‍‍‍‍‍
2️⃣ Clienthello Message ကို https://www.nex4.net/ ကရတဲ့အခါ ဒီ Client Browser ဘယ်လောက်ထိ Support ရှိနိုင်လဲ သိသွားပါတယ်။ ဆိုပါစို့ Client က TLS 1.1 ထိ လက်ခံနိုင်တယ်ဆိုရင် Server ကလည်း “အိုခေ။ ငါတို့ TLS 1.1 သုံးပြီးချိတ်ကြ ရအောင်။session ID, Compression Method ဘယ်လောက်ဘယ်လောက်နဲ့သုံးကြမယ်။” ဆိုပြီးပြန်ပို့ပါတယ်။ သူ့ဖက်ကနေလဲ Random Number တစ်ခုကိုပြန်ထည့်ပေးလိုက်ပါတယ်။ ဒါကို Serverhello Message လို့ခေါ်ပါတယ်။
‍‍‍‍‍‍
3️⃣ Server ဟာ Serverhello Message အပြင် Public Key ထည့်ထားတဲ့ Certificate ကိုပါ တစ်ခါတည်းပို့ပေးလိုက်ပါတယ်။
‍‍‍‍‍‍
4️⃣ အဆင့် ၂ နဲ့ကို ဆာဗာဖက်ကပြန်ပို့ပြီးရင် “ကဲ ငါ့ဖက်က ပို့စရာရှိတာပြန်ပို့ပြီးပြီ” ဆိုတာကို ServerHelloDone Message အနေနဲ့ထပ်ပို့ပေးပါတယ်။
‍‍‍‍‍‍
5️⃣ Client ဟာ Server ဘက်ကပို့တဲ့ Public Key နဲ့ Certificate ကိုရသွားပါပြီ။ ရလာတဲ့ Certificate ကို စစ်ပါတယ်။ စစ်မှန်တယ်၊သေချာပြီဆိုရင် Symmetric Key ဖလှယ်ဖို့ပဲ ကျန်ပါတော့တယ်။ Client Browser ဟာ Symmetric Key ကိုကိုယ်တိုင် Generate လုပ်ပါတယ်။ (အပေါ်မှာပါခဲ့တဲ့ Random Number တွေဟာ Generate လုပ်တဲ့အချိန်မှာသုံးဖို့ပါ။) ရလာတဲ့ Symmetric Key ကို ဆာဗာဖက်ကပို့ထားတဲ့ Public Key သုံးပြီး Encrypted လုပ်၊ ပြီးရင် Server ဆီကိုပြန်ပို့လိုက်ပါတယ်။ အဲသည် Message ကို ClientKeyExchange message လို့ခေါ်ပါတယ်။တစ်ကမ္ဘာလုံးမှာ https://www.nex4.net/ Server ရဲ့ Private Key တစ်ခုတည်းနဲသာ ပြန်ဖြေလို့ရမယ့် Message ဖြစ်ပါတယ်။
‍‍‍‍‍‍
6️⃣ Server ဟာ ClientKeyExchange message ကို Private Key သုံးပြီး Decrypted လုပ်လိုက်တဲ့အတွက် သူဖက်မှာလဲ Symmetric Key ကိုရသွားပါပြီ။ Symmetric Key ကို မလုံခြုံတဲ့ Network ပေါ်ကတစ်ဆင့် လုံခြုံစွာ ဖလှယ်လိုက်ပါပြီ။ ကျနော်တို့ စက်ရဲ့ Web Browser နဲ့ https://www.nex4.net/ ရဲ့အကြားမှာ ခုနက Symmetric Key ကိုသုံးပြီး အချက်အလက်တွေကို လုံခြုံစွာ Encrypted လုပ်ပြီးပို့နေပြီဖြစ်လို့ လုံခြုံသွားပါပြီ။
‍‍‍‍‍‍
➡ ဒီလောက်ဆို SSL/TLS ဘယ်လိုအလုပ်လုပ်သလဲဆိုတဲ့ အခြေခံလေးတွေကို မြင်ကြလိမ့်မယ်ထင်ပါတယ်။ SSL/TLS သုံးလို့ရှိရင် Encryption/Decryption ကိစ္စတွေအတွက် Server တွေရဲ့ Load ကို ပိုသုံးရပါတယ်။ ဒါကြောင့် ခုနောက်ပိုင်းမှာ SSL Termination လုပ်ပေးနိုင်တဲ့ Proxy တစ်ခုခုကို Server ရှေ့မှာ ကာထားတာတွေမျိူးကိုလဲသုံးကြပါတယ်။ SSL ကို Client To Server ကြား End To End မချိတ်တော့ဘဲနဲ့ Client To Proxy Device ကြားပဲချိတ်ကြတာမျိူးပါ။ ပြီးမှ proxy device ကနေ ဆာဗာကို plain text အနေနဲ့ပြန်ပို့ပေးတဲ့အခါ ဆာဗာ အလုပ်လုပ်ရတာသက်သာသွားမှာဖြစ်ပါတယ်။ ဒါကို SSL Offloading လို့လဲခေါ်ကြပါတယ်။
‍‍‍‍‍‍
➡ နောက်ဆုံးတစ်ခုနဲ့မှတ်စေချင်တာက SSL ဆိုတာ End To End ချိတ်ဆက်မှုတွေကိုလုံခြုံစေဖို့အတွက်အဓိကအလုပ်လုပ်ပေးတယ် ဆိုတာကိုပါ။ ကျွန်တော် တို့သွားချိတ်ဆက်ထားတဲ့ Website ကိုယ်တိုင်ကိုက Hacker တွေဝင်ရောက်ပြီး ထိန်းချူပ်မှုရနေတာမျိူးဆိုရင်တော့ SSL က ဒါတွေကိုသိမှာမဟုတ်ပါဘူး။ SSL သုံးရုံနဲ့အရာရာလုံခြုံသွားပြီဆိုတာမျိူးထက် SSL ဟာ ဘယ်အပိုင်းတွေကို လုံခြုံမှုပေးနိုင်တယ်ဆိုတဲ့ အခြေခံအသိမျိူးရဖို့ ဒီ Article က ရည်ရွယ်ပါတယ်။

✍✍✍ Author : Soe Nanda

Don’t forget to share this post!