HTTP/2 Kısa Bakış

Hızlı gelişen internet ve iletişim teknolojileri, dünyada internet ile özdeşleşen ve en yaygın kullanılan protokol olan HTTP için de yenilenmeyi zorunlu hale getirdi. En son 17 yıl önce 1.1 sürümü duyurulan HTTP için 2.0 sürümü için protokol tanımları RFC 7540 ile tanımlanıyor.

En yaygın protokol olması sebebiyle saldırganlar tarafından en yaygın kullanılan atak yüzeylerinden birisi olan HTTP yeni sürümüyle gelen değişiklikler güvenlik çalışmalarında da bazı değişiklikler gerektirecek.

Öncelikle HTTP/2 ile birlikte gelen yeniliklere göz atalım.

  • En temel yeniliklerin başında işlem bütünleştirme (transaction multiplexing) geliyor. HTTP protokolünde TCP iletişimi başına bir HTTP isteği yapılabilmekteyken, HTTP/2 ile birlikte aynı TCP iletişimi üzerinden düzensiz olarak birden fazla istek gönderip cevap alabilir. Bu sayede her bir istek için ayrı bir TCP iletişimi kurma işlemi gerçekleştirilmesine gerek kalmaz ve performans kazancı sağlanır.
  • HTTP/1 ve HTTP/1.1’den farklı olarak itekler ve cevaplar metin tabanlı değil, binary tabanlı. Böylelikle metin içerisindeki özel karakterler, satır sonları, boş karakterler vb. gibi uygulamalara göre farklılık gösterebilen durumları standardize edebilecek.. Tabi bunun pratikte bir dezavantajı var, eskisi gibi sadece netcat veya telnet ile HTTP servisine bağlanıp HTTP oturumu açmak mümkün olmayacak.
  • Bir diğer özellik ise iletişimin artık sadece istemci tarafından sağlanmak zorunda olmaması. HTTP protokolünde bilindiği gibi istemci mutlaka bir istek yapmalı ve buna istinaden gelen cevabı işlemeliydi. HTTP/2 ile birlikte sunucu da kendisine bağlı olan istemciye veri PUSH edebilecek. Yani tarayıcı ilk GET isteğini yorumlayıp da içerisinde sayfayı görüntülemek için ihtiyacı olan diğer elementleri (resim, CSS dosyası gibi) anlayıp bunlar için ayrıca bir GET isteği daha yapmasına gerek kalmadan, sunucu istemciye ilk GET ile birlikte bu dosyaları da iletebilecek.
  • Bir diğer özellik de istek başlıklarındaki verilerin sıkıştırılması ve bu sayede çerez, oturum, tarayıcı kimliği gibi verilerin daha az yer tutarak iletilmesi.

Mozilla, Firefox tarayıcısınd HTTP/2’yi sadece TLS şifrelemesi üzerinden destekleyeceğini duyurdu, yüksek ihtimalle Chrome da benzer bir güvenlik zorunluluğu getirecektir. Kendi içerisinde bir şifreleme entegrasyonu olmasa da TLS’i zorunlu tuttuğu sürece HTTP/2 yaygınlaştıkça tüm web trafiği de TLS ile şifreleneceği anlamına geliyor elbette.

Protokollerden ziyade protokollerin implementasyonlarından (hem sunucu hem de istemci tarafında) güvenlik açıkları çıkması çok yaygın. Bunu özellikleve can alıcı şekilde SSL impelemtasyonu olan OpenSSL’de çıkan “Heartbleed” zafiyetinde yaşadık. Her yeni protokol değişikliği bu sebeple biraz ürkütücü geliyor.