Crittografia della sezione connectionStrings – utility per app.config

Esiste un’utilità che crittografa una sezione di configurazione denominata (o solo la sezione connectionStrings ) in un file app.config in modo simile che è ansible utilizzare aspnet_regiis con i file web.config ?

So che questo può essere fatto in codice – ci sono esempi di codice là fuori, ma spero di evitare di scrivere un’applicazione per questo.

Puoi provare quanto segue:

https://magenic.com/thinking/encrypting-configuration-sections-in-net

In breve – rinominare il file app.config in web.config – lo schema è identico, quindi aspnet_regiis funziona. Rinominare nuovamente app.config al termine.

Vecchia domanda, ma ecco il modo Microsoft:

.NET 2.0: http://msdn.microsoft.com/en-us/library/89211k9b(v=vs.80).aspx

.NET 3.5: http://msdn.microsoft.com/en-us/library/ms254494(v=vs.90).aspx (Sezione “Crittografia delle sezioni di file di configurazione mediante la configurazione protetta”)

Attiva / distriggers la crittografia nel file app.config:

 static void ToggleConfigEncryption(string exeConfigName) { // Takes the executable file name without the // .config extension. try { // Open the configuration file and retrieve // the connectionStrings section. Configuration config = ConfigurationManager. OpenExeConfiguration(exeConfigName); ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection; if (section.SectionInformation.IsProtected) { // Remove encryption. section.SectionInformation.UnprotectSection(); } else { // Encrypt the section. section.SectionInformation.ProtectSection( "DataProtectionConfigurationProvider"); } // Save the current configuration. config.Save(); Console.WriteLine("Protected={0}", section.SectionInformation.IsProtected); } catch (Exception ex) { Console.WriteLine(ex.Message); } } 

Compilare questa applicazione console e trascinare un file di configurazione su di esso. Sputerà una copia del file di configurazione con le sue stringhe di connessione crittografate.

Si noti che è necessario crittografare come lo stesso utente che consumerà il file di configurazione.

 using System; using System.Configuration; using System.IO; namespace ConnectionStringEncryptor { class Program { static void Main(string[] args) { if (args.Length == 0) { throw new ArgumentException("Please supply a config file to encrypt"); } string originalConfigFilePath = args[0]; AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", originalConfigFilePath); Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); ConnectionStringsSection connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings"); connectionStringsSection.SectionInformation.ProtectSection("DataProtectionConfigurationProvider"); config.SaveAs(originalConfigFilePath + ".encrypted"); } } } 

Implementazione di PowerShell basata sulla risposta di MichelZ:

 <# .SYNOPSIS Encrypts a section in .NET app configuration file. #> function Protect-DotNetConfigSection { [CmdletBinding()] param ( # Path to .exe file. [Parameter(Mandatory = $true)] [string] $ExePath, # List of section names. [Parameter(Mandatory = $true)] [string[]] $Sections ) $config = [System.Configuration.ConfigurationManager]::OpenExeConfiguration($ExePath) foreach ($section in $Sections) { $config.GetSection($section).SectionInformation.ProtectSection('DataProtectionConfigurationProvider') } $config.Save() } Protect-DotNetConfigSection 'C:\MyApp\MyApp.exe' 'connectionStrings' Protect-DotNetConfigSection 'C:\MyApp\MyApp.exe' @('connectionStrings', 'appSettings')