İnternet erişiminde kullanılan proxy, istemci adına hedef sunucuya bağlantı kuran aracıdır. HTTPS, web iletişiminde kullanılan HTTP mesajlarını TLS güvenlik protokolüyle şifreleyerek korur. Proxy'nin neleri görebildiği, yalnız şifreli veriyi aktarmasına veya TLS bağlantısını kendi üzerinde sonlandırıp içeriği incelemesine göre değişir.

CONNECT, istemcinin proxy üzerinden belirli bir hedefe tünel açmasını isteyen HTTP yöntemidir. Yalnız bu tüneli aktaran proxy, hangi hedefe bağlantı kurulacağını ve bağlantının başlama zamanı, süresi ve taşınan veri miktarı gibi bilgileri görebilir; fakat tarayıcı ile hedef site arasındaki TLS oturumunun içindeki HTTP içeriğini okuyamaz. TLS inspection adı verilen içerik incelemesinde durum değişir: cihaz, proxy'nin hedef siteler adına sunduğu sertifikalara güvenecek şekilde yapılandırılır ve proxy iki ayrı TLS oturumu arasında HTTP içeriğini çözebilir.

Sıradan CONNECT Tünelinde Proxy'nin Gördüğü Bilgiler

Bir istemci, adresi ayarlarında tanımlanmış bir HTTP proxy üzerinden HTTPS hedefine ulaşırken CONNECT yöntemiyle tünel açılmasını isteyebilir. İstekte hedef sunucu adı veya IP adresi ile hedef hizmetin port numarası belirtilir. Port, aynı IP adresindeki ağ hizmetlerinin ayrılmasında kullanılan numaradır. Proxy'nin istemcide tanımlı olması, herkesin erişimine açık olduğu anlamına gelmez.

CONNECT hedefi, kaynağın web adresi olan URL'nin tamamı değildir. URL yolu, alan adından sonra gelen kaynak yoludur; sorgu parametreleri ise ? işaretinden sonraki değerlerdir. Proxy tüneli açmak için sunucu adı veya IP adresi ile port bilgisini alır; belirli bir sayfa yolu veya sorgu parametresi CONNECT hedefinin parçası değildir. Bu ayrım önemlidir: proxy hedef adını veya IP adresini bildiği halde, tünelin içindeki HTTPS isteğini çözemiyorsa kullanıcının hangi sayfa yolunu açtığını doğrudan okuyamaz.

Tünel başarıyla kurulduğunda proxy, iki bağlantı arasında veri aktarır. TLS oturumu ise istemci ile hedef sunucu arasında kurulur. Bu durumda proxy şifreli TLS kayıtlarını taşır ancak içlerindeki asıl HTTP isteğini ve yanıtını düz metin olarak elde etmez.

Proxy tünelin içeriğini okuyamasa da bağlantının kendisini gözlemleyebilir. Bağlantının ne zaman başladığını ve bittiğini, yaklaşık ne kadar veri taşındığını, bağlantının hangi hedefe yöneltildiğini ve bazı hata durumlarını kaydedebilir. TLS içerik gizliliği sağlar ancak aktarılan verinin uzunluğunu bütünüyle saklamaz; bu nedenle trafik miktarı ve zamanlama gibi özellikler gözlemlenebilir.

İstemci ile proxy arasındaki bağlantı da HTTPS ile şifrelenebilir. Bu dış TLS bağlantısı, CONNECT hedefini aradaki ağ gözlemcisinden korur; fakat CONNECT isteğini alan proxy'den gizlemez. Proxy bağlantısının HTTPS kullanması, tünelin içindeki hedef site bağlantısına TLS inspection uygulandığı anlamına gelmez.

CONNECT Tüneli ile TLS Inspection Arasındaki Görünürlük Farkları

Sıradan CONNECT tüneli ile TLS inspection arasındaki temel fark, proxy'nin TLS uç noktası olup olmamasıdır. Aşağıdaki karşılaştırma, aynı HTTPS isteğinde görünürlüğün nasıl değiştiğini gösterir.

Bilgi veya içerikSıradan CONNECT tüneliTLS inspection
Hedef sunucu adı veya IP adresi ve portGörürGörür
Bağlantı zamanı ve veri miktarıGözlemleyebilirGözlemleyebilir
URL yolu ve sorgu parametreleriGöremezİnceleyebilir
HTTP istek ve yanıt başlıklarıGöremezİnceleyebilir
İstek ve yanıt gövdesiGöremezİnceleyebilir
HTTP durum koduHedef sunucunun HTTPS yanıtındaki kodu göremezİnceleyebilir

Buradaki “göremez” ifadesi, proxy'nin tünelin içinde taşınan HTTPS içeriğini düz metin olarak okuyamadığını belirtir. Proxy'nin kendi CONNECT yanıtı, kimlik doğrulama işlemi veya tünel kurulmadan önce oluşan proxy hataları ise ayrı bir katmandadır ve proxy tarafından bilinir.

TLS Inspection Sırasında Proxy TLS Uç Noktası Olur

TLS inspection uygulanan bir yapıda proxy yalnız şifreli veriyi aktaran bir ara nokta değildir. İstemcinin kurduğu TLS oturumu proxy'de sonlanır; proxy de hedef sunucuyla ikinci bir TLS oturumu oluşturur. Böylece proxy şifreli akışı çözer, politika uygular ve veriyi yeniden şifreleyerek diğer bağlantıya gönderir.

Bu modelin çalışması için istemcinin, proxy tarafından hedef siteler adına sunulan sertifikaları güvenilir kabul etmesi gerekir. Kurumsal ortamlarda bu genellikle yönetilen cihaza kurumun kök sertifikasının eklenmesiyle sağlanır. Bu güven kurulmamışsa istemci sertifikayı doğrulayamaz ve bağlantı hata verebilir. Kök sertifikaya güvenmek tek başına yeterli değildir; sunulan sertifikanın hedef alan adı, geçerlilik süresi ve uygulamanın diğer doğrulama koşulları da uygun olmalıdır.

TLS Inspection için Sertifika Güveni Neden Gereklidir?

HTTPS'in korunması yalnız verinin şifrelenmesine değil, karşı tarafın kimliğinin doğrulanmasına da dayanır. TLS inspection sırasında istemci artık hedef sitenin doğrudan sertifika zincirini değil, araya giren kurumun kök sertifikasına dayanan sertifika zincirini doğrular. Bu nedenle proxy'nin içeriği okuyabilmesi için yalnız ağ yolunda bulunması yeterli değildir; istemcinin bu yeni TLS uç noktasını güvenilir sayması gerekir.

Bazı uygulamalar ek sertifika doğrulama mekanizmaları kullanabilir veya kurumsal sertifika zincirini kabul etmeyebilir. Böyle bir durumda TLS inspection sessizce çalışmak yerine bağlantının başarısız olmasına yol açabilir. Sonuç uygulamanın ve kurum yapılandırmasının ayrıntılarına bağlıdır.

TLS Inspection ile Görülebilen HTTP İçeriği

Proxy, TLS oturumunu kendi üzerinde sonlandırdığında HTTPS içindeki HTTP mesajlarını düz metin olarak işleyebilir. Proxy, yapılandırmaya bağlı olarak istek yöntemini, URL yolunu, sorgu parametrelerini, istek başlıklarını, çerezleri, gönderilen içeriği, yanıt durum kodunu, yanıt başlıklarını ve sayfa ya da uygulamaların birbiriyle veri alışverişini sağlayan API yanıtını görebilir.

Bu, proxy'nin her uygulama verisini mutlaka anlamlandırabileceği anlamına gelmez. HTTPS'in içinde ayrıca uygulama seviyesinde şifrelenmiş bir veri taşınıyorsa proxy TLS katmanını çözse bile bu ikinci şifreleme katmanındaki asıl içeriği okuyamayabilir. Yapılandırma ayrıca hangi alanların kaydedileceğini, filtreleneceğini veya yalnız geçici olarak işleneceğini belirler.

URL'de # işaretinden sonraki fragment bölümü, tarayıcının sayfa içinde belirli bir konuma gitmesi gibi istemci tarafındaki işlemler için kullanılır ve normal HTTP isteğinin hedefinde gönderilmez. Ancak sayfadaki bir betik bu değeri ayrı bir isteğe eklerse veya sunucu fragment içeren bir yönlendirme adresini yanıtta verirse, TLS inspection yapan proxy aktarılan bu bilgiyi görebilir.

Bir Proxy'nin HTTPS İçeriğini İncelediği Nasıl Anlaşılır?

Bir proxy'nin ne görebildiğini değerlendirirken yalnız “HTTPS kullanılıyor mu?” sorusuna bakmak yeterli değildir. Asıl ayrım, bağlantının proxy üzerinden şifreli bir tünel olarak mı geçtiği yoksa proxy'nin istemci açısından TLS uç noktası haline mi geldiğidir.

  1. Bağlantının istemcide tanımlı bir proxy üzerinden CONNECT tüneliyle kurulup kurulmadığını belirleyin. Proxy ayarı görünmese bile ağ tarafında trafiğe aracılık eden bir sistem bulunabilir.
  2. Cihazın güvenilir sertifika deposunda kurum veya ağ yöneticisi tarafından eklenmiş bir kök sertifika bulunup bulunmadığını kontrol edin. Sertifikanın depoda bulunması, incelenen bağlantıda mutlaka kullanıldığı anlamına gelmez.
  3. HTTPS bağlantısının sertifika zincirinde kuruma ait bir kök veya ara sertifika görünüp görünmediğine bakın.
  4. Yönetilen ağın güvenlik politikasında TLS inspection veya HTTPS incelemesi uygulanıp uygulanmadığını doğrulayın.

Sertifika uyarısı tek başına TLS inspection kanıtı değildir; başka bir alan adı için düzenlenmiş, süresi dolmuş, zinciri eksik veya güvenilmeyen bir sertifika da uyarı oluşturabilir. Tersine, istemci kurum sertifikasına güvenecek şekilde yönetiliyorsa TLS inspection uygulanan bağlantı sertifika doğrulamasını başarıyla geçebilir. Sertifika uyarısını aşmayın ve kaynağını doğrulamadığınız bir kök sertifikayı yüklemeyin; yönetilen cihazdaki beklenmedik durumu ağ yöneticisine bildirin.