16 Nisan 2014

SSL Nedir? - 2.Bölüm



SSL kendi altında güvenilir bir protokole ihtiyaç duyar, bu da TCP protokolü. Dolayısıyla SSL iletişiminden bahsedebilmek için öncelikle TCP 3-way handshake ile TCP bağlantının kurulması gereklidir. Paket dosyasındaki ilk 3 paket 3-way handshake mekanizmasına ait. TCP bağlantı kurulduktan sonraki aşama SSL Handshake’tir. Bunu da en basit haliyle aşağıdaki resmi kullanarak tarif edilenecek.


 
SSL self-delimiting bir protokol olması nedeniyle birden fazla mesajı (2-3-4, 5-6-7, 8-9) tek bir TCP segmentte gönderebiliyor.

1-Client Hello


   
İstemci SSL iletişimi kurma isteğini ClientHello mesajı göndererek belirtiyor. Bu mesajın içine desteklediği SSL protokol versiyonu, şifreleme mekanizmaları (Cipher Suites olarak gösterilen alan, key exchange + cipher + hash algoritmaları bütünü ), destekleyebildiği sıkıştırma yöntemi ( SSL v3 ve TLS'de şuan için bir sıkıştırma algoritması yok bu nedenle bu alan NULL ), SessionID ( yeni kurulan bağlantılarda 0 değeri taşır ) ve RandomNumber denen ve 32 byte'lık bir değer ( bu değer sunucunun da göndereceği random number değeriyle birlikte şifreleme anahtarı üretiminde kullanılır, ilk 4 byte'ı tarih ve saat bilgisini taşır ) yerleştirir.


2-Server Hello

   
Server Hello,Certificateve Server Hello Done mesajları paket dosyasında. Sunucu Client Hello mesajını aldığında Server Hello mesajıyla yanıt verir. İstemcinin Client Hello mesajından destekleyebildiği protokolleri,mekanizmaları öğrenen sunucu, SSL iletişiminde kullanılacak şifreleme mekanizmasını, SSL versiyonu, SessionID numarasını, sıkıştırma metodunu belirler ve yine şifreleme(Simetrik Şifreleme) anahtarının oluşturulmasında kullanılmak üzere ürettiği RandomNumber değerini de bu mesaj içine yerleştirir.

3-Certificate
Sunucu public sertifikasını(Public Key)  bu mesajla gönderir. Public sertifika CA (Certificate Authority) private sertifikası tarafından imzalandığından ve CA public sertifikasıyla bu imza doğrulanabildiğinden, sunucu sertifikasının gerçekten güvenilir CA tarafından verilip verilmediği istemci tarafından kolaylıkla kontrol edilir. Kontrol edilemezse sertifikanın güvenilir olmadığına dair kullanıcı uyarılır.

4-Server Hello Done
Bu mesaj anlaşmanın ilk fazının bittiğini belirtir ve böylece istemci handshake'i tamamlamak üzere ClientKeyExchange,ChangeCipherSpec ve Finished mesajlarını gönderebilir.

5-ClientKeyExchange

   
Bu aşamada istemci daha önce değiş tokuş edilen RandomNumber'lar ile birlikte kullanılarak iletişimin daha doğrusu şifresi iletişimin bel kemiğini oluşturacak simetrik key (anahtar) üretiminde kullanılacak 46 byte uzunluğunda "pre-master secret" da denen gelişigüzel bir numara üretir ve bu numarayı, MAC (Message Authentication Code) değeriyle birlikte sunucunun daha önce "Certificate" mesajıyla kendisine gönderdiği public sertifikasını kullanarak şifreler (Aşağıdaki resimde) . Bu mesajın yapısı ve içeriği, uzunluğu da kullanılan key-exchange algoritmasına göre değişiyor. Aşağıdaki ekran görüntüsü RSA algoritmasında kullanılan mesaj yapısını gösteriyor.

 
 
 "Certificate" mesajında gönderilen public sertifikayla şifrelenen bu değeri deşifre edebilecek olan da sadece bu public sertifikanın private sertifikasına sahip olan uçtur(Private Key). Yani bu iletişim kötü nihetli biri tarafından dinlense bile, "ClientKeyExchange" mesajıyla şifrelenen değer sadece public sertifikanın private eşleniğine sahip iletişim ucu tarafından deşifre edilebileceğinden ele geçen bu bilgi bir işe yaramaz.
  Genel kanının aksine şifreleme işleminde aslında anahtar bu sertifika değil; sertifika aslında şifreleme işleminde kullanılacak anahtarı üretmede kullanılan "ön anahtar" diyebileceğimiz sayıyı şifrelemek için kullanılıyor. Asıl anahtar asla istemci ve sunucu arasında karşılıklı ya da tek taraflı gönderilmiyor. Anahtarı, daha önce iletilen bilgiler (RandomNumber) ışığında istemci ve sunucu kendi kendilerine (pre-master secret ı da kullanarak) üretiyorlar ama ve istemci-sunucu tarafında sonuç olarak ayrı ayrı üretilen bu anahtar aslında aynı anahtar oluyor (simetrik anahtar). 

6,8-ChangeCipherSpec

İstemci bu mesajla sunucuya bundan sonraki iletişimde üzerinde mutabık olunan protokoller,algoritmalar, anahtarla SSL protokolünü kullanma isteğini bildirir.

7,9-Finished


ChangeCipherSpec mesajını gönderir göndermez taraflar bu mesajla, istemci ve sunucu kendilerinden gelecek mesajların Simetrik anahtarla şifreleneceği bilgisini içeren bir mesaj gönderir. Finished mesajı şifrelenen ilk mesajdır ve bundan sonraki iletişim de şifrelenir. Şifrelenen veri ise daha önceki SSL handshake mesajlarının hashi, ve gönderen tarafın istemci ya da sunucu olduğunu belirten bir başka değerdir. 

 Aşağıdaki ekran görüntüsü Finished mesajındaki şifreli veriyi gösteriyor.
 

 Şifreli Metin

TCP 3-way handshake'le TCP bağlantı, SSL Handshake'le de güvenli iletişim kanalı kurulduktan sonraki iletişim, gönderilen Request ve Response'lar aynıdır,hiç bir farkı yoktur.


<<Önceki Bölüm