HTTPS Nedir ve Nasıl Çalışır?

SWB
10 min readDec 6, 2020

--

Bu yazı 10.09.2019 tarihinde kaleme alınmıştır.

HTTP ve HTTPS Nedir?

HTTP (The Hypertext Transfer Protocol ) ve HTTPS (Hypertext Transfer Protocol Secure), bir kaynaktan dağıtılan ve ortak kullanıma açık olan bilgi sistemleri için uygulama seviyesinde bir iletişim kuralıdır.

HTTP

HTTP, İnternette sunucular ve son kullanıcılar arasında bilgilerin nasıl aktarılacağına dair kurallar ve yöntemleri düzenleyen uygulama katmanında çalışan bir iletişim protokolüdür. Web sitesi görüntülemek ve üzerinde çeşitli işlemler yapmak için kullanılır.

Versiyonlarına Göre HTTP

HTTP/0.9 ve 1.0’da bağlantı tek bir “request-response” aşaması ardından kapanır. HTTP/1.1’de bağlantının birden fazla istek için kullanıldığı “keep-alive-mechanism” tanıtıldı. Böyle kalıcı bağlantılar sezilebilir gecikmeleri azaltır, çünkü istemci ilk istek yollandıktan sonra tekrar TCP bağlantısını onaylatmak zorunda kalmaz. Sürüm 1.1, HTTP/1.0’a göre bant genişliğini en uygun hale getirmiştir. Sunum 1.1’deki bir diğer geliştirme ise sunucunun, istemci tarafından açıkça istenilen kaynağın bir kısmını ilettiği “byte serving”dir. Bu da bant genişliği anlamında avantaj sağlamaktadır.

HTTP oturumu ağ üzerindeki “request-response” işleminin bir aşamasıdır. HTTP istemcisi istekte bulunur. İstemci belli bir port üzerinden TCP (Transmission Control Protocol) bağlantısı kurar (Genellikle 80. porttan). O port üzerinde dinlemekte olan HTTP sunucusu istemcinin istek mesajını bekler. İstek ulaştığında sunucu durum sinyalini geri döner. Sinyalde örnek olarak “HTTP/1.1 200 OK” ve ardından muhtemelen istenilen kaynağın gövde metni, hata mesajı veya bazı diğer bilgiler bulunabilir.

İstek Yöntemleri

HTTP istenilen eylemin tanımlanan kaynakta gerçekleşmesi için dokuz yol tanımlar.

GET: Belirtilmiş kaynağın ifadesini ister.

HEAD: “GET” isteğine karşılık gelen yanıtı ister, ama yanıtın gövdesini görüntülemez. Bütün içeriği taşımadan yanıt başlığındaki önbilgiye ulaşmak için kullanılır.

OPTIONS: Sunucunun belirtilmiş URL için desteklediği HTTP yöntemlerini döndürür.

POST: Tanımlanmış kaynağa işlenecek veriyi kaydeder. Veri isteğin gövde kısmında yer alır.

PUT: Belirtilmiş kaynağın temsil metnini yükler.

DELETE: Belirtilmiş kaynağı siler.

TRACE: İstemcilerin orta dereceli sunucularda değişiklik veya ekleme yapılıp yapılmadığını görmesi için ulaşan isteği yankılar.

CONNECT: Genellikle şifrelenmemiş HTTP vekili üzerinden SSL-şifreli (Secure Sockets) iletişime olanak sağlamak için, istek bağlantısını transparan TCP/IP tüneline dönüştürür.

PATCH: Kaynakta kısmi değişiklikler uygulamak için kullanılır.

HTTP sunucuları en azından GET, HEAD ve mümkünse OPTIONS metodlarını bulundurmalıdır.

HTTPS’in Anlaşılabilmesi İçin Bilinmesi Gereken Temel Kavramlar:

OSI (Open System Interconnection) Modeli

1984 yılında tüm dünyada bir standart olarak OSI modeli ortaya çıkmıştır. Çıkış sebebi ise üretilen elektronik cihazların birbirleri ile iletişiminin aynı paydada sağlanması ile iletişim kopukluklarının önüne geçilmesidir.

İki cihaz arasında iletişim sağlanırken eğer arada bir network cihazı varsa veri network cihazının Physical, Data Link ve Network katmanlarından geçerek hedefine gider.

Gönderilen veriler aşağı doğru paketlenir ve yukarıya doğru açılırlar.

  1. Physical Layer
  • Verilerin bit olarak gönderildiği kablo üzerindeki yapıdır.
  • Bit 0 ve 1’lerin tutulduğu en küçük veri depolama birimidir.
  • Bu katmanda veri bitlerinin karşı tarafa nasıl iletileceği tanımlanır.
  • Örneğin; kablo, fiber optik kablo, radyo sinyalleri gibi.
  • En basit network cihazlarından biri olan Hub bu katmanda çalışır ve görevi gelen 1 ve 0 paketlerini çoğaltarak diğer portlara yayar.

2. Data Link Layer

  • Fiziksel katmana nasıl erişileceğini belirleyen katmandır.
  • Veriler bu katmanda, ağ katmanından fiziksel katmana gönderilirler.
  • Bu katman ağ kartı üzerinde çalışmaktadır.
  • Ağdaki diğer bilgisayarları tanımlama, kablonun kim tarafından kullanıldığını tespit etme görevleri burada yerine getirilir.
  • Gönderici ve Alıcı MAC adresleri bu katmanda paketlenir.
  • Switch cihazı bu katmanda çalışır. Kısaca kendisine bağlı cihazların MAC adreslerini tanıyarak birbirleri ile iletişim kurmalarını sağlar.

3. Network Layer

  • Farklı bir ağa gidecek paketlerin adresleri bu katmanda bulunur.
  • IP protokolü bu katmanda çalışır. Gönderici ve alıcı adresleri bu katmanda işlenir.
  • Bu katmanda iki ağ arasındaki en ekonomik yoldan veri transferinin gerçekleşmesi sağlanır.
  • Yönlendirme, Ağ trafiği gibi işlemler burada yapılır.
  • Bu katmanda çalışan bir cihaz örneği vermek gerekirse Router’ı örnek verebiliriz.
  • Router farklı ağlar arasında veri iletimini sağlar, kapı ve yönlendirici görevi görür.

4. Transport Layer

  • Üst katmandan gelen verileri ağ paketleri boyutunda parçalara böler.
  • Bölünen parçaların adı “Segment”’dir.
  • Port bilgisi ve veri boyutu bu katmanda eklenir.
  • TCP ve UDP bu katmanda çalışır.
  • Hata kontrol mekanizması bu katmandadır. Verinin zamanında ve hatasız ulaşıp ulaşmadığı burada kontrol edilir.
  • Alt katmandan gelen verinin üst katmanlarla birleştirilerek çıkması işlemi burada gerçekleşir.

5. Session Layer

  • Cihazların aynı anda birden fazla bağlantı yapmasını sağlar.
  • Presentation katmanından gönderilecek veriler farklı oturumlarda birbirinden ayrılır.
  • NetBIOS, RPC, Sockets, Apple Talk gibi protokoller burada çalışır.

6. Presentation Layer

  • Session layer’la benzer bir yapıdadır.
  • İletilen bilgilerin kodlama/çözülme işlemlerinin yapıldığı katmandır.
  • Verinin karşı tarafın anlayacağı şekle geldiği katmandır.
  • GIF, TIFF, JPEG gibi fotoğraf kodlamaları bu katmandadır.
  • ASCII gibi karakter kodlamaları da bu katmanda çalışmaktadır.

7. Application Layer

  • Cihaz uygulamaları ile ağ arasında iletişim burada kurulur.
  • Kullanıcı ile cihazın buluştuğu noktadır.
  • SSH, Telnet, http, DNS, FTP gibi protokolleri kullanan uygulamalar (browser, PuTTY vs) bu katmanda çalışır.

SSL ve TLS

SSL (Secure Socket Layer), sunucu ile istemci arasında şifrelenmiş bir bağlantı oluşturmak amaçlı kullanılan bir güvenlik standandartıdır.

SSL sertifikaları, public ve private olmak üzere iki adet anahtar içerir. Bu anahtarlar sunucu ve istemci arasında güvenli bağlantı oluşturmada kullanılacaktır. Ayrıca sertifikalar web sitesinin sahibine ait bilgileri de barındırır.

Sertifika sahibi olmak için web sunucusunun bir “Sertifika İmzalama İsteği (CSR)” oluşturması gereklidir. Bu CSR oluşturma süreci sunucuda public ve private anahtarların oluşturulmasını sağlayacaktır. Güvenilir bir sertifika sağlayıcısına gönderilen CSR dosyası, sunucuya ait public anahtarı barındırmaktadır. Sertifika otoritesi tarafından bu CSR dosyasına ait sertifikayı oluşturur ve bu sertifika web sunucusuna yüklenir.

SSL Katmanları:

Dört katmandan oluşur.

- SSL Record Protocol- SSL Change Cipher Spec Protocol- SSL Alert Protocol- SSL Handshake Protocol

SSL’ in iki önemli konsepti, SSL session ve SSL Connection’dır. SSL Bağlantısı: Peer-to-peer ilişkili, geçici ve bir oturumla ilişkili iletişimdir.

SSL Oturumu: İstemci ve Sunucu arasındaki birleşimdir. Oturumlar Handshake Protokolü ile oluşturulur. Oturumlar, birden fazla bağlantı arasında paylaşılabilen kriptografik güvenlik parametrelerinin tanımlanmasını sağlar. Oturumlar maliyetli olan her bağlantıda kullanılacak olan güvenlik parametreleri anlaşma işleminden kaçınmak için oluşturulmuştur.

TLS (Transport Layer Security), iki iletişim uygulaması arasında veri gizliliği ve veri bütünlüğü sağlayan 1999 yılında geliştirilen bir güvenlik protokolüdür.

TLS, web sitelerinin güvenli iletişiminin sağlanması amacıyla istemci ve alıcı arasında verilerin şifrelenmesini sağlayan, Netscape‘in SSL güvenlik protokolünden evrimleşmiştir.

SSL ve TLS HTTPS’in güvenlik temelini oluşturan protokollerdir.

TLS’in Özellikleri:

  • Web Browser ile server arasında güvenli haberleşmeyi sağlar.
  • Asymmetric cryptography algoritmasını kullanarak key üzerinden verileri şifreler.
  • Veri şifrelemesinde HTTPS, SMTP, POP3, FTP gibi IP protokollerinin birçoğu tarafından desteklemektedir.
  • Günlük yaşamımızda biz farkında olmadan ağ üzerinden VPN bağlantıları, VoIP, anlık mesajlaşma vb. gibi işlemlerin web tarayıcılarında veya uygulamalarda güvenli bir şekilde yapılmasını sağlar.

TLS Katmanları:

İki katmandan oluşur.

  • TLS Record Protocol
  • TLS Handshake Protocol

Handshake Protokolü ile sunucu ve kullanıcıların kimlik doğrulamaları yapılır. Handshake, veri iletişimi yapılmadan önce şifreleme algoritmaları ile şifreleme anahtarlarına izin verirken; Record Protocol bağlantının güvenli olmasını sağlar.

SKE (Symmetric Key Encryption)

Simetrik şifrelemede ve şifre çözme adımlarında aynı anahtar kullanılır. AES, DES, 3DES, RC4 başlıca simetrik şifreleme yöntemlerindendir.

Simetrik şifrelemenin kendisine göre avantajları bulunmaktadır. Başlıca avantajları şu şekildedir:

  • Şifreleme ve şifreyi çözme işlemleri hızlıdır, donanımla gerçekleştirilmesi kolaydır.- Taraflar arasındaki iletişimin gizliliği sağlanır.
  • Verinin bütünlüğü sağlanır. Şifreli metin çözülemedikçe orijinal metin değiştirilemeyecektir.

Bunun yanında simetrik şifreleme sürecinin birtakım zorlukları da mevcuttur. Simetrik şifrelemenin sahip olduğu başlıca zorluklar şu şekilde sıralanabilir:

  • Anahtar saklamak zordur. (Key Storage Problem)
  • n kullanıcılı bir sistem için [n * (n-1) / 2 ] anahtar saklanmalıdır. Ölçeklendirilebilir değildir.
  • Güvenilir anahtar dağıtımı zordur. (Key Distribution Problem)
  • Kimlik doğrulama (authenticity) sağlamaz. Aynı anahtara sahip olan herhangi birisi tarafından veri şifrelenmiş olabilir.
  • Bütünlük sağlamaz. Ortadaki bir kişi tarafından veri değiştirilmiş olabilir.
  • Kimlik doğrulama ve bütünlük sağlamadığı için inkâr edilememezlik sağlamaz.

AKE (Assymetric Key Encyrption)

Asimetrik şifrelemede, şifrelemede ve şifre çözmede farklı anahtarlar kullanılır. Bu anahtarlar genel/açık (public) ve özel/kapalı/gizli (private) anahtar olarak geçmektedir.

İki anahtar için bilinmesi gereken birtakım hususlar bulunmaktadır:

  • Genel anahtar şifreleme ve doğrulama için kullanılırken, özel anahtar ise şifre çözme ve imzalama için kullanılmaktadır.
  • Alıcının genel anahtarı ile şifrelenen veri, sadece alıcının özel anahtarı ile açılabilir. Bu sebeple gönderici taraflar, alıcının genel anahtarı ile şifreleyerek veriyi gönderir. Bu şifreli verinin, sadece özel anahtara sahip alıcı tarafından okunabileceğinden emin olunur.
  • Göndericinin özel anahtarı ile imzalanan veri, alıcı ve herkes tarafından, göndericinin genel anahtarı ile doğrulanabilir. Bu sebepler gönderici taraf, kendi özel anahtarını kullanarak veriyi imzalar. Bu imzalı verinin, sadece özel anahtara sahip gönderici tarafından gönderildiğinden emin olunur.

Public Key Infrastructure

  • PKI kısaca HTTPS’teki Authenticity için kullanılan dijital sertifikaların üretilmesi, dağıtılması ve kimlik doğrulaması aşamasında kullanılabilmesi için gerekli altyapıyı sağlar.
  • PKI’da, CA (Certificate Authority) adı verilen üçüncü parti güvenilir kuruluşlar güvensiz ağ üzerinde iletişimde bulunmak isteyen bütün partiler (istemci, sunucu) için dijital sertifikalar üretirler. Bu sertifikaların içerisine sertifikanın verildiği partilerin Public Key’i koyulur. Bu noktadan sonra bir parti iletişimde bulunduğu bütün partilere kendi sertifikasını göndererek karşı taraf ile Public Key’ini paylaşılmış olur.
  • Güvensiz ağ üzerinden aldığı sertifikanın gerçekten beyan edilen partiye ait olup olmadığını doğrulamak isteyen istemci aşağıdaki şekildeki gibi sertifika üzerindeki imzaları hiyerarşi içerisinde en yukarı kök sertifikaya kadar takip eder.

Yukarıda verilen işlemde en yukarıda bulunan ve Root Certificate adı verilen sertifika kendisi tarafından imzalanmıştır. Kök sertifikalar işletim sistemi üreticileri tarafından işletim sistemlerine önceden yüklenirler. Chrome ve Internet Explorer bir sitenin sertifikasını kontrol ederken buldukları kök sertifikanın işletim sisteminin ilgili bölümünde bulunup bulunmadığını kontrol ederler. Firefox’ta kök sertifikalar kendi kurulumu ile gelir.

Diffie-Hellman Key Exchange

Açık anahtarlama sistemlerinden birisi olan bu yöntemde amaç herkes tarafından bilinen umumî bir şifre ile sadece iki kişinin bildiği anahtarları iki tarafa ulaştırmaktır.

Sistemin çalışma mantığı basit bir matematiksel gerçeğe dayanmaktadır buna göre g**ab = g**ba

Örnek:

Anahtar değişimi yapacak iki taraf da p=23 ve g=5 sayılarını kararlaştırıyorlar (bu sayılar iki taraftan da biliniyor ve umumî şifreler)

Alice hususî anahtarı olarak a=6, seçer ve Bob’a gönderir (g**a mod p)

  • 5**6 mod 23 = 8

Bob hususî anahtarı olarak b=15, ve Alice’e gönderir (g**b mod p)

  • 5**15 mod 23 = 19

Alice (gb mod p)a mod p denklemini hesaplar

  • 19**6 mod 23 = 2

Bob (ga mod p)b mod p denklemini hesaplar

  • 8**15 mod 23 = 2

Sonuçta gidip gelen bilgi 8 ve 19 olmaktadır. Ayrıca herkes tarafından umumî şifrelerde bilinmektedir. Ancak 2 anahtar değerini sadece Alice ve Bob bilebilmektedir. Bu da ancak şifreyi ilgili formülden geçirdikten sonra mümkün olmaktadır.

Son olarak Diffie-Hellman bölümünü Scott Hanselman’ın bir tweet’i ile bitirelim.

Yukarıdaki 6 bölümden oluşan temel bilgileri inceledikten sonra HTTPS kısmına geçebiliriz.

HTTPS

HTTPS, HTTP ile SSL/TLS (Secure Sockets Layer/Transport Layer Security) iletişim kurallarının şifrelenmiş iletişim ve güvenli tanımlama amacıyla birleşimidir. Varsayılan olarak 443’üncü porttan bağlantı kurar. Kısaca HTTPS standart HTTP protokolünün TLS şifrelemesi ile kaplanması anlamına geliyor.

HTTPS’in asıl amacı güvenli olmayan bir iletişim ağı üzerinden güvenli bir kanal oluşturmaktır. Bu yöntem hattı dinlemek isteyenlere karşı yeterli korumayı da teoride sağlar. Banka Web-sayfaları veya yüksek güvenlik gerektiren uygulamalarda tercih edilir.

HTTPS’e özgü güvenlik, tarayıcı yazılımıyla gelen başlıca sertifika sahiplerine dayanır. Bu, “Kime güveneceğimi söylemesi için sertifika sahibine güveniyorum.” demekle aynı şeydir. Bu yüzden bir Web sayfasına olan HTTPS bağlantısına yalnızca aşağıdakiler geçerliyse güvenilebilir:

  • Kullanıcının, tarayıcı yazılımının HTTPS’i düzgün bir şekilde önceden yüklenmiş sertifikalarla birlikte sağladığına güvenmesi.
  • Kullanıcının, sertifika sahibine sadece yasal Web sayfalarını yanlış yönlendirici isimler olmadan doğrulaması için güvenmesi.
  • Web sayfasının güvenilir yetkili tarafından imzalanan geçerli sertifika sağlaması. (Geçerli olmayan sertifika çoğu tarayıcıda uyarı verir.)
  • Sertifikanın Web sayfasını düzgün bir şekilde tanımlaması.

HTTPS ile temelde iki ana hedef gerçekleştirilir:

  • Ulaştığımız adresin gerçekte ulaşmaya çalıştığımız adres olduğundan emin olunması,
  • Sunucu ve istemci arasındaki trafiğin sadece bu iki taraf tarafından çözümlenebilecek şekilde şifrelenmesi.

Bu hedeflere ulaşabilmek için ilk yapılacak şey TLS bağlantısının kurulmasıdır. HTTP için kullandığımız istemci (çoğu durumda tarayıcımız) TLS bağlantısının kurulması için de aracılık eder. Taraflar aralarında aşağıdaki gibi anlaşırlar:

  • İstemci sunucuya bir “client hello” mesajı gönderir. Bu mesajda istemcinin desteklediği protokolün sürümü ve tercih ettiği kriptografik algoritmaların listesi bulunur.
  • İlk mesajı alan sunucu istemciye bir “server hello” mesajı gönderir. Bu mesajda ise istemciden aldığı listeden seçilen kriptografik algoritma ve oturum ID’si bulunur. Sunucu ayrıca sayısal sertifikasını da gönderir. Sunucunun istemciyi doğrulaması gereken durumlarda bir de “client certificate request” mesajı gönderilir ama biz bunun gerekmediğini varsayacağız.
  • Bu aşamadan sonrasına devam edilebilmesi için istemcinin sunucu sertifikasını onaylaması gerekir. Bir sunucu sertifikası aşağıdaki bilgileri içerir:
  • Sertifikanın sahibi,
  • Sertifikanın geçerli olduğu alan veya makine adı,
  • Sunucunun açık anahtarı,
  • Sertifikanın geçerli olduğu tarih aralığı,
  • Sertifikanın sayısal imzası.
  • Bu sertifika eğer istemcinin güvendiği bir Sertifika Otoritesi (CA) tarafından üretilmişse veya bu aşamada istemci sertifikayı güvenli bulursa sertifikanın onaylanması adımı geçilmiş olur. Aksi durumda iletişime devam edilmez. Tarayıcılarımızın bizi “bağlantı güvenli değil” diyerek uyardığı sayfaları gördüğümüz nokta burası oluyor.
  • Henüz sunucu ve istemci arasında yapılmasını planladığımız trafiğin başlamadığını unutmadan devam edelim. Bulunduğumuz durumda istemci sunucudan aldığı sertifikaya güvenebileceğini doğruladı ama sunucunun bu sertifikanın gerçek sahibi olduğunu henüz doğrulamış değil. Sunucu bu sertifikayı kendisiyle iletişime geçen herkese gönderdiği için bu sertifikayı ele geçişmiş herhangi bir taraf bizi yanıltıyor olabileceğinden bunu da doğrulaması gerekiyor. Bunun doğrulaması da sertifika içinde bulunan sunucunun açık anahtarıyla gerçekleştiriliyor. İstemci bu açık anahtarı kullanarak sunucuya bir veri gönderdiğinde ancak sunucu o açık anahtarla ilişkili gizli anahtara sahipse veriyi deşifreleyebilecektir.
  • Artık istemci ve sunucu bu açık anahtarı ve bir anahtar değişim algoritmasını kullanarak oturum boyunca verileri şifreli gönderip almak için bir ortak anahtar oluşturabilirler.
  • Simetrik şifrelemede kullanılacak anahtar oluşturulduktan sonra istemci sunucuya bir “finished” mesajını bu anahtarla şifreleyerek gönderir. Bu noktadan sonra taraflar aralarında simetrik şifreleme algoritmalarından birini kullanırlar.
  • Mesajı alan sunucu da aynı anahtarla şifreleyerek “finished” mesajını istemciye iletir. Böylece her iki taraf da şifrelemede kullanacakları bir ortak anahtar üzerinde anlaşmış ve birbirlerini doğrulamış olurlar.

Bu kadar uğraşının sonunda hala istemci sunucuya bir http GET isteği bile göndermiş değil. Sadece istemci ve sunucu arasında güvenli bir tünel oluşturuldu. Bu aşamadan sonra taraflar arasındaki iletişim standart HTTP’de olduğu gibi yapılacaktır ama arada gidip gelen bütün veri şifrelendiği için HTTP’de olduğu gibi üçüncü taraflara değil verinin görünmesi, ulaştığımız adresin bile görünmesi mümkün olmayacaktır.

Sonuç Olarak:

  • HTTPS, HTTP’nin gizli hale getirilmiş halidir.
  • Transport katmanının gizli hale getirilmesi amacı vardır.
  • İstemcinin, sunucunun kimliğini doğrulaması işlemi HTTPS’de mevcuttur.
  • Gizlilik, Transport Layer katmanı şifrelenerek sağlanır, bu açıdan bakılacak olursa içerik olarak HTTP’den çok farkı yoktur. (GET, PUT, POST vb)
  • İstemci, sunucu ile HTTP bağlantısı kurmadan önce SSL/TLS Handshake başlatır, TCP bağlantısı kurduktan sonra da SSL/TLS handshake başlatılır.
  • SSL/TLS mekanizması protokol bağımsız çalıştığı için herhangi iki protokol arasında da uygun şartlarda kullanılabilir.
  • Application katmanında hazırlanan veri Transport katmanına iletilirken SSL/TLS ile şifrelenir ve gönderilir. Alıcı da Transport katmanında SSL/TLS çözeceği için Application katmanının şifreleme mantığından haberdar olması gerekmez.

Kaynak:

bidb.itu.edu.tr/seyir-defteri/blog/2013/09/06/http-https

medium.com/@int0x33/day-51-understanding-the-osi-model-f22d5f3df756

get-itlabs.com/secure-socket-layer-ssl-nedir-nasil-kullanilir/

siberportal.org/blue-team/cryptography/basics-of-symmetric-encryption-and-asymmetric-encryption/

medium.com/@gokhansengun/pki-nedir-ve-nas%C4%B1l-%C3%A7al%C4%B1%C5%9F%C4%B1r-6f71db7a609e

bilgisayarkavramlari.sadievrenseker.com/2008/03/20/diffie-hellman-ahahtar-degisimi-key-exchange/

nyucel.com/2017/05/https-nasl-calsyor.html

--

--

SWB

Some Kind of Security Guy | Defender of Digital Privacy & Security 🫡 | #Cybersecurity | #Blockchain Security | Safeguarding the Decentralized Web 🌐