Dün internette dolaşırken “Gel vatandaş Bedava SSL’e gel” diye çığıran bir web sayfası gördüm. Benim de web sayfamda SSL sertifikası olmadığı ve sertifika bedava olduğu için hemen almayı ve kullanmayı denedim. Ve sonuç; adres barınıza bakarsanız URL’nin yanında yer alan kilit ikonuyla artık sayfama “https” yani güvenli bağlantı ile bağladığınızı teyit edebilirsiniz. Bu gibi şeylerle tekrar uğraşınca aklıma eski openssl’li projeler geldi tabi ki. Hemen bir yazı yazıp bu bilgilerim eskimeden kayda alayım dedim. Belki okuyanlara da faydalanır.
Öncelikle kriptolojide sağlanması gereken üç önemli temel faktörden bahsedeyim. Bunlar;
- Integrity (Bütünlük)
- Confidentiality (Gizlilik)
- Authentication (Kimlik Doğrulama)
Zaten isimlerinden de anlaşılacağı üzere veri bütünlüğü, internetten aldığım herhangi bir veri paketinin yolda gelirken başına bir şey gelmediğine dair emin olmak anlamına geliyor. Gizliliği, bu verinin başkaları tarafından görülmediğine emin olmak, kimlik doğrulama ise; gelen verinin gerçekten veriyi almak istediğim kişi tarafından gönderildiğine emin olmak demektir. Siber güvenlikle uğraşanlar genellikle bu üç kriteri göz önünde bulundururlar. En temelinde SSL sertifikası ve diğer bir değişle güvenli bağlantı bu üç kriteri doğrulamayı amaçlar. Şimdi bunları nasıl gerçekleştirdiğinden bahsedeyim. Güvenli bir bağlantıda bu üç kriterin sağlanabilmesi için aşağıdaki şifreleme yöntemleri kullanılır;
- Simetrik Şifreleme: İsminden de anlaşılacağı üzere, simetrik şifreleme yöntemi, şifrelenecek verinin bir anahtar kelime ile şifrelenmesini ve yine bu şifreli verinin aynı anahtar kelime ile çözülmesidir. Yani özetle bu yöntemde, tek bir anahtar hem şifrelemeyi hem de şifreyi çözmeyi sağlar. Modern olarak geliştirilmiş ve mevcut uygulamalarda kullanılmakta olan simetrik şifreleme algoritması AES (Advanced Encryption Standard)’ tır. Blok şifreleme uzunlukları 128, 256 ve 512 olarak değişir.
- Asimetrik Şifreleme: Bu şifreleme yönteminde bir metni şifrelemek ve şifreyi çözmek için ayrı anahtarlar kullanılır. Bunlara açık anahtar (public key) ve özel anahtar (private key) denir. Bu nasıl mümkün olabiliyor? İlk duyduğumda ben de çok şaşırmıştım. Ama olaya şu açıdan bakmayı deneyin; her veri bir sayıdır. Hatta bildiğimiz her şey bir sayıdır. Şifrelemek demek bu sayıları belli sayılarla çarpmak bölmek yani dört işleme tabi tutmak demektir. Asimetrik anahtarlar aslında birbirinin modüler tersi olan çok büyük iki sayıdır. Birbirinin modüler tersi olan iki sayı, birbirleri ile çarpıldığında sonuç “1” çıkıyor. Ve bu sayılar eşsiz sayılardır yani başka bir modüler çiftini bulamazsınız. Bu sayede, siz bu çift anahtarların biriyle herhangi bir sayıyı çarpıp böldüğünüzde elde ettiğiniz sayı ile aynı işlemi bu anahtar çiftinin diğeriyle yaptığınızda şifrelenmiş yani matematiksel işleme tabi tutulmuş sayıyı elde ediyorsunuz. Dahice değil mi? Günümüzde kullanılan asimetrik şifreleme algoritması RSA ( Rivest–Shamir–Adleman) dır. Bu isimler tahmin edileceği üzere geliştiricilerin isimleridir.
- Özet Şifreleme: Bu yöntemde veri bir daha çözümlenememek üzere şifrelenir. Aslında matematiksel olarak, temel mantığı elimizdeki sayı setini, birbirleri ile ifade etmeye dayanır. Örneğin elinizde belli sayı setiniz var. Bu sayıları birbirleri ile çarpıp bölerek ve ya matematiksel işleme tabi tutarak birbirleri ile ifade edebilirsiniz. Bu da sizin verinizi özetleyebilmenizi sağlar. Veriyi özetlemek ne işimize yarıyor ki diye aklınıza soru gelebilir. Tabi bir çok kullanım amacı var fakat en yaygın olanı bir veriyi, bir daha çözülemeyecek şekilde şifreleme ihtiyacından geliyor. Özet alma algoritması sayesinde simetrik şifreler özet halde saklanabilir. Bu da şifrenin gizliliğini sağlamamıza olanak tanır. En yaygıun kullanılan özet alma algoritması SHA dır. SHA algoritmasının da 128,256,512 gibi uzunlukları vardır.
Şimdi bu şifreleme yöntemlerinden sonra SSL’e giriş yapabiliriz. SSL ve yeni versiyonları ile TLS bu üç şifreleme yönetimlerini kullanarak yukarıda bahsettiğim üç kriteri sağlamaya çalışır. Güvenli bir bağlantının nasıl olduğunu şimdi aşama aşama anlatmaya çalışacağım. Bir web sayfasına güvenli yolla bağlanmak istediğinizde şu aşamalar gerçekleşir;
- 1-) İlk aşamada, bilgisayarınız, bağlanmak istediğiniz web sayfasına SSL sertifikası isteğinde bulunur. SSL sertifikası dediğimiz şey, içerisinde üst bir yetkili kurumun, özel anahtarı (private key) ile şifrelenmiş bir veri içerir. Buna Dijital İmza diyoruz. Aynı zamanda bu kurumun açık anahtarı (public key), daha öncesinde tarayıcıda bulunur. Bu gibi şeyleri google chrome’u yüklediğinizde de yüklemiş olursunuz.
- 2-) Bağlanılmak istenen web sayfası, kendi açık anahtarı ile üst otorite (Certificate Authority, CA) tarafından verilmiş sertifikayı bizim bilgisayarımıza gönderir.
- 3-) Bilgisayarımız ilk olarak aldığı sertifikanın içerisindeki dijital imzayı, tarayıcıda bulunan yetkili kurumun (Certificate Authority, CA) açık anahtarı ile çözer. Çünkü, bu veri CA ‘nın özel anahtarı ile şifrelenmiştir. Çözdüğü verinin içerisinde sertifikanın kime ait olduğu ve ne zaman süresinin dolacağı gibi bilgiler vardır. Öncelikle sertifikanın gerçek olup olmadığını ve kime ait olduğunu doğrular. Doğrulama sırasında aynı zamanda sertifikanın altındaki veri özetini de kullanır.
- 4-) Sertifika doğrulandığında sırada, yukarıda bahsettiğim güvenlik kriterlerinden “kimlik doğrulama” kriterini gerçekleştirmek vardır. Bilgisayarımız gerçekten bu sertifikanın bağlanmak istediği adres tarafından gönderilip gönderilmediğini hem anlamak hem de güvenli şifreli bir bağlantı kurmak için rastgele belirlediği simetrik şifreyi, web adresinin ilk aşamada gönderdiği açık anahtarıyla şifreler ve web sayfasına gönderir.
- 5-) Bu açık anahtarla şifrelenmiş ve güvenli bağlantı için kullanılacak simetrik şifre yalnızca, web sayfasının özel anahtarı ile çözülebilir. Bu sayede, bu şifre, bağlanılmak istenilen web sunucusu haricinde kimse tarafından çözülemez. Bu aşamayla yukarıdaki güvenlik kriterlerinden “Gizlilik” kriteri yerine getirilmiş olur.
- 6-) Bağlanılmak istenen web sunucusu, bilgisayarımızdan aldığı şifrelenmiş, simetrik şifreyi kendi özel anahtarı ile çözer ve güvenli bağlantıda kullanılacak simetrik anahtarı elde etmiş olur. Bununla birlikte her iki taraf kimseye göstermeden simetrik şifreyi birbirleri ile paylaşmış olurlar.
- 7-) Fakat bu verinin yolda gelirken başına bir şey gelip gelmediğine de emin olmak gerekiyor. Bu yüzden de hash algoritması kullanılır. Yani her gönderilen verinin sonuna gönderilmek istenen verinin özeti bulunur. Bununla birlikte her iki taraf, veriyi çözdükten sonra, başına bir şey gelip gelmediğini anlamak için, verinin bir özetini de kendisi alıp, gönderilen özetle kıyaslar ve verinin doğruluğuna emin olur. Bu ise, yukarıda bahsettiğim güvenlik kriterlerinden Bütünlük (Integrity) kriterini sağlamamızı sağlar.
- 😎 Bu aşamadan sonra gerçekleşecek her veri alış verişi, paylaşılan simetrik anahtar ile şifrelenerek gerçekleştirilir. Bunun ismine ise, güvenli bağlantı diyoruz.
SSL algoritması bu şekilde işler. Bu algoritmayı çift yönlü yapmak da mümkündür. Özellikle bağlantısı güvenli olması istenilen servislerin bağlantısı çift taraflı sertifikalarla gerçekleştirilir. Bu operasyonları gerçekleştirmek için geliştirilmiş büyük kütüphaneler vardır. Bunlardan biri de OpenSSL kütüphanesi. Bu kütüphaneyi kullanarak kendi güvenli bağlantınızı uygulamanıza kolaylıkla uyarlayabiliyorsunuz. tabi ki açık kaynak bir kütüphane olduğundan açıkları olacaktır. Fakat yine de idare eder.
SSL ile TSL arasında ne fark var derseniz; TSL SSL e göre daha yeni ve günceldir. Protokolün her versiyonu arasındaki fark çok büyük olmayabilir, ancak SSL 2.0 ile TLS 1.3’ü karşılaştırıyor olsaydınız, aralarında bir uçurum olurdu. Özünde, konsept her versiyonda aynıdır. Farklı protokollerin farklılaşan bağlantıları şifreleme görevini yerine getirme yolu budur.
Protokolün her yeni yayımlanan sürümü geldi ve kendi geliştirmeleri ve / veya yeni / kullanımdan kaldırılmış özellikleriyle birlikte gelecek. SSL sürüm 1.0 hiç yayınlanmadı, sürüm iki çıktı ancak bazı büyük kusurları vardı, SSL sürüm 3, sürüm iki’nin yeniden yazılmasıydı (bu kusurları düzeltmek için – sınırlı başarı ile) ve TLS sürüm 1, SSL sürüm 3’ün bir iyileştirmesiydi. TLS 1.0 ve 1.1, değişiklikler küçüktü. TLS 1.2, bazı önemli değişiklikler getirdi ve TLS 1.3 tüm süreci iyileştirdi ve kolaylaştırdı.