2011-09-06 16 views
8

ConfigurationManage -> section.SectionInformation.ProtectSection() makine bağımlı mı?

Configuration config = ConfigurationManager.OpenExeConfiguration (Application.ExecutablePath); 
ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection; 
if (!section.SectionInformation.IsProtected) 
{ 
    section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider"); 
} 

Uygulamayı başka bir makineye taşıdığımda sorun yaşıyorum.

bölümdür. SectionInformation.ProtectSection çağrı makine bağımlı, anlam, ben yapılandırma dosyası kopyalamak ve başka bir makinede kullanamazsınız?

Makine bağımsız birimi olan bir sağlayıcı (DataProtectionConfigurationProvider dışında) var mı?

Uygulamamın aynı yapılandırma dosyasına sahip birkaç makinede çalıştığı bir gereksinimdir (Bir flash sürücüden çalıştırılmalıdır).

Teşekkürler, Fábio

cevap

10

anlamı, section.SectionInformation.ProtectSection çağrı makinesi bağımlı mı, ben yapılandırma dosyası kopyalayıp başka makinede kullanamazsınız?

Evet, bu kadarıyla söyleyebilirim doğru. This article, anahtarların makine başına veya kullanıcı bazında depolandığını belirtir.

Makine bağımsız birimi olan bir sağlayıcı (DataProtectionConfigurationProvider dışında) var mı?

Değil kutunun dışında, iki sağlayıcıları aynı "sorun" var ( DataProtectionConfigurationProvider ve RSAProtectedConfigurationProvider) hem biliyoruz. Ben anahtarları makineler arasında yeniden kullanılıyor, ancak bunu başarmak için nasıl herhangi bir örnek bulamadı için RSA sağlayıcısı izin verdiğini bir kaç ipucu bulduk.

Ancak, ihtiyacınız olanı elde etmenin bir yolu var, ben de benzer bir sorun yaşadığım için dün kendim yaptım (bir ağ konumundan bir uygulamayı çalıştırma gereksinimim vardı ve tüm müşterileri aynı paylaşımı paylaşmak için gerekliydi) şifreli yapılandırma dosyası). Kendi ProtectedConfigurationProvider'unuzu açabilirsiniz. İşte kavramı göstermek birkaç bağlantı var:

bu makaleleri kullanarak, makineyle olmadığını kendi ProtectedConfigurationProvider inşa edebildi veya kullanıcının bağımlı ve bir uygulamada kullanın. Yapılandırma bölümümde, yapılandırma bölümünü koruyan bir post-build adım var ve bu yüzden sadece korumalı sürümünü dağıtıyorum. Korunan bölüm verilerine ulaşmak, diğer makinelerde sorunsuz bir şekilde beklendiği gibi çalışır. Elbette bölümlerinizi güvenli bir şekilde şifrelemek ve şifrelemek konusunda çok dikkatli olmalısınız. Orada nasıl yapılacağını gösteren birkaç örnek var, this bence bunlardan biri.

Üç makaleden birinde açıkça belirtilmeyen şeylerden biri, ASP.NET kullanmıyorsanız uygulamanızı sağlayıcınızı nasıl bulacağınızdır. Genel kurulum önbelleğine kurmanın alışılmış yolu, bir flash sürücüden bir uygulama çalıştırdığınızı belirttiğiniz için muhtemelen işe yaramayacaktır.Yani, bu kadar, bunun yerine app.config dosyasına benzer eklemek gerekir: şifreleme yapar montaj ana ünite olarak aynı yolda ise bu çalışması gerekir

<?xml version="1.0"?> 
<configuration> 
    ... 
    <configProtectedData defaultProvider="MyEncryptionProvider"> 
    <providers> 
     <add name="MyEncryptionProvider" 
     type="MyAssembly.MyEncryptionProvider, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=whatever_the_assembly_token_is" /> 
    </providers> 
    </configProtectedData> 
    ... 
</configuration> 

. İmzalı bir montaj kullanıyorum, sn -T {Assembly} size config dosyasında girmeniz gereken PublicKeyToken'i verecektir.

using System.Configuration; 

... 

Configuration oConfiguration = ConfigurationManager.OpenExeConfiguration(yourExePath); 
oSection.SectionInformation.ProtectSection("MyEncryptionProvider"); 
oSection.SectionInformation.ForceSave = true; 
oConfiguration.Save(); 

Bugün onu test ve bir yapılandırma dosyası bir geliştirme makinesine (XP SP3) üzerinde şifrelenerek ile çalıştı ve XP SP2 kullanılıyor: Bir bölümü Koruma

sonra buna benzer yapılır , Win7 32Bit ve Win7 64Bit.

REDDİ

  • Eğer meclisleri oturum yoksa bunların hiçbirini çalışır emin değilim.
  • Kendi sorumluluğunuzdadır, herhangi bir standartta güvenlik konusunda uzman değilim.
+0

Takrl, bu harika. Çok teşekkür ederim. Nasıl olduğunu bilmene izin vereceğim. – Fabio

+0

@Fabio Sure, herhangi bir sorun yaşarsanız lütfen bana bildirin ... – takrl

+0

Merhaba Guys, Özel korumalı yapılandırma sağlayıcım ile yapılandırmayı şifrelemede sorun yaşıyorum. Ben section.SectionInformation.ProtectSection ("AesProvider") aradığımda bana hata veriyor, "Koruma sağlayıcısı 'AesProvider' bulunamadı." ProtectedConfiguration.Providers kullandığınızda, ancak başka bir yapılandırma dosyasını şifrelemek için kullanamadığım programın yapılandırmasını kullanır gibi görünüyor. Bu şekilde tecrübe ettin mi? – flynhigh