Record Protocol, TLS'in en alt katmanıdır: üst katmandaki tüm mesajları (el sıkışma, uyarı, uygulama verisi) parçalara böler, korur ve TCP üzerinden taşır. Handshake tamamlandıktan sonra verinin güvenliğini sağlayan katman budur.
Kayıt yapısı
Her kaydın 5 baytlık başlığı vardır: içerik türü (1 bayt), eski sürüm alanı (2 bayt) ve uzunluk (2 bayt). Başlıca içerik türleri:
20: ChangeCipherSpec21: Alert22: Handshake23: Application Data
Bir kaydın düz metin yükü en fazla 2^14 (16384) bayt olabilir; daha büyük veri parçalara ayrılır.
Kaydın korunması
- Veri parçalara bölünür (fragmentation).
- TLS 1.2'de isteğe bağlı sıkıştırma tanımlıdır ama saldırı riski (CRIME) nedeniyle kullanılmaz; TLS 1.3 sıkıştırmayı kaldırmıştır.
- Seçilen pakete göre AEAD ile şifrelenir ve kimlik doğrulama etiketi eklenir. Nonce, kayıt sıra numarasından türetilir; bu sayede yeniden oynatma ve sıra değiştirme fark edilir.
TLS 1.3'te şifrelenmiş kayıtların dıştaki türü her zaman 23 görünür; gerçek içerik türü şifreli yükün içinde taşınır. Böylece ağdaki gözlemci el sıkışma ile veri kayıtlarını birbirinden ayıramaz.
Kayıtları gözlemleme
openssl s_client -connect example.com:443 -servername example.com -msg < /dev/null
-msg seçeneği, gönderilen ve alınan kayıtları ve mesaj türlerini yazdırır. Daha ayrıntılı analiz için Wireshark'ta tls.record.content_type filtresi kullanılabilir.
Pratik çıkarımlar
- Çok küçük kayıtlar ek yük yaratır; sunucular yük büyüklüğünü performans için ayarlar.
- "bad_record_mac" uyarısı, kaydın doğrulanamadığını belirtir (bozuk veri veya anahtar uyuşmazlığı).
Yapılandırmanızı SSL denetleme aracıyla kontrol edebilir, TLS alt konuları için bilgi bankasına göz atabilirsiniz.