WebClient ile SSL Sertikifa ve Proxy Kullanımı

Geliştirdiğimiz uygulamaları test etmek için bazen periyodik HTTP Request ler yapmamız gerekebilir. Test ortamımız bazen bir proxy arkasında veya özel SSL sertifikalarıyla erişilebilir şekilde olabilir. Şirkette buna benzer bir durumla karşılaştım bugün ve öğrendiklerimi de hem hatırlamak için hem de paylaşmak adına yazmak istedim.

SSL Sertifikası Eklemek

SSL sertifikaları bir kaç çeşit olabiliyor, ancak hepsinin amacı kimlik doğrulaması sağlamak. Benim geliştirdiğim uygulama da Personal Information Exchange File (.p12) için ekleme vardı ancak not olarak diğer sertifikalar içinde kod satırı ekliyor olacağım.

Yukarıdaki kod parçasında görüleceği gibi direk sertifika eklemesi yapamıyoruz. Request yapılmadan hemen önce eklememiz gerekiyor. Bunun için WebClient sınıfından bir başka bir sınıf türetiyoruz ve GetWebRequest methodunu override ediyoruz. Request’ i direk alabiliyoruz ama bizim istediğimiz sertifika eklemek olduğu için HttpWebRequest elde etmemiz gerekiyor.

Bu kod parçasını ile sertifikayı Certificate özelliğine ekliyoruz ve Request başlamadan önce sertifika eklenmiş oluyor.

 Proxy Kullanımı

Test uygulamaları bazen lokal makinelerimizde çalıştırmamız gerekebilir.  IT şirketlerinin çoğunda hem belli engellemeleri sağlamak hem de ortak kullanılan verileri daha efektif kullanmak için Proxy Server kullanılmaktadır. Çoğu kişi için can sıkıcı olsa da aslında şirketin güvenliği için kullanılması gereken uygulamalardan biridir. 🙂

Uygulamamızın Proxy bilgilerini kullanabilmesi için;

şeklinde ufak bir parça eklemeniz yeterlidir. Bu sayede proxy üzerinden çıkış yapacak ve takılma olmadan teste devam edilebilecektir. Proxy’ e ihtiyacınız olup olmadığınızı anlamak için sistem ekibinizle konuşmanız veya uygulamanızı çalıştırdığınızda 407 Proxy Authentication Required hatası alıp almadığını görmeniz yeterlidir. Ama siz yine de sistem ekibinize sorarsanız daha iyi edersiniz ve unutmamak gerekir ki uygulama geliştirirken kendi login bilgilerinizle proxy tanımlaması yapmayınız (eğer tek kullanımlık ise sorun olmaz). Siz şirketten ayrıldığınız zaman hesabınız dondurulacak veya kapatılacak ve uygulamalar çalışmayacaktır, boşuna küfür yemeyin 🙂

Ek Bilgi

Yukarıdaki kodları direk çalıştırdığınızda bir sorun yaşamayabilirsiniz ancak bazı durumlarda – site içi yönlendirmelerin olduğu sayfalarda – Too many automatic redirections were attempted şeklinde bir System.Net.WebException alabilirsiniz. Bunu çözmenin yolu ise türetilen sınıf içinde bir CookieContainer eklenmesi. Bu aslında kullandığınız sınıfın tam bir browser gibi çalışmasını sağlayacak noktalardan bir tanesidir. Aynı şekilde sertifikayı tarayıcınızda tanımlayıp, proxy ayarlarınızı yaptıktan sonra sayfayı açtığınızda mutlaka açılan sayfa için cookie (çerez) atacaktır. CookieContainer ile istek yaptığımız sınıfın çerezleri kontrol edebilmesine izin vermiş oluyoruz.

Toplama

Eklentilerle birlikte yazdığımız bütün başlıkları toplamak gerekirse kod bloğunun son hali aşağıdaki gibi olacaktır. Fakat hatırlatmak isterim ki WebClient sınıfı IDisposable arayüzünden türetildiği ve memory üzerinde çok fazla yer kapladığı için using ile kullanılması veya işi bitince dispose edilmesi yararlı olacaktır.

Bu yazıdan sonra bir kaç tane daha özel ihtiyacı karşılayacak özellik eklemek aklıma geldi. Daha sonraki yazılarda SecureWebClient şeklinde güncelleme yapmak yerine bu sınıf için bir isim bulup o şekilde devam etmek daha hoş olacaktır (işin yoksa sınıfı için isim ara dur 😛 ).

Yorumlayın