Renegotiation Indication uzantısı (RFC 5746), TLS yeniden müzakeresini (renegotiation) güvenli hale getiren bir düzeltmedir. 2009'da duyurulan CVE-2009-3555 zafiyeti, yeniden müzakere sırasında araya giren saldırganın istemci isteğinin başına veri eklemesine imkân veriyordu.
Zafiyet nasıl işliyordu?
Eski TLS'te yeniden müzakere, önceki el sıkışmayla kriptografik olarak bağlı değildi. Saldırgan önce kendi bağlantısını kurup bir istek başlatıyor, ardından gerçek istemcinin el sıkışmasını bu bağlantıya yönlendiriyordu. Sunucu, saldırganın eklediği veriyle kullanıcının verisini aynı istek akışı içinde birleştirebiliyordu ("prefix injection").
Uzantının çözümü
Yeniden müzakereye girerken istemci ve sunucu, önceki el sıkışmanın verify_data değerini yeni el sıkışmada renegotiation_info uzantısında karşılıklı doğrular. Değerler uyuşmazsa bağlantı kesilir. İlk el sıkışmada uzantının boş gönderilmesi, tarafın güvenli yeniden müzakereyi desteklediğini belirtir.
Kontrol etme
openssl s_client -connect example.com:443 -tls1_2 -servername example.com < /dev/null 2>/dev/null | grep -i "Renegotiation"
Beklenen çıktı: Secure Renegotiation IS supported. testssl.sh gibi araçlar ayrıca istemci tarafından başlatılan yeniden müzakerenin açık olup olmadığını da raporlar.
Sunucu önerileri
- Sunucu yazılımını ve OpenSSL'i güncel tutun; güvenli yeniden müzakere modern sürümlerde varsayılandır.
- İstemci kaynaklı yeniden müzakere, bir hizmet reddi vektörü olabileceği için mümkünse kapalı olmalıdır. Nginx bunu zaten desteklemez; Apache'de eski güvensiz yeniden müzakereyi açan
SSLInsecureRenegotiationyönergesi kapalı (off) kalmalıdır. - TLS 1.3 yeniden müzakereyi tamamen kaldırmıştır; oturum içi anahtar güncelleme (KeyUpdate) ve sonradan kimlik doğrulama farklı mekanizmalarla yapılır.
Yeniden müzakere ayarınızı SSL denetleme aracıyla inceleyebilir, sorun yaşarsanız SSL sorun giderici sayfasına başvurabilirsiniz.