3 Temmuz 2016 Pazar

SSL / TLS Nedir ? Nasıl Çalışır ?

-----BEGIN-----

SSL/TLS Nedir?

SSL,iki nokta arasındaki haberleşmeyi encrypted bir şekilde yapmayı sağlayan ve ayrıca karşı tarafta haberleştiğiniz kişinin gerçekten de haberleşmek istediğiniz kişi olduğundan emin olmanızı sağlar.

SSL v3.0  geliştirilmiş versionu TLS v1.0  karşılık gelmektedir.TLSin en son versiyonu TLS v1.2 dir.

bu yüzden SSL/TLS olarak da bilinir.

SSL/TLS protokollerinin ne amaça hizmet ettiğini anlamak için basit bir anoloji yapalım.




bir internet görüşmesini(web siteyi ziyaret etmeniz) telefon görüşmesi gibi düşünücek olursak şu sorunlarla karşılaşırız.

kiminle konuşuyorum :

telefon üzerinden karşı tarafla konuşmaya başlatığınızda karşıdaki kişinin gerçekten konuşmak istediğiniz kişi olduğundan nasıl emin olabilirsiniz?

kulak misafirleri :

bir diğer soru ise karşı tarafla konuştuğunuzda konuşmalarınızın kayıt altına alınmadığından ve dinlenmediğinizden nasıl emin olabilirsiniz ?


telefon görüşmesindeki sorunların aynısı  bir web sitesine bağlantı gerçekleştirdiğinizde de meydana gelmektedir.örneğin banka işlemleri yaptığınızda ki bu bilgiler hassastır(kredi kart bilgileri gibi) bu bilgilerin trafiğin arasına giren birileri tarafından okunmasını istemezsiniz ve aynı şekilde gerçekten bankanın kendisiyle görüştüğünüzden emin olmak istersiniz belki birileri bankanın sitesine erişim isteğinde bulunduğunuzda  banka ile aranızdaki trafiği kendine yönlendirmiştir.


işte bu gibi güvenlik sorunlarının ortaya çıkması SSL/TLS protokolünü gerektirdi.SSL/TLS protokolünün gerçekleştirilmesiyle internet üzerindeki haberleşmelerin güvenli bir şekilde gerçekleştirilmesi ve kimlik doğrulamanın(karşımdakini tanıyorum,gerçekten bu o kişi) sağlanması amaçlanmaktadır.

kısacası SSL/TLS protokolünün var oluş sebepi authentication(kimlik doğrulama) ve encryption(şifreleme)dır.


authentication :

SSL/TLS protokolü ile kurulan haberleşmede karşıdaki kişiyi doğruladığınız,onu tanıdığınız anlamına gelmektedir. karşımdakini tanıyorum,gerçekten bu o kişi demektir.

encryption:

tüm veri trafiğinin(siz ve karşı taraf) şifreli olarak iletilmesidir.


SSL sertifikası satın almak ve yüklemek ?


web sitenizin ziyaretçilerle ssl protokolü ile haberleşmesini istiyorsanız öncelikle ssl sertifikası satın almalısınız.

bunun için sertifikayı satın alabileceğiniz(Certificate Authority) firmalar mevcut.

sertifikayı satın almadan önce firmanıza ilişkin bilgilerin içerdiği(domain adı,adres,mail ve public key) Certificate Signing Request (CSR) dosyasını hazırlıyorsunuz bunu SSL sertifikasını satın almak için firmaya gönderiyorsunuz.Bu şahıslar siteniz üzerinde ve firmanızın kimliği üzerinde araştırmalar yapıp eğer uygunsanız size SSL Sertifikasını gönderiyorlar.

bu arada csr yi oluştururken message digest functionları(hash functionlar) ile csr içerisindeki mesajınızın özetini alırsınız ve bu mesaj özetini belirlemiş olduğunuz şifreleme türüne göre şifrelersiniz.(CSR generate eden toollar bunu otomatik yapar)

csr oluşturulurken public key içine yerleştirildiği gibi ayrıca private keyinizde oluşturulur.private key ile mesaj özetini encrypt edersiniz.bu da csr içerisindeki digital signature fieldınıza gömülür yani dijital imzanız bu veridir.peki bu ne işe yarıyor ? şöyleki siz csr yi CAya verdiğinizde CA csr içerisindeki public keyi kullanarak digital signaturenızı decrypt eder ve ayrıca yine csr içerisindeki detay bilgileriniz belirttiğiniz mesaj özetleme fonksiyonu ile hashlenir(özetlenir) daha sonra decrypt edilen digital signature ile csr ile gönderdiğiniz bilgilerin hashlenmiş hali karşılaştırılır,ve bu şekilde elinizdeki private keyin doğru bir private key olduğundan CA emin olmuş olur ve size sertifikanızı verir.



bundan sonraki aşama sertifikayı alıp web serverınıza yüklemek.


peki bu sertifikanın içerisinde neler mevcut ?

ca size ait bilgileri csr içerisinden alır ve sertifikanızı oluşturur,ayrıca sertifika içerisinde CA nın hash edilmiş bir bilgiyi(csr içindeki bilgileri) kendi private key ile encrypt eder bu da o sertifikayı CA nın imzaladığı anlamına gelir.ve  bu encrypt işlemi serfifikanın digital signature alanına yerleştirir.


SSL/TLS kullanan bir server ile bağlantı gerçekleştirdiğimizde neler oluyor ?


özet olarak şunları diyebiliriz :

kernsteinist adında bir web sitemiz var ve bu sitenin ssl desteğide mevcut.

ziyaretci 443 nolu ssl portu üzerinden kernsteinist.coma bağlantı yapar, (ssl 443 nolu port üzerinde tanımlıdır)
başında https ile giriş yapabildiğiniz tüm siteler ssl/tls desteklemektedir.

not: herhangi bir ssl destekli servera http:// yani 80 portu üzerinden  bir bağlantı girişiminde bulunduğunuzda bu isteği server 443 nolu porta iletir.yani bağlantınız https:// şekline dönüşür.



kernsteinist.com sertifikasını ziyarete gelen kişiye gönderir.browser kendisine gelen sertifika içerisinde CA nın digital imzası üzerinde şu işlemleri uygular.öncelikle browser  sertifika içerisindeki bilgilerin bir hashini alır(yine sertifika da belirtilen hash function kullanılarak) ve daha sonra browser digital imzayı(CAnın private keyi ile encrypt edilmiş bir hash bilgidir) CA'nın public keyi ile decrypt eder ve decrypt ettiği bilgi ile hashini aldığı bilgiyi karşılaştırır eğer eşleşirse bu durumda bu sertifikanın geçerli bir sertifika olduğuna güvenir.



bu olay şu şekilde resmetilebilir :








bu arada CA'nın public keyi browser tarafında mevcuttur,yani siz browser kurulumunuzu yaptığınızda belli başlı CAların public keyleride yüklenir.


bu ön bilgilerden sonra asıl handshake olayını anlayalım.



SSL sessionı oluşmadan önce bir takım bilgilerde client ve server anlaşmaya varmalılar.buna literatürde ssl handshake denilmektedir.

SSL HANDSHAKE

1.SSL Handshakedeki ilk mesajımız Client tarafından servera gönderilen ClientHello mesajıdır.

ClientHello Mesajı içeriği şu şekilde :

.TLS/SSL versionu ---> clientın desteklediği ssl/tls version.
.Random byte ---> bu data encryption için kullanılacak master keyi(ileride bahseticez) üretirken kullanılır.(pre-master  key ile)
.Encryption Algoritmaların listesi --- > cipher suites diye bilinir.Clientın desteklediği encryption algoritmalarını içerir.
.Compression(sıkıştırma) Algoritmalarının listesi ---> yine clientın desteklediği Compression algoritmalarının listesi.
.Ekstra bilgiler -- > bunları internette araştırarak bulabilirsiniz ama üstte bahsettiklerimiz encryption sırasında kullanılan kritik
              bilgilerdir.



2.ServerHello Mesajı ClientHello Mesajına karşılık olarak gönderilen mesajdır.

.Random Bytes --> üstte bahsettiğimiz gibi master key üretirken kullanıcağız.(bu servera ait)
.CipherSuite  --> clientın deskteklediği encryption algoritmalarından biri seçilmiştir.
.Compression(Sıkıştırma) Algoritma --> yine clientın desteklediği compression algoritmalardan biri seçilmiştir.


3.Server sahip olduğu sertifikayı gönderir.Client(browser) gelen sertifikadaki dijital imza ve sertifikadaki bilgiler üzerinde bir takım işlemler yaparak gerçekten bunun güvendiği bir CA(Certificate Authority) tarafından imzalandığından emin olur.yukarlarda bundan bahsetmiştik browserlar daha önceden sertifika satan güvenli bir çok firmanın public keyini barındır kısacası bu keyler bilgisayarınızda browser aracılığı ile yüklenmiştir zaten.

ayrıca bu sertifikanın içerisinde sizin public keyinizde mevcuttur.



4.Sertifika gönderiminden sonra ServerHelloDone mesajını server clienta gönderir ve  "herşey şu an tamam bir sonraki aşama(client key exchange) için beklemedeyim" demek ister server clienta.


5.ServerHelloDone dan sonraki  aşama ClientKeyExchange mesajının servera gönderilmesidir.bu mesaj ile Client servera pre-master secret adını verdiğimiz  datayı serverın public keyini kullanarak şifreledikten sonra gönderir.bu premaster secretın amacı master secret keyin kendisini üretmemizdir.


6.bu aşamaya key generation-key üretme diyebiliriz çünkü bu aşamada iki tarafta elinde bulundurduklarıyla master keyi ve bundan da sessiona ait keyi üretirler.

7.Change Cipher Spec ve Finished mesajları gönderilir.Client ve server birbirlerine bu mesajı göndererek şunu belirtmek isterler bundan sonra haberleşirken artık sessiona ait keyi kullanarak paketleri şifreliyeceğiz ve birbirimize göndereceğiz.

bu olaylar şu şekilde resmetilebilir:

resimdeki bazı aşamalarda clientında sertifika gönderdiğini görüyorsunuz bu genelde opsiyoneldir.yani genel ssl/tls handshake de yalnızca server sertifika gönderir.








artık bu handshake işleminden sonra client ve server arasındaki iletişim iki tarafın ürettiği simetrik bir key ile encrypt ve decrypt
edilecektir.tüm sessionda giden gelen paketlerin simetrik şifreleme kullanarak şifrelenmesinin nedeni asimetrik şifrelemeye göre bu
işlemin daha hızlı olmasıdır.

not:bu protokol de client ve serverın 3.bir şahısa güvendiğini unutmayalım.(Certificate Authority burada 3.kişidir)



EOF

Hiç yorum yok:

Yorum Gönder