2013-02-12 18 views
6

Possiedo un'applicazione Web, che pubblico su tre server Web utilizzando l'opzione "pubblica".Crittografia WebConfig

Voglio crittografare la sezione connectionstrings del file di configurazione web. Il comando di seguito lo farà:

c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" c:\inetpub\application 

Tuttavia, devo RDP (Remote Desktop) per ogni server ed eseguire il comando su ogni server come non è possibile eseguire in questo modo (da un PC client):

\ servername \ c $ \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_regiis.exe -pef "connectionStrings" \ servername \ c $ \ inetpub \ applicazione

c'è un modo migliore di fare questo: forse:

1) Execu te una riga di comando sul server dopo la pubblicazione di 2) Utilizzare l'opzione costruire in Visual Studio che consente di eseguire un file batch dopo la pubblicazione è completa

+0

Posso chiederti perché non ti fidi del tuo server web. Inoltre, in genere quando si genera il pacchetto di distribuzione, è necessario rimuovere la stringa di connessione. Ho configurato i miei server IIS per gestire questo e aggiungere le loro stringhe di connessione dalla console di IIS. Probabilmente sarebbe meglio che passare una stringa di connessione nel file web.config in quanto consente una configurazione/bilanciamento del carico più semplice per macchina. – Colton

+0

L'app Web viene distribuita su alcuni PC client in una rete locale. Se non criptico la sezione delle stringhe di connessione; chiunque sarà in grado di vedere la password del database che ha effettuato l'accesso. – w0051977

+1

Abbastanza giusto ... Potrebbe essere possibile utilizzare Integrated Security? Se i server sono configurati correttamente questo attenuerà completamente il problema, ma impostare l'autenticazione AD per SQL sembra essere un processo molto burocratico. – Colton

risposta

1

Se Integrated Security non è un'opzione, vi suggerisco MS Web Deploy .

Quando si crea un deployment package con Visual Studio 2012, si otterrà un file zip e file di script da riga di comando. È possibile modificare il file di script per crittografare il proprio web.config o eseguire il rollover del proprio script batch o di PowerShell.

+0

Support per la crittografia di web.config dopo l'aggiunta della distribuzione nella versione 3.5 di Web Deploy. https://blogs.iis.net/msdeploy/archive/2013/07/09/webdeploy-3-5-rtw.aspx – cederlof

3

Criptare la sezione connectionStrings del proprio web.config sul server e quindi aggiungere questa sezione crittografata al Web. [CONFIGURATION_FOR_SERVER] .config file di trasformazione. La chiave è la prima riga che dice di sostituire la parte connectionStrings del tuo web.config originale con questo nuovo valore crittografato. Avrai bisogno di un nuovo file di trasformazione per ogni server che stai pubblicando. Visual Studio alzerà un avvertimento (non errore) ovvero

Warning 15 The element 'connectionStrings' has invalid child element 'EncryptedData' in namespace 'http://www.w3.org/2001/04/xmlenc#'. List of possible elements expected: 'add, remove, clear'. C:\DevTFS\YourProject\Web.Stage.config 14 6 YourProject 

sul formato di questo file di trasformazione - non ho trovato la sintassi corretta per aggirare il problema, quindi sono aperto a suggerimenti, ma funziona ancora quindi sono felice Pieno blog entry su questo: http://randomdotnetnuggets.blogspot.com.au/2013/05/publishing-encrypted-connection-strings.html

<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider" xdt:Transform="Replace"> 
<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" 
    xmlns="http://www.w3.org/2001/04/xmlenc#"> 
    <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" /> 
    <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> 
    <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#"> 
     <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" /> 
     <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> 
     <KeyName>Rsa Key</KeyName> 
     </KeyInfo> 
     <CipherData>   
     <CipherValue>t8p7aOZTjMo...zE6FAAI=</CipherValue> 
     </CipherData> 
    </EncryptedKey> 
    </KeyInfo> 
    <CipherData> 
    <CipherValue>Vy1TZWY8....ic+Qg6T7U</CipherValue> 
    </CipherData> 
</EncryptedData> 

0

Questa è una vecchia questione, ma questa risposta può aiutare qualcuno.

In uno scenario di carico bilanciato o di Web farm, è possibile crittografare il file una volta e copiare web.config su altre macchine. Tuttavia, affinché funzioni, è necessario utilizzare lo stesso codice macchina per ciascun sito Web.

https://msdn.microsoft.com/en-us/library/dtkwfdky.aspx

Spero che questo aiuti qualcuno alla ricerca di questo.