Tarayıcınızda o asma kilit ikonunu her gördüğünüzde, iki bilgisayar gizli bir el sıkışma gerçekleştiriyor. Ortak bir gizli anahtarda anlaşıyorlar; ama o anahtarı internete hiç göndermeden. Ve tarayıcınız, sunucunun gerçekten iddia ettiği kişi olduğunu doğruluyor.
Bu yazı, tam olarak bunun nasıl çalıştığını anlatıyor: HTTPS, TLS handshake, anahtarlar ve sertifikalar. Adım adım.
Problem: Düz HTTP Okunabilir
HTTP, her şeyi düz metin olarak gönderiyor. Şifreniz, mesajlarınız, kart numaranız; hepsi.
Bu metin, kontrolünüzde olmayan birçok router, wifi erişim noktası ve ağdan geçiyor. Aradaki herkes onu okuyabilir. Daha kötüsü, değiştirebilir de.
HTTPS üç şeyi aynı anda çözüyor:
- Gizlilik: aradaki hiç kimse verinizi okuyamıyor.
- Kimlik: sunucunun sahte değil, gerçek sunucu olduğunu biliyorsunuz.
- Bütünlük: hiç kimse veriyi siz fark etmeden değiştiremiyor.
HTTPS’teki “S”, TLS (Transport Layer Security) adlı bir güvenlik katmanı.
İki Tür Şifreleme
Veriyi korumak için şifreleme kullanıyoruz. İki tür var ve HTTPS ikisini de kullanıyor.
Simetrik şifreleme, tek bir paylaşılan anahtar kullanıyor. Aynı anahtar veriyi hem kilitliyor (şifreliyor) hem açıyor (çözüyor). Çok hızlı. Ama bir sorun var: her iki tarafın da aynı anahtara ihtiyacı var. Anahtarı internetten gönderemezsiniz, çünkü izleyen biri onu kopyalayabilir.
Asimetrik şifreleme, bir çift anahtar kullanıyor: bir genel anahtar (public key) ve bir özel anahtar (private key). Genel anahtarla kilitlenen veri, yalnızca eşleşen özel anahtarla açılabiliyor. Genel anahtar herkesle paylaşılabilir. Özel anahtar gizli kalıyor. Bu güçlü bir yöntem ama yavaş.
HTTPS ikisini birleştiriyor. Bağlantıyı güvenli şekilde kurmak için yavaş asimetrik yöntemleri (bir anahtar değişimi ve dijital imzalar) kullanıyor. Sonra gerçek konuşma için hızlı simetrik şifrelemeye geçiyor.
Anahtar Değişimi: Göndermeden Paylaşılan Bir Sır
İşte akıllıca olan kısım. İki yabancı, hiç göndermeden, herkesin gözü önünde nasıl gizli bir anahtarda anlaşabiliyor?
Boya karıştırmayı düşünün.
- Her iki taraf da aynı ortak renkle başlıyor. Herkes onu görebiliyor.
- Her taraf özel olarak gizli bir renk seçip karıştırıyor. Sonra karışımı gönderiyorlar.
- Bir dinleyici her iki karışımı da görüyor. Ama boyayı “geri karıştırıp ayrıştırarak” gizli renkleri bulamıyorsunuz.
- Her taraf kendi gizli rengini bir kez daha karıştırıyor. İki taraf da tam olarak aynı son renkte buluşuyor.
O son renk, paylaşılan sır. Her iki taraf da onu aynı oturum anahtarlarına çeviriyor. Gerçek hayatta bu boya değil, matematik. Bu fikre anahtar değişimi (key exchange) deniyor (örneğin Diffie-Hellman). Sonuç aynı: her iki uç da aynı anahtarı hesaplıyor ve izleyen biri onu yeniden üretemiyor.
Sertifikalar: Kimliği Kanıtlamak
Hâlâ bir tehlike var. Ya sunucu sahtekârsa?
Burada sertifikalar devreye giriyor. Bağlandığınızda sunucu, tarayıcınıza bir sertifika gönderiyor. Bunu dijital bir kimlik kartı gibi düşünün. “Ben yourbank.com’um” diyor ve tarayıcınızın zaten tanıdığı güvenilir bir şirket olan bir Sertifika Otoritesi (CA) tarafından imzalanmış.
Tarayıcınız iki şeyi kontrol ediyor: sertifikanın zaten tanıdığı güvenilir bir otoriteye kadar zincirlendiğini ve sertifikadaki ismin ziyaret ettiğiniz siteyle eşleştiğini. İkisi de geçerse bağlantı devam ediyor. Sahte bir sunucu geçerli bir sertifika gösteremezse, tarayıcınız onu engelliyor ve bir uyarı gösteriyor:
Bağlantınız gizli değil
Bu, “ortadaki adam"ın bankanızmış gibi davranmasını engelleyen şey.
TLS Handshake, Adım Adım
Şimdi hepsini birleştirelim. Handshake, herhangi bir gerçek veri gönderilmeden önce gerçekleşiyor.
- Client Hello: tarayıcınız merhaba diyor ve anahtar değişiminin kendi kısmını gönderiyor.
- Server Hello: sunucu merhaba diyor, anahtar değişiminin kendi kısmını gönderiyor ve sertifikasını iletiyor.
- Doğrulama ve türetme: tarayıcınız sertifikayı kontrol ediyor. İki taraf da anahtar değişimini kullanarak aynı gizli anahtarı hesaplıyor.
Modern TLS’te (TLS 1.3), bu genelde tek bir gidiş-dönüşte tamamlanıyor. Sonunda:
- İki taraf da ağ üzerinden hiç geçmemiş paylaşılan bir gizli anahtara sahip oluyor.
- Tarayıcınız kiminle konuştuğundan emin oluyor.
Handshake’ten Sonra
Bu noktadan itibaren bağlantı, paylaşılan anahtarı kullanan hızlı simetrik şifrelemeye geçiyor.
Her istek ve yanıt artık:
- Mühürlü: aradaki kimse tarafından okunamıyor.
- Değişikliğe karşı korumalı: herhangi bir değişiklik fark ediliyor.
Asma kilit ikonu, bunların hepsinin başarıyla tamamlandığı anlamına geliyor: kimlik kontrol edildi, anahtarda anlaşıldı, kanal şifrelendi. Herhangi bir adım başarısız olsaydı, bunun yerine bir uyarı görürdünüz.
Kendiniz Deneyin
Terminalinizden gerçek bir TLS bağlantısını inceleyebilirsiniz.
Bir sunucunun sunduğu sertifikayı görüntüleyin:
# Sertifika zincirini ve bağlantı detaylarını gösterir
openssl s_client -connect example.com:443 -servername example.com
Ya da handshake ve sertifika bilgisini görmek için curl kullanın:
# -v TLS handshake'i yazdırır; grep sadece güvenlik satırlarını tutar
curl -v https://example.com 2>&1 | grep -iE "SSL|TLS|subject|issuer"
TLS sürümünü, sertifikanın subject‘ini (domain) ve issuer‘ını (sertifikayı imzalayan Sertifika Otoritesi) arayın.
Türkiye’de HTTPS: Let’s Encrypt ve KVKK Bağlantısı
HTTPS bugün artık bir “isteğe bağlı ekstra” değil; hem Google’ın sıralama sinyali olarak hem de tarayıcıların şifresiz siteleri açıkça “Güvenli Değil” diye işaretlemesi yüzünden pratikte zorunlu. İyi haber: ücretsiz bir Sertifika Otoritesi olan Let’s Encrypt sayesinde, herhangi bir domain sahibinin sertifika için ödeme yapması gerekmiyor; certbot gibi araçlarla sertifikayı kurup otomatik yenilemeyi birkaç komutla halledebiliyorsunuz.
Bunun Türkiye’deki site sahipleri için KVKK açısından da dolaylı bir önemi var: KVKK’nın kendisi HTTPS kullanımını doğrudan zorunlu kılmasa da, kanunun 12. maddesindeki “veri güvenliğini sağlamak için gerekli her türlü teknik tedbiri alma” yükümlülüğü, kullanıcı formu, giriş ekranı ya da ödeme adımı olan herhangi bir site için HTTPS’i pratikte asgari bir gereklilik haline getiriyor. Bir sızıntı durumunda şifresiz bir bağlantı üzerinden veri toplandığının tespit edilmesi, “gerekli teknik tedbir alınmadı” savunmasını çok zayıflatır. Bir sunucuyu sıfırdan kurup Let’s Encrypt ile HTTPS’i etkinleştirme adımlarını Ubuntu 24.04’te Nginx Kurulumu yazısında adım adım bulabilirsiniz.
Öğrendikleriniz
- Düz HTTP, ağ yolundaki herkes tarafından okunabilir.
- HTTPS, bağlantıyı kurmak için asimetrik şifreleme, ardından hızlı simetrik şifreleme kullanıyor.
- Bir anahtar değişimi, iki tarafın gizli anahtarı hiç göndermeden anlaşmasını sağlıyor.
- Sertifikalar ve Sertifika Otoriteleri, sunucunun kimliğini kanıtlıyor.
- TLS handshake her şeyi bir araya getiriyor; tek bir gidiş-dönüşte.