SSL TLS Nedir ?
İnternet Devrimi ve Güvenli Web İhtiyacı
Tim berners Lee’nin 1989 yılında, bugün kullandığımız internetin temelini atan çalışmalarının ardından 1 yıl sonra 1990’lı yıllarda Jim Clark tarafından kurulan Netscape o yıllarda tarayıcı savaşlarında Bill Gates ile rekabet ederken piyasa payının yaklaşık 4’te 3’ünü elinde bulunduruyordu. World Wide Web devrimlerinin yaşandığı, İnternet firmalarının giderek artan halka arzları ve aldığı ciddi yatırımlar ile internet insanların ilgisini çekmeye başlamıştı. Dot-Com balonu olarak adlandırılan bu dönem 2000’li yılların başında NASDAQ’da ciddi bir çöküş yaşayana kadar %582 artışa kadar ulaştı. İnternetin genç girişimciler için zenginlik hayalleri, yatırımcıların ise fırsat olarak görüldüğü bu dönemde internet girişimleri çok hızlı büyüdü. Birçok yatırımcı iş planları ve gelir yaratma potansiyelleri gibi analizlere sadık kalmak yerine internet sitelerinin trafiği gibi metriklere göre yatırım yaptı. 2000’li yılların başlarında Dot-Com balonunun patlaması ile pek çok şirketin aşırı değer kaybetmesinin yanında Amazon ve eBay gibi varlığını halen sürdüren şirketler internet devriminde farklı gereksinimleri de beraberinde getirdi. Hayatına kitap satışı ile başlayan Amazon, Douglas Hofstadler ve Fluid Analogies araştırma grubu tarafından yazılan “Fluid Concepts and Creative Analogies: Computer Models of the Fundamental Mechanisms of Thought” kitabının satışı ile o dönem e ticaret hayatına başladı. Kuşkusuz internet devriminde önemli ihtiyaçlardan biri de insanların güvenli ödeme yaparak online kitap satın almak gibi yenilikleri yapabilecekleri bir güvenlik protokolüydü. İşletmeler internet ortamına adım attıkça kullanıcıların gizliliği, kart bilgileri gibi hassas verilerin gizliliğinin korunması gibi konular da ön plana çıkmış oldu. Her şey Netscape’in SSL protokolünü geliştirmeye öncülük etmesiyle başladı.
SSL/TLS Nedir ?
Günümüzde TLS (Transport Layer Security) olarak kullanılan ve artık kullanımdan kaldırılan SSL (Secure Socket Layer) yani güvenli yuva katmanı, en kısa tabiri ile internet oturumunu güvende tutmayı sağlamak ve istemci ile sunucu arasında gönderilen verileri şifreleyerek kötü niyetli kişiler tarafından okunabilirliğini ortadan kaldırmayı amaçlayan kriptolama protokolüdür. TLS Aktarılan verileri iki katman arasında iletirken kullanılan şifreleme algoritmaları ile şifreler ve başka kaynaklar tarafından okunmasının önüne geçer.
SSL 1.0 2.0 ve 3.0
1993 Yılında Web tarayıcısı olan Mosaic 1.0’ın çıkışından hemen sonra İlk SSL sürümünü piyasaya sürmek için hazır olan Netscape firması ilk sürümde görülen bazı güvenlik zafiyetlerinden dolayı ilk SSL versiyonunu hiçbir zaman piyasaya sürmedi. İlk SSL sürümü, site üzerinde gönderilen mesajların kötü niyetli kişiler tarafından okunabileceği birtakım zafiyetler barındırıyordu.
SSL’in babası olarak kabul edilen kriptograf Taher Elgamal Netscape’de 1995 ve 1998 yılları arasında öncülük ettiği çalışmalar ile HTTP Protokolünün güvenli bir versiyonu, yani HTTPS olarak kullanılan SSL 2.0 ve SSL 3.0 Sürümü Netscape firması tarafından piyasaya sürüldü. SSL 3.0 Sürümü diğer iki versiyondan daha farklı kurgulanarak önceki güvenlik açıklarını kapatır nitelikte geliştirildi. IETF (Internet Engineering Task Force) tarafından 1996 yılında internet standart ve protokolleri üzerine teknik yayınlar olarak nitelendirilen RFC yayınlarından, SSL 3.0 yayınına buradan ulaşabilirsiniz.
SSL 3.0 ve POODLE Zafiyeti
Google Tarafından 2014 yılında yayınlanan “This POODLE bites: exploiting the SSL 3.0 fallback” adlı makalede Google güvenlik ekibinin SSL 3.0 sürümünde keşfettiği POODLE (Padding Oracle On Downgraded Legacy Encryption) zafiyetine dikkat çekilmektedir. Bir MITM (Man-in-the-middle) yani ortadaki adam saldırısı olan POODLE açığı SSL Sürümünün veriyi şifrelemek için kullandığı CBC (Cipher Block Chaining) modunun her 256 denemede bir 1 byte verinin çözülmesine neden olmaktadır. Saldırgan Client ve Server arasına girdikten sonra trafiği kendi üzerinden geçirmesiyle poodle açığından yararlanarak session çerezleri gibi verileri çalabilir.
SSL Evrimi ve TLS Versiyonları
SSL 3.0 Versiyonunun geliştirilmiş hali olarak piyasaya sürülmesi amaçlanan TLS sürümleri her bir versiyonda güvenlik açıkları kapatılarak sırasıyla TLS 1.0, 1.1, 1.2 ve 1.3 versiyonu olmak üzere gelişim gösterdi. İlk kez 1999 yılında RFC2246’da SSL 3.0’ın yükseltilmiş sürümü olarak tanımlandı.
Yayınlandığı ilk günden bu yana TLS Versiyonlarının güvenlik güncellemeleri ve teknik detayları için RFC Yayınlarına göz atabilirsiniz.
Protokol | Çıkış Tarihi | RFC | Durum |
---|---|---|---|
SSL 1.0 | Yayınlanmadı | ||
SSL 2.0 | 1995 | RFC6176 |
2011’de kullanımdan kaldırıldı. (RFC 6176) |
SSL 3.0 | 1996 | RFC6101 |
2015’de kullanımdan kaldırıldı. (RFC 7568) |
TLS 1.0 | 1999 | RFC2246 |
2020’de kullanımdan kaldırıldı. (RFC 8996) |
TLS 1.1 | 2006 | RFC4346 |
2020’de kullanımdan kaldırıldı. (RFC 8996) |
TLS 1.2 | 2008 | RFC5246 | |
TLS 1.3 | 2018 | RFC8446 |
Cipher Suite
TLS Kullanımının, güvenli web oturumu için birtakım şifreleme algoritmaları uygulayarak client ile server arasındaki mesajların okunabilirliğini ortadan kaldırmak amacıyla şifrelediğinden bahsedilmişti. Cipher Suite güvenli bir web oturumu sağlamak amacıyla kullanılan şifreleme algoritmaları ve yöntemler kümesine verilen addır. Bir Cipher Suite temel olarak; Anahtar Değişimi (Key Exchange), Kimlik Doğrulama (Authentication), Toplu Şifreleme (Bulk Encrytion) ve MAC Algoritmasından (MAC Algorithm) oluşur. Kullanıcıların güvenlik ihtiyaçları doğrultusunda TLS Sertifikaları üzerinde cipher suite’leri veya cipher setleri tanımlanır.
TLS 1.0 ve TLS 1.2’de Deskteklenen Cipher Suite Algoritmaları
Kimlik Doğrulama (Authentication) = RSA, DSA, ECDSA
Anahtar Değişimi (Key Exchange) = RSA, DH, ECDH, SRP, PSK
Toplu Şifreleme (Bulk Encrytion) = AES, 3DES, CAMELLIA
MAC Algoritmaları = SHA, MD5
Cipher Suite Konfigürasyon Dosyaları
TLS Bağlantıları için gerekli olan konfigürasyon dosyaları, XML Formatında ve TLS bağlantıları esnasında kullanılacak olan Cipher Suite’lerin belirlendiği bir ayar dosyasıdır. Güvenli oturumun gerçekleşebilmesi adına burada tanımlanan cipher suite’ler handshake esnasında uygun olan ve en güvenli cipher süite tercih edilerek handshake başlar. Bir Cipher Suite ayar dosyası .xml dahil olmak üzere 28 karakterden fazla olamaz.
NGINX’de Tanımlı Self-Signed TLS Sertifikası Oluşturma
1 - NGINX Kurulumu
Sanal makine olarak kullandığım Centos 8 Linux işletim sistemine NGINX Kurulumu yaptıktan sonra http:80 Portunda yayın yapan default NGINX Web uygulamasını kendi oluşturduğumuz SSL Sertifikasıyla HTTPS:443 Portuna adım adım taşıyalım.
Öncelikle bir NGINX Suncuya ihtiyacınız olacak. Sisteminizde var olan bir NGINX Server bulunmuyorsa aşağıdaki komutları takip ederek Epel deposundan Nginx kurulumunu gerçekleştiriniz.
Start nginx komutu ile nginx servisini aktif hale getirdikten sonra enable komutu ile sistemin her açılışta nginx servisini otomatik olarak çalıştırmasını sağlıyoruz. Tüm işlemlerin ardından status komutu ile servisin sağlıklı bir şekilde çalışıp çalışmadığını kontrol edebiliriz. Eğer tüm kurulum adımları hatasız bir şekilde tamamlandıysa aşağıdaki gibi çalışan bir nginx servisi görmeniz gerekmektedir.
Nginx servisi aktif ve http:80 portunda yayın yapıyor. HTTPS:443 portunda çalışan bir uygulama yapabilmek adına çalışan güvenlik duvarı servisinizde bu portlara izin vermeniz veya güvenlik duvarını devre dışı bırakmanız gerekiyor. Benim güvenlik duvarım şuanda aktif değil ve sanal makinede çalışan Centos Sistemime SSH ile Windows üzerinde bağlıyım.
2 - Self - Signed Sertifika Oluşturma
Gerekli ayarları yaptıktan sonra https:443 portunda yayın yapan sertifikalı bir siteye sahip olmak için self-signed yani bir CA (Certificate Authority) tarafından imzalanmamış bir sertifika kurulumu yapacağız. Yazının ilerleyen bölümlerinde CA hakkında bilgilendirme yapacağım.
Önce sertifikanın ve key’lerin yer alacağı klasörleri oluşturun ve klasör izinlerini güvenlik açısından önem arz ettiği için yetkisiz erişimlerden korumak adına değiştirin.
Gerekli düzenlemeleri yaptıktan sonra OpenSSL ile SSL Sertifkasının ve Keyinin oluşturulması için aşağıdaki kodu yazıyoruz.
Burada, daha önce oluşturulan private klasörüne bir tane cosmonot-key adında bir 2048 Bit uzunluğunda RSA algoritmasına sahip key ve bir de ssl sertifikasını aynı anda oluşturduk. -days 365 parametresi kullanarak 1 yıllık bir sertifika tanımladık. -out parametresi sertifikanın yer alacağı klasörü, keyout parametresi ise oluşturduğumuz RSA anahtarının hangi dizinde yer alacağını gösteriyor. İlgili komutu çalıştırdıktan sonra sertifika tanımlamak için gelen bilgileri kendinize göre doldurabilrsiniz.
Sertifikayı başarılı bir şekilde oluşturduktan sonra Web sitesinin handshake esnasında güçlü ve güvenli bir kriptografik anahtar değişim yöntemi olan Diffie-Helman anahtar değişim yönetimini kullanacağız. Daha sonra Nginx ayarlarımızda tanımlamak üzere dosyayı oluşturuyoruz :
3 - Nginx Yapılandırması
Tüm sertifika ve key oluşturma işlemleri tamamlandıktan sonra nginx ayarlarını yeniden yapılandırıp ilgili sertifikayı tanımladıktan sonra HTTPS:443 Portundan yayın yapar hale getirmemiz gerekiyor.
/etc/nginx/conf.d klasörü altına bir yapılandırma dosyası oluşturuyoruz cosmonot-ssl.conf isminde bir ayar dosyası tanımladım.
Ayar dosyasının içeriğine daha önce oluşturduğumuz sertifikları dosya yolları ile birlikte set ediyoruz ve gerekli alanları dolduruyoruz.
Config dosyasının içeriğ şu şekilde olmalı:
Ayar dosyasını kaydedip çıktıktan sonra nginx syntax’ında bir hata olu oladığını kontrol etmek için
Komutunu çalıştırıyoruz.
Eğer syntax’ta bir hata yoksa ve başarılı bir çıktı aldıysanız gerekli ayarların eklenebilmesi için nginx servisini yeniden başlatıyoruz.
4 - Final
Buraya kadar her şeyin doğru ilerlemesi durumunda nginx servisi artık https:443 portuna tanımlamış olduğumuz TLS sertifikası ile cevap verecek.
TLS Handshake İşlemi
Bir web sitesi üzerindeki HTTPS bağlantısı 443 Portundan yayın yapar ve client, server olmak üzere iki taraf içerir. TLS Handshake işleminin amacı client ile server arasında güvenli iletişimin sağlanması adına uygun adımları izleyerek bir dizi kriptografik şifrelemeler sonucunda güvenli oturumu başlatmaktır. Client olarak bilinen en yaygın örnekler Mozilla, Chrome gibi tarayıcılar olmakla beraber server tarafına NGINX, Apache ve Windows Server gibi örnekler verilebilir. Yapılan Handshake işlemi sonucunda server ile client arasında, chiper suite’lerin ve parametrelerin değişimi, Kimlik doğrulama işleminin gerçekleştirilmesi ve simetrik oturum anahtarları oluşturma veya değiştirme işlemleri sağlanır. Handshake işlemi esnasında Server ve Client’ın haberleşmesi sonrasında iki taraf için de ortak olan ve en yüksek güvenlik düzeyi sunan Cipher Suite tercih edilerek handshake işlemi başlatılır.
- Client Hello
Handshake işleminini başlaması için tarayıcıdan TLS Sertifikasına sahip bir web sitesine giriş yapıldığında client’dan servar’a bir Hello mesajının gitmesiyle; protokol listesi, Client’ın desteklediği TLS Versiyonu, Desteklenen Chiper Suitler gibi bilgiler sağlanır ve saldırganların o anki oturumu taklit etmesini önleyen random byte’lar gönderir.
- Server Hello
Client Hello mesajının ardından sunucu tarafından ServerHello olarak cevap gelir. Server’dan gelen cevapta SSL Sertifikası, sunucunun seçtiği cipher suite ve sunucu tarafından oluşturulan bir başka random byte dizisi gönderilir.
- Kimlik Doğrulama İşlemi
Güvenli bir oturum sağlayabilmek adına yalnızca client ve server arasındaki verilerin şifrelenerek iletilmesi dışında, aktarılan bilgilerin doğru kişiye gönderilmesi de önem taşımaktadır. Bu yüzden Handshake işleminin kimlik doğrulama aşamasında istemci, sunucu tarafından sağlanan SSL Sertifikasının gerçek olup olmadığına dair birtakım kriptografik doğrulama işlemleri gerçekleştirir. Kimlik doğrulama adımında en çok kullanılan açık anahtar şifreleme algoritması RSA’dir. Bu aşamada client, server’ın sertifikaya ilişkin özel anahtarının olduğunu doğrular ve sertifikanın güvenilir bir CA (Certificate Authority)’den geldiğini onaylar. CA’ler Dijital sertifika otoritesidir ve tüm güvenilir SSL Sertifikaları yetkili bir dijital sertifika imzalama kurumu tarafından SSL sertifikalarının açık anahtarlarını kendi gizli anahtarları ile imzalayarak sertifikanın geçerlilik durumunu onaylarlar. X.509 Açık anahtar sertifikaları SSL/TLS Sertifikalarının imzalanması ve doğrulanması için CA’ler tarafından kullanılmaktadır. Bir SSL Sertifikası aynı zamanda X.509 Sertifikasyonunun en çok kullanılan şeklidir denebilir.
- Premaster Secret
Client Servar’dan gelen TLS Sertifikasının genel anahtarıyla şifrelediği bir rastgele byte dizisini yeniden Servar’a gönderir. Gönderilen rastgele byte dizisi yalnızca Servar tarafından özel anahtarla çözülebilir. Sonrasında server gelen mesajı özel anahtarlarını kullanarak okur.
- Oturum Anahtarları
Session Key yani oturum anahtarları yalnızca Client ve Server arasında başlayan oturum süreci içersinde geçerli olacak geçici anahtarlardır. Client ve Server arasındaki bir sonraki Session’lar yani oturumlar farklı anahtarlar ile şifrelenir. RSA Oturum anahtarları için asimetrik şifreleme kullanır. Asimetrik şifreleme esnasında şifrelemek ve şifre çözmek için iki farklı anahtar kullanılır. Haberleşen taraflarda bir private bir public olmak üzere birer anahtar çifti bulunur. Simetrik şifreleme algoritmasında tek anahtar bulunur.
- Client ve Server Hazır
İstemci ve Sunucu tarafından tüm şifreleme işlemleri tamamlandıktan sonra ikisinden de bir Bitti mesajı gönderilir ve oluşturulan oturum anahtarları ile oturum güvenli bir şekilde devam eder.
Mehmet Duygu
Digital Cosmonot Bilişim Danışmanlık Eğitim LTD. ŞTİ.
YORUMLAR