HttpWebRequest ve SSL Sertifika Hataları Nasıl Yoksayılır
Bugünlerde uygulama geliştirirken çoğumuz webservislere ulaşıyoruz. Fakat son zamanlarda güvenlik kaygılarınında artmasıyla eskiden hızlı olması için http üzerinde yayınlanan servisleri https geçirmekle uğraşıyoruz.Bunun yanında süresi dolan sertifikaların zamanında yenilenmemeside ayrı bir sorun olarak önemüzde duruyoru. Aslında çok kolay olması gereken bu işlem yapıldığında aşağıdaki hatayı alıyoruz. Bunun nedeni sunucuların doğru yapılandırılmaması ve .Net framework’ün kendisininde ince eleyip sık dokumasından dolayı servislerimizi https geçirip istemci tarafında da çağrımında sorun yaşıyoruz. Bunun asli sebebi ise .Net Framework’ünün http istemcisi tarafında sunucunun sertifikasını doğrulayamamasıdır. Ama aslı sorunumuz bu sunucular üzerinde yapacak bir şeyimiz olmaması ama servislere ulaşmanın şart olmasıdır.
1 2 3 4 5 6 7 |
Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure. |
Peki Web isteklerimizi yapan HttpWebRequest’e sertifika hatalarını yok saymasını nasıl söyleriz? Endişe etmeyin çok zor bir işlem değil bunu ufak bir kod satırıyla halledebiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class SSLValidator { private static void TrustSertificate() { System.Net.ServicePointManager.ServerCertificateValidationCallback = OnValidateCertificate; } private static bool OnValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; // daima kabul et } } |
Yukarıdaki sınıfı kullanarak servis çağırımından önce TrustSertificate() metodunu çağırarak sertifika denetimini geçebiliriz. Dikkat ederseniz OnValidateCertificate() metodunda daima güven şeklinde şeklinde bir kurgu yaptık. Bu işlem yapılırken sertifika denetimlerini atladıgınızı unutmayın. Bundan dolayı bu kısmı özellikle dışarıdaki sunuculara veya sizin denetiminizde olmayan sunucularda kullanırken dikkatli olmanızı veya bu metodu kendi sisteminize göre uyarlamanızı tavsiye ediyorum. ServerCertificateValidationCallback için detaylı bilgiyi msdn üzerinden edinebilirsiniz.
Sürç-i lisan ettiysek affola
Kubilay
Kaynaklar
Microsoft