Dec 28, 2016

SSL နှင့် SSL Certificate ဆိုတာဘာလဲ။

Ko Sagaing
SSL ဆိုတာ (Secure Socket Layer) ကိုခေါ်တာဖြစ်ပြီး TLS (Transport Layer Security) လို့လည်း ခေါ်ပါတယ်။ SSL ဟာ Request လုပ်တဲ့အချက်အလက်တွေကို ဝှက်ထားပေးခြင်း (Encryption) နှင့် မည်သူမည်ဝါဖြစ်ကြောင်း၊ သိရှိနိုင်ရန် (Identification) ခွဲခြားသတ်မှတ်ပေးခြင်းတို့ကို လုပ်ဆောင်ပေးတဲ့ နည်းပညာတစ်ခု ဖြစ်ပါတယ်။  ဒီနည်းပညာကို Website တွေရဲ့  လုံခြုံရေး၊ အဆင့်မြှင့်တင်ရန်အတွက် အသုံးပြုကြပါတယ်။ Website တစ်ခုမှာ ဒီနည်းပညာ ထည့်သွင်းထားခြင်းဖြင့် အဲ့ဒီ Website ဟာ မည်သူမည်ဝါဖြစ်ကြောင်းကို Client ကအတည်ပြု၊ စစ်ဆေးနိုင်သလို၊ အဲ့ဒီ Website တွေကနေ Request (Search, Submit, စသည်ဖြင့်...) လုပ်လိုက်လျှင်လည်း Server ဆီကို Encrypt လုပ်ထားတဲ့ Request တစ်ခုအနေနှင့် ပို့ပေးနိုင်ပါတယ်။ Server သည်လည်း အဲ့ဒီ Request ကို Decrypt လုပ်ပြီး လိုအပ်တဲ့ လုပ်ငန်းတွေကို ဆောင်ရွက်ပေးမယ်...၊ ပြီးရင် Response ကို Encrypt လုပ်ပြီး Client (Browser : eg: Chrome, Firefox, စသည်ဖြင့်...) ဆီကို ပြန်ပို့ပေးပါတယ်။ အဖွဲ့အစည်းတစ်ခုအနေနှင့် မိမိတို့ Website ကို အင်တာနက်မှာ လွှင့်တင်ထားလိုက်ပြီ (Live) ဆိုတာနှင့် ဒီ Website ကိုမည်သူမည်ဝါတွေ အသုံးပြုသည်လည်းဆိုတာ အလွယ်တကူ မသိနိုင်ပါဘူး။ အထူးသဖြင့် အရေးပါတဲ့အချက်အလက်တွေဖြစ်တဲ့ Credit Card မှာရှိတဲ့ အချက်အလက်တွေကို Website ထဲမှာ ထည့်သွင်းပေးရမယ့် အပိုင်းတွေ ပါလာခဲ့မယ်ဆိုရင်၊ ဒီ Website အသုံးပြုသူ (User) တွေရဲ့ အချက်အလက်လုံခြုံရေးကို ထည့်သွင်းစဉ်းစားပေးရပါမယ်။  အဲ့ဒီလိုစဉ်းစားတဲ့အခါမှာ အဓိက လုပ်ဆောင်ရမယ့် လုံခြုံရေးဆိုင်ရာ နည်းပညာတစ်ခုက SSL ပဲဖြစ်ပါတယ်။

SSL ထည့်သွင်းထား၊ မထားဘူးလားဆိုတာ ဘယ်လိုသိနိုင်လည်း။
Website တစ်ခုမှာ SSL ထည့်သွင်းထားလား၊ မထားဘူးလားဆိုတာကို သူ့ရဲ့ URL (Uniform Resource Locator) မှာကြည့်ခြင်းအားဖြင့် သိနိုင်ပါတယ်။


ဥပမာ Google ရဲ့ URL ကိုကြည့်လိုက်မယ်ဆိုရင် https ဆိုပြီး အစိမ်းရောင်နှင့် သော့ဂလောက်ပုံလေးကို တွေ့ရပါလိမ့်မယ်။ အဲ့ဒါဆိုရင် ဒီ Website မှာ SSL ကိုထည့်သွင်းထားတယ်လို့ ပြောနိုင်ပါတယ်။

SSL ထည့်သွင်းမထားရင် ဘာတွေဖြစ်နိုင်လည်း။
Website တစ်ခုမှာ SSL ထည့်သွင်းမထားရင်၊ Website အသုံးပြုတဲ့သူ (User) တွေရဲ့ အချက်အလက်တွေကို ကြားခံ တစ်ယောက်ယောက်က ဖောက်ထွင်း ရယူနိုင်ပါတယ်။ အဲ့ဒါကြောင့် SSL ထည့်သွင်းမထားတဲ့ Website တွေမှာ အရေးပါသည့် အချက်အလက်တွေဖြစ်တဲ့ Credit Card နံပါတ်၊ ဖုန်းနံပါတ်၊ မှတ်ပုံတင် စတာတွေကို အလွယ်တကူ ထည့်သွင်းမပေးမိဖို့ သတိပြုရပါလိမ့်မယ်။

SSL ရဲ့ အလုပ်လုပ်ပုံ
ဒီလုပ်ဆောင်ချက် အဆင့်တွေကို Handshake (လက်ဆွဲနှုတ်ဆက်ခြင်း) လို့လည်းခေါ်ပါတယ်။
၁) SSL ထည့်သွင်းထားတဲ့ Website တစ်ခုကို User တစ်ယောက် Browser ကနေဝင်လိုက်တယ်။
၂) Web Page မမြင်ရခင်မှာ အရင်ဆုံး Server ကနေပြီး Browser ဆီကို Public Key နှင့် SSL Certificate ကိုပို့ပေးမယ်။
၃) Browser က သူ့ဆီရောက်လာတဲ့ SSL Certificate ကို ယုံကြည်စိတ်ချရတဲ့ Certificate Authority (CA) စာရင်းထဲမှာပါလား၊ မပါဘူးလားဆိုတာ စစ်ဆေးကြည့်မယ်၊ အဲ့ဒီ CA စာရင်းက Browser ထဲမှာ အသင့်ပါလာပြီးသား ဖြစ်တယ်။ Certificate မှန်ကန်တယ်ဆိုရင် Browser က Symmetric Session Key လို့ခေါ်တဲ့ အပြန်အလှန် အသုံးပြုနိုင်မယ့် ကီးနှစ်ခုကို ဖန်တီးမယ်၊ ပြီးရင် အဲ့ဒီကီးနှစ်ခုထဲက တစ်ခုရယ်၊ Request လုပ်မယ့် အချက်အလက်တွေရယ်ကို Server ဆီက Public Key ကိုအသုံးပြုပြီး Encrypt လုပ်မယ်၊ ပြီးရင် Server ဆီကို ပြန်ပို့ပေးမယ်။
၄) Server က အဲ့ဒီ အချက်အလက်တွေကို သူ့ရဲ့ကိုယ်ပိုင်ကီး (Private Key) ကို အသုံးပြုပြီး ပြန်ဖော်တဲ့ (Decrypt) အလုပ်ကိုလုပ်မယ်၊ ပြီးရင် Encrypted Session တစ်ခုကို စတင်လို့ရပြီဆိုတဲ့ အကြောင်းကို Browser ဆီကရလာတဲ့ Symmetric Session Key နှင့် Encrypt လုပ်ပြီး Browser ဆီကို ပြန်ပို့ပေးမယ်။
၅) နောက်ဆုံးမှာ Server နှင့် Browser ဟာ Symmetric Session Key ကိုအသုံးပြုပြီး အချက်အလက်တွေကို လျှို့ဝှက်စွာ အပြန်အလှန် ပေးပို့တဲ့အလုပ်ကို ဆက်လက်လုပ်ဆောင်သွားမှာ ဖြစ်ပါတယ်။

Certificate Authority (CA) ဆိုတာဘာလည်း။
Certificate Authority ဆိုတာ အဖွဲ့အစည်း (သို့) တစ်ဦးတစ်ယောက် နှင့် သက်ဆိုင်တဲ့ Website တွေအတွက် Digital Certificate နှင့် Private/Public Key တွေကိုပြုလုပ်ပေးတဲ့ အဖွဲ့တစ်ခုဖြစ်ပါတယ်။ Certificate ဆိုတာကတော့ Website တစ်ခုနှင့်သက်ဆိုင်တဲ့ Serial No, Site Name, Company Name, Address, Expired Date, Issuer စသည်ဖြင့် အချက်အလက်တွေပါတဲ့ ဖိုင်တစ်ဖိုင်ဖြစ်ပါတယ်။  ထိပ်တန်း (၅) ခုစာရင်းဝင် CA တွေကတော့ GoDaddy, Verisign, Comodo, DigiCert, Thawte တို့ပဲဖြစ်ပါတယ်။  ကျွန်တော်တို့ လက်ရှိအသုံးပြုနေတဲ့ Browser တွေမှာ Global CA စာရင်းနှင့် သူတို့ရဲ့ Public Key တွေပါပါတယ်။  ဥပမာ။ Chrome မှာဆိုရင် Settings ထဲက Show Advanced Setting ၊ အဲ့ဒီထဲကမှ HTTPS/SSL မှာ Manage certificates... ဆိုတဲ့ထဲ၊ ဝင်ကြည့်မယ်ဆိုရင် Root Certificates တွေကို တွေ့ရပါလိမ့်မယ်။  ဒါတွေဟာ Browser ထဲမှာ ကြိုတင်ထည့်သွင်းထားတဲ့ CA စာရင်းဖြစ်ပါတယ်။


SSL Certificate ကို ဘယ်လိုဝယ်ရတာလည်း။
အကယ်၍ မိမိ Website မှာ SSL Certificate ထည့်ချင်တယ်ဆိုရင်၊ မိမိ Website ကို Hosting လုပ်တဲ့ Provider တွေဆီမှာ အလွယ်တကူ ဝယ်ပြီး၊ ထည့်လို့ရပါတယ်။  အကယ်၍ မိမိ Website ဟာ အဖွဲ့အစည်းတစ်ခုနှင့်သက်ဆိုင်တဲ့ Website ဖြစ်ခဲ့မယ်၊ Hosting ကိုလည်း သီးသန့် Server အခန်းတစ်ခုအနေနှင့် ထားမယ်၊ ဒါမှမဟုတ် Data Center တစ်ခုမှာ ကိုယ်ပိုင် Server နှင့် Hosting လုပ်ထားမယ်ဆိုရင်၊ SSL Certificate လုပ်ပေးတဲ့ Provider တွေဆီမှာ Certificate သီးသန့် လုပ်လို့ရပါတယ်၊ နာမည်ကြီးတဲ့ ထိပ်တန်း (၅) ခုစာရင်းဝင် Provider (CA) တွေကတော့ GoDaddy, Verisign, Comodo, Digicert, Thawte တို့ပဲဖြစ်ပါတယ်။  အဲ့ဒီ Provider တစ်ခုခုမှာ မိမိ Server ရဲ့ အချက်အလက်တွေ ပေးပြီး Register လုပ်ရမယ်၊ ပြီးရင် ကျသင့်ငွေ ပေးချေရမယ်၊ ပြီးရင် Provider က မိမိ Website အတွက် Certificate ထုတ်ပေးမယ်၊  အဲ့ဒီ Certificate ဖိုင်ကို Download ချပြီး၊ IIS (Internet Information Server) ထဲမှာ Configuration လုပ်ပေးရမယ်။ အခြား Web Server (Apache, GWS, စသည့်...) တွေလည်းဖြစ်နိုင်ပါတယ်။ အဲ့ဒါတွေ ပြီးသွားပြီ ဆိုရင်တော့ SSL Certificate နှင့် လုံခြုံတဲ့ Website တစ်ခုဖြစ်သွားပါပြီ။ တကယ်တော့ အဖွဲ့အစည်းတစ်ခုမှာ အဲ့ဒီအလုပ်တွေကို Network Engineer တွေနှင့်ဖွဲ့စည်းထားတဲ့ Infra Team ကသာလုပ်ရမှာဖြစ်ပါတယ်။

Self Signed Certificate ဆိုတာဘာလည်း။  ဘယ်လိုလုပ်လို့ရလည်း။
localhost ဆိုတာ Web Developer တွေနှင့် ရင်းနှီးကျွမ်းဝင်ပြီးသား နေရာတစ်ခုပါ။  ပုံမှန်အားဖြင့် localhost ဟာ http နှင့် အလုပ်လုပ်ပါတယ်၊ သို့သော် localhost အတွက် SSL ထည့်လို့ရပါတယ်။  အဲ့ဒီ SSL ဟာ localhost အတွက်ပဲဖြစ်တဲ့အတွက် Self Signed Certificate လို့ခေါ်ပါတယ်။  အောက်မှာပြထားတဲ့ နမူနာက IIS (Internet Information Services) မှာ local SSL တစ်ခု ဖန်တီးပုံနှင့် အဲ့ဒီ SSL ကို Website မှာ ဘယ်လို Configuration လုပ်ရမှာလည်းဆိုတာကို တဆင့်ခြင်း ပြထားတာဖြစ်ပါတယ်။
၁) IIS ထဲက Server Certificates ထဲကိုဝင်ပြီး...

၂) Create Self Signed Certificates... ဆိုတဲ့နေရာကို Click နှိပ်မယ်။

၃) Certificate အမည်ကို အကျွမ်းတဝင်ဖြစ်နိုင်မယ့် အမည်တစ်ခုပေးမယ်၊ အိုခေ လုပ်မယ်။

၄) အဲ့ဒါလုပ်ပြီးတာနှင့် Self Signed Certificate တစ်ခုရပါမယ်။

၅) အဲ့ဒီ Certificate ကို localhost ထဲက Website တစ်ခုမှာ သုံးမယ်ဆိုရင်၊ Bindings ထဲမှာ သတ်မှတ်ပေးရပါမယ်။

၆) Site Bindings ထဲမှာ Add... ကို Click နှိပ်မယ်

၇) ပြီးရင် Type မှာ https နှင့် SSL certificate မှာခုနက ဖန်တီးထားတဲ့ Self Signed Certificate ကိုရွေးလိုက်ရုံပါပဲ။

အဲ့ဒါတွေ ပြီးသွားပြီဆိုရင် https://localhost နှင့် Website ကို Browse လုပ်လို့ရသွားပါပြီ။  (အကယ်၍ Browse လုပ်လို့မရဘူး Browser မှာ Error တက်နေတယ်ဆိုရင် Configuration မှာ တခြားလုပ်စရာတွေ ထပ်ရှိနိုင်ပါတယ်။)

Website တစ်ခုက SSL Certificate တစ်ခုကို Code ရေးပြီး ဘယ်လိုဖတ်နိုင်လည်း။
SSL Certificate တစ်ခုကို မည်သည့် Programming Language နှင့်မဆို Code ရေးပြီး ရယူတာ၊ ဖတ်တာတွေ၊ လုပ်လို့ရပါတယ်။ အောက်မှာ ရေးထားတဲ့ နမူနာ C# Code က Google ရဲ့ SSL Certificate ကိုယူပြီး၊ အဲ့ဒီအထဲက အချက်အလက်တွေကို ဖတ်မယ်၊ ပြီးရင် Certificate Dialog Box မှာ ဖွင့်ကြည့်မယ်၊ စသည့် အလုပ်တွေကို လုပ်ပါလိမ့်မယ်။ အခြား Language တွေမှာလည်း သက်ဆိုင်ရာ Library ဖိုင်တွေကို အသုံးပြုပြီး အခုလို ရေးသားနိုင်ပါတယ်။

using System;
using System.Net;
using System.Security;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;

namespace ReadCertificateData
{
    class Program
    {
        static void Main(string[] args)
        {
            //Create and initialize a request
            HttpWebRequest request = (HttpWebRequest)
            WebRequest.Create("https://www.google.com");
            //Get response from request
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            response.Close();

            //X509Certificate is for X.509 v.3 certificates
            X509Certificate cert = request.ServicePoint.Certificate;
            //X509Certificate2 represents an X.509 certificate 
            //and cannot be inherited.
            X509Certificate2 cert2 = new X509Certificate2(cert);
            
            //Print certificate data
            Console.WriteLine("Issuer Name:" + cert2.GetIssuerName());
            Console.WriteLine("Expired Date:" + cert2.GetExpirationDateString());
            Console.WriteLine("Public Key:"+cert2.GetPublicKeyString());
            Console.WriteLine("Press Enter...");
            Console.Read();

            //System.Security dll has to add in References 
            //to use X509Certificate2UI
            //It show certificate dialogbox
            X509Certificate2UI.DisplayCertificate(cert2);
        }
    }
}

မှတ်စုရေးသူအကြောင်း

Ko Sagaing / Software Engineer

နာမည်အရင်းမှာ လှိုင်မင်းထက်ဖြစ်ပြီး၊ ကိုစစ်ကိုင်းဆိုသည့် နာမည်ပြောင်နှင့် မိတ်ဆွေ၊ သူငယ်ချင်းများက ရင်းနှီးစွာခေါ်ကြပါသည်။ ယခင်ကမြန်မာနိုင်ငံတွင် သင်ကြားရေး နှင့် Software Development လုပ်ငန်းများတွင် ဝင်ရောက်လုပ်ကိုင်ခဲ့ပြီး၊ ယခုလက်ရှိမှာ စင်ကာပူနိုင်ငံရှိ နည်းပညာကုမ္ပဏီတစ်ခုတွင် ဝင်ရောက်လုပ်ကိုင်နေပါသည်။

0 ခုမှတ်ချက်ပေးထားတယ်။:

Post a Comment

ကိုစစ်ကိုင်း၏ မှတ်စုများ. Powered by Blogger.