GİB merkez sistemlerinde SSL/TLS versiyon güncellemeleri (örn. TLS 1.2 zorunluluğu) eski .NET uygulamalarını nasıl etkiler?
1 Cevap
Bu sorun, eski .NET Framework sürümleriyle modern güvenlik standartları arasındaki protokol uyumsuzluğundan kaynaklanmaktadır ve GİB gibi kamu kurumlarının sistemlerini güncel zafiyetlerden (örneğin POODLE, BEAST saldırıları) korumak için attığı standart ve zorunlu bir adımın sonucudur.
Gelir İdaresi Başkanlığı, iletişim güvenliğini sağlamak için artık sadece TLS 1.2 ve üzeri kriptografik protokolleri kabul etmektedir. .NET Framework 4.0 veya 4.5 gibi eski sürümler ise varsayılan (default) olarak TLS 1.0 veya SSL 3.0 gibi artık zafiyetli olduğu kanıtlanmış protokolleri kullanarak dış bağlantı (handshake) kurmaya çalışır. İşletim sistemi TLS 1.2'yi desteklese bile, .NET uygulamasının içindeki ServicePointManager.SecurityProtocol ayarı modern standartlara göre yapılandırılmadığı için GİB'in sunucuları bu zayıf bağlantı taleplerini reddeder (Handshake failure), siz de bahsettiğiniz 'Could not create SSL/TLS secure channel' hatasını alırsınız.
Bunu çözmek için uygulamanızın kodlarını tamamen baştan yazmanıza gerek yoktur, ancak API güvenlik katmanlarında ve uygulama yapılandırmasında birkaç kritik müdahale yapmanız şarttır. Birinci yöntem, eğer kaynak kodlarına erişiminiz varsa, uygulamanızın web isteklerini (HTTP request) oluşturduğu kod bloğunun en başına şu satırı eklemektir: ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;. Buradaki 3072 değeri, .NET'in eski sürümlerinde enum (sabit) olarak tanımlı olmasa bile TLS 1.2 protokolünü temsil eder ve uygulamanızı TLS 1.2 kullanmaya zorlar. Eğer kod müdahalesi şansınız yoksa, Windows Registry (Kayıt Defteri) üzerinden güçlü kriptografiyi sistem genelinde zorlayabilirsiniz. SchUseStrongCrypto kayıt defteri anahtarlarını (Hem 32-bit hem de 64-bit yolları için) aktif hale getirerek, .NET tabanlı uygulamaların işletim sisteminin desteklediği en yüksek güvenli protokolü (örneğin TLS 1.2) kullanmasını sağlayabilirsiniz. Ayrıca RDP veya diğer ağ olaylarını incelediğinizde (Event Viewer'da SChannel kaynaklı Event ID 36871 hataları), bu tür protokol uyuşmazlıklarının loglandığını net bir şekilde görebilirsiniz. Uzun vadede ise, adli bilişim incelemelerinde veya sızma testlerinde eski .NET versiyonlarının başka memory corruption veya deserialization zafiyetleri barındırma ihtimaline karşı sistemlerinizi güncel framework sürümlerine taşımanız kesinlikle önerilir.