Alper Konuralp

Kartınızı Oluşturun
Google+
Follow @alperkonuralp

Posts Tagged ‘aspnet_regiis’

ASP.Net uygulamalarında ConnectionString’i şifrelemek

ASP.Net uygulamalarımızda en çok kullandığımız yöntemlerden biri, connectionString’i web.config dosyası içerisinde tanımlamak. Bu sayede tekrardan derlemeye gerek kalmadan uygulamamızın veri tabanı sunucusunu değiştirme şansına sahip olmaktayız. Aynı zamanda tek yerden yapılan güncelleme kod içerisinde connectionstring arama derdinden bizi kurtarmakta. Bu özellik gerçekten güzel gibi ama bazen bu bağlantının meraklı gözlerden saklanması gerekebilir. Bunun için web.config içerisindeki bazı alanların şifrelenebilmesi mümkündür. Önce şifreleyebileceğimiz alanlara bakalım :

  • <connectionStrings>
  • <processModel>
  • <runtime>
  • <mscorlib>
  • <startup>
  • <system.runtime.remoting>
  • <configProtectedData>
  • <satelliteassemblies>
  • <cryptographySettings>
  • <cryptoNameMapping>
  • <cryptoClasses>

Şifreleme 2 ayrı yöntem ile yapılabilir.
1. Yöntem
İlk yöntemimiz aspnet_regiis.exe programını kullanmak. Bu yöntemde web.config dosyasını şifreleyeceğiniz sunucuya bağlı olmanız veya kendi test makinanızda çalışıyor olmanız lazım. Çünkü bu uygulamayı çalıştırabilmek için web sitesinin bulunduğu makinada Dos Komut İstemi açmanız gerekecek. Gelelim işlemin nasıl yapılacağına :

1. Önce web sitesinin bulunduğu makinada bir Dos Komut İstemi (Command Prompt) açalım. İşi sağlama almak için Yönetici olarak açmayı(Run as administrator) seçebiliriz. ( Start -> All Programs -> Accessories -> Command Prompt -> Sağ tık -> Run as Administrator )

2. Açılan pencerede

cd %WINDOWSDIR%\Microsoft.Net\Framework\v2.0.50727

veya

cd %WINDOWSDIR%\Microsoft.Net\Framework\v4.0.30319

yazıp enter’e basarız. böylece programın yer aldığı dizine varırız.

3. Artık şifreleme veya açma işine başlayabiliriz.
a) Şifreleme : aspnet_regiis.exe’nin -pe parametresini kullanarak yapılır. pe parametresinden sonra şifrelemek istediğiniz xml elemanını belirtirsiniz. Mesela connectionStrings gibi. Kullanılabilecek değerleri yukarıdaki listede vermiştim. Ayrıca buna ek olarak kullanmamız gereken bazı alt parametreler daha var :
-site parametresi : hangi sitenin web.config dosyasını şifreleyeceğimizi belirtir.
-app parametresi : site içindeki hangi uygulamanın şifreleneceğini belirtir.
-prov parametresi : şifreleme için kullanılacak provider’ı belirtir. bu parametre için DataProtectionConfigurationProvider değeri kullanılır.
Tam olarak yazımına bakarsak :

aspnet_regiis.exe -pe connectionStrings -prov DataProtectionConfigurationProvider -site "http://deneme.konuralp.gen.tr" -app /

Böylece web.config dosyasının içindeki connectionStrings alanının şifrelendiğini görürüz.

b) Şifreyi Açma : aspnet_regiis.exe’nin -pd parametresini kullanarak yapılır. pd parametresinden sonra şifresini açmak istediğiniz xml elemanını belirtirsiniz. Mesela connectionStrings gibi. Kullanılabilecek değerleri yukarıdaki listede vermiştim. Ayrıca buna ek olarak kullanmamız gereken bazı alt parametreler daha var :
-site parametresi : hangi sitenin web.config dosyasını şifreleyeceğimizi belirtir.
-app parametresi : site içindeki hangi uygulamanın şifreleneceğini belirtir.
Tam olarak yazımına bakarsak :

aspnet_regiis.exe -pd connectionStrings -site "http://deneme.konuralp.gen.tr" -app /

Böylece web.config dosyasının içindeki connectionStrings alanının şifresinin çözüldüğünü görürüz.

2. Yöntem
Kod ile aynı işlemi yapabilmekte mümkündür. Özellikle hosting gibi yerlerde bize makinada uzak bağlantı açma hakkı verilmez. Bu yüzden istediğimiz işlemleri dos komut istemi ile yapmamız mümkün olmaz. Böyle durumlarda kod ile de istediğimiz sonuca ulaşabiliriz. Öncelikle web.config dosyamızı açmamız gerekiyor. bunun için :

Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);

kodunu kullanırız. Sonrada üzerinde şifreleme veya açma yapacağımız xml bölgesine ulaşmamız lazım.

ConfigurationSection section = config.GetSection("connectionStrings");

connectionStrings yerine yukarıdaki listede yer alan herhangi bir elemanı da kullanabilirsiniz. Bu noktada ilerlemeden önce section içinde veri olup olmadığını kontrol etmek gerekir. Eğer null değer içerir ise bir sonraki işlemimizde hata oluşur.
section nesnemizin özellikleri arasında yer alan section.SectionInformation.IsProtected özelliği bu noktada bizim için önemli. bu özellik bu alanın şifreli olup olmadığı bilgisini bize veriyor. Bunu şifreleme yaparken alanı tekrardan şifrelemeye çalışmamak için, veya açma yaparkende şifresiz bir alanı açmaya çalışmamak için kullanabiliriz.
Gerekli kontrolleri yaptıktan sonra artık alanı şifreleme veya açma işlemini yapabiliriz :
Şifrelemek için :

section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");

Açmak için :

section.SectionInformation.UnprotectSection();

Son olarak değişikliğin dosyaya yansıtılması için :

config.Save();

Böylece işlem tamamlanır. Bu işleri daha kolay yapabilmek için 2 ayrı metod haline getirirsek :

public static class CommonOperations
{
    public static void ProtectSection(string sectionName, string provider)
    {
        Configuration config = WebConfigurationManager. OpenWebConfiguration(HttpContext.Current.Request.ApplicationPath);

        ConfigurationSection section = config.GetSection(sectionName);

        if (section != null && !section.SectionInformation.IsProtected)
        {
            section.SectionInformation.ProtectSection(provider);
            config.Save();
        }
    }

    public static void UnProtectSection(string sectionName)
    {
        Configuration config = WebConfigurationManager.OpenWebConfiguration(HttpContext.Current.Request.ApplicationPath);

        ConfigurationSection section = config.GetSection(sectionName);

        if (section != null && section.SectionInformation.IsProtected)
        {
            section.SectionInformation.UnprotectSection();
            config.Save();
        }
    }
}

Kullanırken ise :
Şifrelemek için :

CommonOperations.ProtectSection("connectionStrings", "DataProtectionConfigurationProvider");

Açmak için :

CommonOperations.UnProtectSection("connectionStrings");

şeklinde olabilir.

IIS, ASP.NET sayfalarını göstermiyor

Bugün farkettim ki, biz eskisi kadar iis kullanmıyoruz. Özellikle Microsoft.Net 2.0 ve Visual Studio 2005 ile gelen ASP.Net Development Server sayesinde iis’i sadece hosting gibi alanlarda kullanmaya başlamışız. Bende kendi projemi local iis’im üzerinden yayınlamaya kalktığımda bir problemle karşılaştım. IIS asp.net’i tanımıyordu. Bilgisayarı yeni kurduğum için butür bir problem oluşmuş. Sebep ise IIS ‘i microsoft.net 2.0′ı kurduktan sonra kurmuş olmam. Doğal olarak Microsoft.Net 2.0 Kurulum programı kendini IIS’e ekleyememiş. Böyle bir durumda ilk akla gelen Microsoft.Net 2.0 Kurulumunu onarmak veya tekrardan yapmak. Buna başladım ancak kurulum yarıda kaldı. Program önce eski sürümü kaldırmam gerektiğini söylüyor. O zaman bir durdum. 2 dakika sonra google da bir arama yaptım. karşıma microsoft’un şu sayfası çıktı: http://msdn.microsoft.com/en-us/library/k6h9cz8h.aspx . Bu sayfada Microsoft.Net 2.0′ın configurasyon araçlarından olan aspnet_regiis.exe programının kullanımı açıklanmakta. Birçok şey yapabilen bu araçta bana gerekli olan

aspnet_regiis -i

şeklindeki kullanımı. Bunu komut satırına yazıp çalıştırdıktan sonra (çalışma dizini: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 olmalı)
iis’i restart ettim. ASP.NET bileşeninin çalışabilmesi için gerekli izni verdim. Tekrar restart ettim ve mutlu son.

İzmir Yazılım Grubu
Google Groups
Subscribe to İzmir Yazılım Grubu
Email:
Visit this group
Mayıs 2012
Pts Sal Çar Per Cum Cts Paz
« Şub    
 123456
78910111213
14151617181920
21222324252627
28293031  
Yeni Downloadlar
StatPress
Visits today: 98
Sahip oldugum diger adresler :
3dmaxtraining.info
3dmaxtrainings.com
3dmaxtrainings.info
adobelearning.info
adobelearnings.info
adobetrainings.com
adobetrainings.info
autocadbootcamp.info
autocadexams.info
autodesklearning.info
autodesklearnings.com
autodesklearnings.info
ciscotrainings.info
egepro.com
elonunbahcesi.com
elonunbahcesi.info
flashbootcamp.info
flashexams.com
flashexams.info
konuralp.biz
konuralp.org
mayatutorial.info
mayatutorials.info
microsoftexams.info
microsofttrainings.info
proege.com
sharepointlearning.info
sharepointlearnings.com
sharepointlearnings.info
sharepointtutorial.info
silverlightbootcamp.info
silverlightlearning.info
silverlightlearnings.info
silverlighttraining.info
silverlighttrainings.com
silverlighttrainings.info
silverlighttutorial.info
silverlighttutorials.info
sirasende.info
urunbul.info
yagmurca.com
yagmurca.info