Makale Özeti

İletişim olanaklarının artması ile orantılı olarak bu iletişimin güvenliğini sağlamakta zorlaşıyor ve önem kazanıyor. Bulunduğumuz noktada iletişim ağırlıklı olarak web üzerinden gerçekleştirildiği için web sunucularının sağladığı güvenlik özellikleri, gün geçtikçe performans özelliklerinden daha önemli hale geliyor. SSL teknolojiside günümüz güvenlik stratejilerinin vazgeçilmez bir parçası halini almış durumda. Tam bu noktada ____ IIS üzerinde SSLi nasıl kullanabileceğimizi ele alan çok güzel bir makale yazdılar *. Bu makalenin üzerine, günümüzde iletişim ağının çok önemli bir parçası halini alan ve önemi gittikçe artan web servislerine ssl üzerinden nasıl erişileceğini anlatmazsak olmaz.

Makale

Microsoft işleri sürekli zorlaştıran bir firma. Tam güvenliği sağladık, artık içimiz rahat dediğimiz anda yeni yeni ürünler, platformlar, protokoller üretim şimdide bunların güvenliğini sağlayın bakalım diye karşımıza çıkıyor. Bazen "katkısız" Türk lokumu alıp bu ürün gruplarını ziyarete gitmeyi düşünüyorum.

İletişim olanaklarının artması ile orantılı olarak bu iletişimin güvenliğini sağlamakta zorlaşıyor ve önem kazanıyor. Bulunduğumuz noktada iletişim ağırlıklı olarak web üzerinden gerçekleştirildiği için web sunucularının sağladığı güvenlik özellikleri, gün geçtikçe performans özelliklerinden daha önemli hale geliyor. SSL teknolojiside günümüz güvenlik stratejilerinin vazgeçilmez bir parçası halini almış durumda. Tam bu noktada Soner Yaşar ve Tamer Öz IIS üzerinde SSLi nasıl kullanabileceğimizi ele alan çok güzel bir makale yazdılar *. Bu makalenin üzerine, günümüzde iletişim ağının çok önemli bir parçası halini alan ve önemi gittikçe artan web servislerine ssl üzerinden nasıl erişileceğini anlatmazsak olmaz.

Web Servislerine SSL ile erişmek, web servisine gönderilen ve web servisinin geri döndüğü mesajların güvenliğini sağlamak açısından son derece önemli. SSL kullanımı bize mesaj bütünlüğünü, yani gönderdiğimiz veya bize gönderilen mesajın hedefine değiştirilmeden iletilmesinin sağlanmasını ve mesaj güvenliğini yani iletilen mesajların şifrelenerek yabancı kişiler tarafından ele geçirilse dahi anlaşılamaz halde olmasını sağlar.

Bu makalede bir web servisinin kendisine erişilmek için Secure Sockets Layer (SSL) kullanılmasını gerektirecek şekilde ayarlanabileceğini ve bu web servisine HTTPS protokolünü kullanarak bir ASP.NET uygulamasından bu web servisine nasıl erişebileceğimizi göreceğiz.

Gereksinimler;
Bu makalede ele aldığımız örneği uygulayabilmek için aşağıdaki ürünlere gereksinim duyuyoruz;
   - Microsoft Windows 2000/2003 Server + Sunucu Sertifikası yüklenmiş bir Internet Information Services
   - Microsoft Visual Studio .NET
   - Az da olsa C# bilgisi

Özet olarak neler yapacağız?
Yapacaklarımızı özetlemek gerekirse;
   - Basit bir web servisi geliştireceğiz
   - Web Servisini çalıştırdığımız Virtual Directoryde SSL gereksinimini aktif hale getireceğiz
   - Certificate Authoritynin Sertifikasını İstemci Bilgisayara yükleyeceğiz
   - Servise erişecek bir web uygulaması geliştireceğiz

Basit bir web servisi geliştirmek için;
Benim bilgisayarımda Visual Studio 2003 olmadığı için örnekleri Visual Studio 2005 ile geliştiriyor olacağım. Ancak kodlar muhtemelen Visual Studio .NET 2003te de sorunsuz olarak çalışacaktır.

Yeni bir web servisi oluşturmak için öncelikle Visual Studioda "new web site" daha sonra "asp.net web service" yolunu izleyerek yeni bir C# ASP.NET Web Servisi projesi açıyorum.
(Ben projeyi D:\inetpub\wwwroot\YaGeHttpsWebService\ dizininde oluşturdum)
Varsayılan olarak oluşturulan we servisinin adını YaGeHttpsWebService.asmx olarak değiştirdim ve aşağıdaki metodu oluşturdum.

[WebMethod]
public long Toplama(long s1, long s2)
{
return (s1 + s2);
}

Gördüğünüz gibi son derece komplex bir yapı oluşturduk. s1 ve s2 adlı parametreleri kabul eden web servisimiz bu iki değerin toplamını geri dönüyor.
Bir sonraki adımda bu web servisinin daha doğrusu bu virtual directorynin sadece ssl ile bağlantı kabul etmesini sağlamak gerekiyor..

Web Servis Sanal Dizininin SSL Gerektirecek Şekilde Konfigure Edilmesi
Örneğimizde IIS kullanacağımızı ve IIS, SSL desteği sunacağını başta belirtmiştik. Bu adımda web sunucunuzda geçerli bir ssl sertifikanız olduğunu varsayıyoruz.

Web servisinin kullandığı virtual directoryi ssl kullanacak şekilde ayarlamak için;
 - IIS Managerı açarak ilgili virtual directoryi seçiyoruz ( bu örnekte YaGeHttpsWebService)
 - Virtual Directoryi Sağ tuşla tıklayarak açılan menüden Propertiesi tıklıyoruz.
 - Directory Security sekmesinde, Communications alanında Editi tıklıyoruz (Eğer Edit pasif durumdaysa Sunucu Sertifikası Yüklenmemiş demektir)
 - Require Secure Channel (SSL) checkboxını seçili hale getiriyoruz.
 - BU ekrandaki OK butonunu tıklıyoruz ve açılan ikinci ekranda yine OK butonunu tıklıyoruz..
 - Inheritance Overrides ekranında Select All butonunu tıklayarak OK butonunu tıklıyor ve Özellikler ekranını kapatıyoruz.
 - Böylece Virtual Directory kök dizininde (D:\inetpub\wwwroot\YaGeHttpsWebService\) ve tüm alt dizinlerde bu ayarları aktif hale getirmiş oluyoruz.

Web Servisini Test Ediyoruz;
Bu adımda web sunucu sertifikasının geçerli olduğundan, bir CA (Certification Authority) tarafından işlendiğinden ve istemci bilgisayarı tarafından güvenildiğinden emin olmak için web servisini test ediyoruz.

Web Servisini Internet Explorer ile SSL kullanarak açıyoruz;
https://localhost/YaGeHttpsWebService/YaGeHttpsWebService.asmx

Eğer web servisi sayfası hatasız olarak görüntülendiyse Internet Explorerı kapatarak iki sonraki adıma geçebiliriz.
Eğer aşağıdaki grafikte görebileceğiniz güvenlik uyarısı karşımıza çıktıysa View Certificate butonunu tıklayarak ilgili CAyi görebiliriz. Bu durumda istemci bilgisayara CAnin sertifikasını yüklememiz gerekiyor. Bunu bir sonraki adımda açıklıyor olacağız.



Certificate Authoritynin Sertifikasının İstemci Bilgisayara Yüklenmesi;
Bu adımda Certificate Authoritynin sertifikasını "trusted root certificate authority" olarak istemci bilgisayara yüklüyor olacağız. İstemci bilgisayarın sunucu sertifikasını güvenlik uyarısı görüntülemeden kabul etmesi için ilgili CAye güveniyor olması gerekiyor.

Eğer Certificate Authority olarak Windows domaininde bulunan Microsoft Certificate Servicesi kullanıyorsanız;
Bu prosedürü sadece web sunucu sertifikanızı bir Microsoft Certificate Services Certificate Authorityden temin etmişseniz uygulayın, aksi taktirde (yani CAden temin edilmiş bir .cer dosyasına sahipseniz) 8. adımdan devam edebilirsiniz.

 1. Internet Explorerı çalıştırın ve http:///certsrv adresini açın. (hostname = sunucu sertifikasının temin edildiği Microsoft Certificate Servicesin çalıştığı bilgisayarın adıdır.)
 2. Retrieve the CA certificate or certificate revocation list linkini, sonrada Nexti tıklayın
 3. Install this CA certification Path linkini tıklayın.
 4. Root Certificate Store diyaloğunda Yes butonunu tıklayın.
 
5. Servisi https kullanarak açın. Örneğin: https://localhost/YaGeHttpsWebService/YaGeHttpsWebService.asmx
 
Web servisi test sayfası bu sefer güvenlik uyarısı görüntülemeden açılmalıdır.
 CAnin sertifikası bu durumda istemci bilgisayarına eklenmiş durumdadır.


 
6. Adım1 ve 2yi uygulayarak Download CA certificate linkini tıklayın ve dosyayı bilgisayarınıza kaydedin.
 7. Eğer .cer dosyasını download ettiyseniz diğer adımları uygulayın.
 8. Taskbarda Start -> Run yolunu izleyin.
 9. Açılan ekranda mmc yazın ve enter tuşuna basın.
 10. Console menüsünde Add/Remove Snap-in komutunu tıklayın.
 11. Addi tıklayın.
 12. Certificatesi seçin ve Addi tıklayın.
 13. Computer Accountı seçin ve Next butonunu tıklayın.
 14. Local Computerı seçin ve Finish butonunu tıklayın.
 15. Closeu tıklayın ve OK butonunu tıklayın.
 16. Certificatesi genişletin (expand).
 17. Trusted root certification authoritiesi expand edin.
 18. Certificatesi sağ tuşla tıklayın, All Tasksi tıklayın ve Import butonunu tıklayın.
 19. Karşılama ekranını geçmek için Nexti tıklayın.
 20. CAnin .cer dosyasının yolunu ve adını belirtin.
 21. Nexti tıklayın.
 22. Place all certificates in the following storeu seçin ve Local Computeri seçin.
 23. Show physical storesu seçin.
 24. Trusted Root Certification Authoritiesi expand edin ve Local Computerı seçin.
 25. Sırasıyla OK, Next ve Finish butonlarını tıklayın.
 26. Onay diyaloğunu kapatmak için OK butonunu tıklayın.
 27. MMC ekranında Certificates dizinini yenileyin ve CAnin sertifikasının bu dizinde olduğundan emin olun.
 28. MMCyi kapatın.


Web Servisini kullanan bir İstemci Uygulamanın Geliştirilmesi;

Geldiğimiz noktada bir web servisi oluşturduk, web sunucumuzda ssli aktif hale getirdik ve web servisimizin bulunduğu sanal dizini ssl ile koruma altına aldık. Bu aşamada ssl üzerinden web servisine erişecek bir istemci uygulaması oluşturacağız.

Yeni bir ASP.NET Web Application oluşturmak için;
 - C# ile Yeni bir Web Application oluşturuyoruz
 - Web Servisine referans ekliyoruz (https ile)
    - Solution Explorerda References alanını sağ tuşla tıklayarak Add Web Referencei tıklıyoruz.
    - Açılan ekranda web servisimizin adresini yazıyoruz(https://localhost/YaGeHttpsWebService/YaGeHttpsWebService.asmx ).
    - Add Reference butonunu tıklıyoruz.
 - Default.aspx dosyasını açarak aşağıdaki tasarımı oluşturuyoruz.

 

Buttonu tıklayarak aşağıdaki kodu ekliyoruz:

private void Button1_Click(object sender, System.EventArgs e)
{
WsT.Service S = new WsT.Service(); int sonuc = (int)S.Toplama(Int32.Parse(TextBox1.Text), Int32.Parse(TextBox2.Text)); Label4.Text = sonuc.ToString();
}

F5e basarak web uygulamanızı çalıştırın, metin kutularına sayısal değerler girerek Hesapla butonunu tıklayın. Web uygulamanız SSL kullanarak web servisine erişecek ve işlemi gerçekleştirecektir.


Açıkçası, web servislerine ssl kullanılarak erişilmesi konusunu duyduğumda bunun için özel bazı işlemler yapılması gerektiğini düşünmüştüm ancak görebildiğiniz gibi web uygulamanızın çalıştığı sanal dizinde ssl desteğini aktif hale getirdikten sonra yapmanız gereken tek şey web referansını https:// ile belirtmek. Ancak etkili ve gerekli bir güvenlik önlemi olduğu tartışılmaz.
Güvenli günler dilerim..